|
一、實(shí)驗(yàn)思路
動(dòng)態(tài)數(shù)碼管就是我們的單片機(jī)運(yùn)行的太快,以至于我們的肉眼沒有辦法看到間隔,所以我們改一下數(shù)據(jù),就可以了,有時(shí)候我們用的就是人的視覺暫留,我們?cè)谑褂脭?shù)碼管時(shí),得知道是共陰還是共陽,在這里,我使用的是共陰的數(shù)碼管,使用的是12Mhz的晶振,如果我們使用的是11.0592MHz,
timg (1).jpg (17.86 KB, 下載次數(shù): 84)
下載附件
2020-11-13 13:02 上傳
這是我們數(shù)碼管的原理圖,數(shù)碼管其實(shí)就是發(fā)光二極管顯示,共陰,然后我們可以根據(jù)段碼計(jì)算出來的自己想要顯示的數(shù)字,這里有一些
timg.jpg (22.18 KB, 下載次數(shù): 111)
下載附件
2020-11-13 13:03 上傳
二、代碼原理
我們用定時(shí)器顯示,如果我們定時(shí)器定時(shí)2ms,那么2ms就中斷一次,而我們?cè)谥袛嗬锩娑x一個(gè) 數(shù)字,當(dāng)達(dá)到500時(shí),就是500×2ms=1S,然后使數(shù)據(jù)更新一邊,變成下一個(gè)數(shù)字,我們有倆個(gè)數(shù)組,一個(gè)是存放段碼的,另一個(gè)是存放實(shí)際值的,我們可以十位和各位分別顯示,存放到另一個(gè)數(shù)組里面,然后在經(jīng)過138譯碼器顯示出來。
三 、實(shí)驗(yàn)源碼
四、實(shí)驗(yàn)現(xiàn)象
1605244234149.jpg (1.96 MB, 下載次數(shù): 104)
下載附件
2020-11-13 13:11 上傳
還有一點(diǎn)就是那個(gè)消隱,P0=0x00;的那個(gè)就是消隱,如果沒有消隱,顯示的數(shù)字則會(huì)很不清晰;
可能代碼還存在點(diǎn)問題,希望大家能夠批評(píng)指正!
單片機(jī)源程序如下:- /*************************************
- 本人用的是普中的開發(fā)板,然后138和數(shù)碼管的連接圖會(huì)貼貼出來,
- 芯片是stc89c52 ,晶振是12MHz,僅供交流使用
- *************************************/
- #include <reg52.h>
- typedef unsigned char u8;
- typedef unsigned int u16;
- #define TIME 500
- sbit LSA=P2^2; //引腳的定義
- sbit LSB=P2^3;
- sbit LSC=P2^4;
- u8 code smgduan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
- 0x7f,0x6f};//數(shù)碼管段碼,共陰極段碼
- u8 disbuff[2];//存放00~99的數(shù)組
- unsigned char t=0;//數(shù)值00~99
- /*****************************************************
- 函數(shù)名稱:void In0Init()
- 函數(shù)功能:定時(shí)器0初始化
- 輸入?yún)?shù):無
- 輸出參數(shù):無
- *****************************************************/
- void In0Init()
- {
- TMOD = 0x01; //開啟定時(shí)器0
- TH0 = 0xF8; //賦初值
- TL0 = 0x30;
- EA = 1; //開啟總中斷
- ET0 = 1; //開啟定時(shí)器0的中斷
- TR0 = 1;
- }
- /*****************************************************
- 函數(shù)名稱:void DigDisplay()
- 函數(shù)功能:數(shù)碼管顯示
- 輸入?yún)?shù):無
- 輸出參數(shù):無
- *****************************************************/
- void DigDisplay()
- {
- u8 i,j;
- for (i=0;i<2;i++)
- {
- switch(i)//位選,選擇哪一位亮
- {
- case(0): LSA=1;LSB=1;LSC=1;break;
- case(1): LSA=0;LSB=1;LSC=1;break;
-
- }
- P0=disbuff[i];
- j=10; //消隱,要不然會(huì)很模糊
- while(j--);
- P0=0x00;
- }
- }
- /*****************************************************
- 函數(shù)名稱:void DealNumber()
- 函數(shù)功能:處理數(shù)字,拆分一位一位的顯示
- 輸入?yún)?shù):無
- 輸出參數(shù):無
- *****************************************************/
- void DealNumber()
- {
- disbuff[0]=smgduan[t/10];//處理十位
- disbuff[1]=smgduan[t%10];//處理各位
- }
- /*****************************************************
- 函數(shù)名稱:void main ()
- *****************************************************/
- void main ()
- {
- In0Init();
- while(1)
- {
- DealNumber();
- DigDisplay();
- }
- }
- /*****************************************************
- 函數(shù)名稱:void Timer0Interrupt(void) interrupt 1
- 函數(shù)功能:中斷服務(wù)函數(shù)
- 輸入?yún)?shù):無
- 輸出參數(shù):無
- *****************************************************/
- void Timer0Interrupt(void) interrupt 1
- {unsigned int n;
- TH0 = 0xF8; //重新賦初值
- TL0 = 0x30;
- n++; //當(dāng)n==500時(shí),則為1s
- if(n==TIME)//TIME定義為500,用戶可以自己修改
- {
- t++; //實(shí)際的數(shù)值
- n=0;
- }
- if(t==100)//如果t==99;然后重新顯示00
- {
- t=0;
- }
- }
復(fù)制代碼
全部資料51hei下載地址:
顯示00~99.7z
(1.5 MB, 下載次數(shù): 16)
2020-11-13 16:16 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|