部落客福利:100G+電子設計學習資源包!
http://mp.weixin.qq.com/mp/homepage?__biz=MzU3OTczMzk5Mg==&hid=7&sn=ad5d5d0f15df84f4a92ebf72f88d4ee8&scene=18#wechat_redirect --------------------------------------------------------------------------------------------------------------------------
記得當時剛學器件的時候,叫同學給我講原理,他當時說你去看datasheet就懂了。
當時看到一大篇英文的說明書時,馬上就退縮了。
其實剛開始學的時候,幾頁的英語說明書,隻需要找到自己需要的就行了。
把真值表對着電路圖一看,晶片的作用就了解的一清二楚,也不會有誤解,因為真值表裡的輸入輸出都是互相對應的。
數位管的顯示用的是74HC138譯碼器 ,這是一種三通道輸入,八通道輸出譯碼器。
采用動态掃描顯示即輪流向各位數位管送出執行碼和相應的位選,利用發光管的餘輝和人眼視覺暫留作用,
使人的感覺好像各位數位管同時都在顯示。
#include "reg52.h" //此檔案中定義了單片機的一些特殊功能寄存器
typedef unsigned int u16; //對資料類型進行聲明定義
typedef unsigned char u8;
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//顯示0~F的值
void delay(u16 i)
{
while(i--);
}
void DigDisplay()
{
u8 i;
for(i=0;i<8;i++)
{
switch(i) //位選,選擇點亮的數位管,
{
case(0):
LSA=0;LSB=0;LSC=0; break;//顯示第0位
case(1):
LSA=1;LSB=0;LSC=0; break;//顯示第1位
case(2):
LSA=0;LSB=1;LSC=0; break;//顯示第2位
case(3):
LSA=1;LSB=1;LSC=0; break;//顯示第3位
case(4):
LSA=0;LSB=0;LSC=1; break;//顯示第4位
case(5):
LSA=1;LSB=0;LSC=1; break;//顯示第5位
case(6):
LSA=0;LSB=1;LSC=1; break;//顯示第6位
case(7):
LSA=1;LSB=1;LSC=1; break;//顯示第7位
}
P0=smgduan[i];//發送段碼
delay(100); //間隔一段時間掃描
P0=0x00;//消隐
}
}
void main()
{
while(1)
{
DigDisplay(); //數位管顯示函數
}
}