- #include<reg51.h>
- #include <stdio.h>
- #define uchar unsigned char
- uchar display_code[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff};
- //定義數(shù)組存放顯示數(shù)據(jù)的編碼
- uchar display_data[8]={0,0,0,0,0,0,0,0}; //定義數(shù)組存放顯示數(shù)據(jù)的各位
- uchar c1,b1;
- sbit P1_1=P1^1;
- void delay(void) //延時
- {
- uchar i;
- for(i=500;i>0;i--);
- }
- void display() //顯示程序
- {
- uchar i,k;
- k=0x01;
- for(i=0;i<8;i++)
- {
- P2=0;
- P0=display_code[display_data[i]];
- P2=k;
- k=k<<1;
- delay();
- }
- P2=0;
- }
- void convert() //轉(zhuǎn)換程序
- {
- uchar i,f2;
- long f,f1,k;
- f=c1*65536+TH1*256+TL1 ;
- f1=f-f%10; //此變量是為了讓八位LED的高位為0時不顯示而設(shè)置
- for(i=7;i>0;i--) //此循環(huán)將計數(shù)值轉(zhuǎn)換為顯示數(shù)組,從高位到低位依次存放在
- //display_data[0]至display_data[7]
- {display_data[i]=f%10;
- f=f/10;
- }
- display_data[0]=f;
- k=1e7; //從這開始到本子程序結(jié)束的語句完成讓八位LED的高位為0時不顯示
- for(i=0;i<7;i++)
- {f2=f1/k;
- if(f2==0)
- {
- display_data[i]=10;
- k=k/10;
- }
- }
- }
- void timer1(void) interrupt 3 //定時器1中斷服務(wù)程序
- {
- c1++;
- }
- void timer0(void) interrupt 1 //定時器0中斷服務(wù)程序
- {
- TH0=0xb1; //裝入時間常數(shù)
- TL0=0xe0;
- P1_1=!P1_1; //P1.1取反,從P1.1引腳輸出25Hz的方波信號,通過導(dǎo)線連接
- //到P3.5引腳輸入,以方便調(diào)試程序。若使用其它信號源,則去掉即可。
- if (b1==49)
- {
- convert();
- c1=0; //將計數(shù)值清零
- b1=0;
- TH1=0;
- TL1=0;
- }
- else b1++;
- }
- void main(void) //主函數(shù)
- {
- P1_1=0;
- c1=0;
- b1=0;
- TH1=0;
- TL1=0;
- TMOD=0x51;
- TH0=0Xb1;
- TL0=0Xe0;
- IE=0x8a;
- TCON=0x50;
- while(1)
- {
- display();
- }
- }
復(fù)制代碼 |