一直想有這樣的顯示,沒有成功,只是在仿真中能顯示,是靜態顯示,對定時器學習后,有更深了一點認識,就感覺用定時器能實現,結果就成功了。
1.jpg (334 KB, 下載次數: 44)
下載附件
2018-12-14 23:39 上傳
2.png (44.68 KB, 下載次數: 41)
下載附件
2018-12-14 23:39 上傳
單片機源程序如下:
- #include<reg51.h>
- typedef unsigned char u8;
- typedef unsigned int u16;
- u8 num,t,aa;
- 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--);
- }
- sbit LSA=P2^2;
- sbit LSB=P2^3;
- sbit LSC=P2^4;
- void TimerInit()
- {
- TMOD=0X11;
- TH1=0X3C;
- TL1=0XB0;
- TH0=0X3C;
- TL0=0XB0;
- EA=1;
- ET1=1;
- TR1=1;
- ET0=1;
- }
- void Timer1() interrupt 3
- {
- TH1=0X3C;
- TL1=0XB0;
- num++;
- if(num==20)
- {
- num=0;
- TF1=0;
- t++;
- if(t==15)
- {
- TR1=0;
- TF1=0;
- TR0=1;
- }
- }
- }
- void Timer0() interrupt 1
- {
- TH0=0X3C;
- TL0=0XB0;
- aa++;
- if(aa==20)
- {
- aa=0;
- TF0=0;
- t--;
- }
- if(t==0)
- {
- TR0=0;
- TF0=0;
- TR1=1;
- }
- }
- void DigDisplay()
- {
- u8 i;
- for(i=0;i<8;i++)
- {
- switch(i)
- {
- case(0):LSA=0;LSB=0;LSC=0;break;
- case(1):LSA=1;LSB=0;LSC=0;break;
- case(2):LSA=0;LSB=1;LSC=0;break;
- case(3):LSA=1;LSB=1;LSC=0;break;
- case(4):LSA=0;LSB=0;LSC=1;break;
- case(5):LSA=1;LSB=0;LSC=1;break;
- case(6):LSA=0;LSB=1;LSC=1;break;
- case(7):LSA=1;LSB=1;LSC=1;break;
- }
- P0=smgduan[t];
- delay(10);
- P0=0x00;
- }
- }
- void main()
- {
- TimerInit();
- while(1)
- {
- DigDisplay();
- }
- }
-
復制代碼
所有資料51hei提供下載:
控制普中的板子動態加減循環0-F.zip
(13 KB, 下載次數: 6)
2018-12-14 23:51 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|