|
|
- #include<reg52.h> //此文件中定義了單片機(jī)的一些特殊功能寄存器
- #define uchar unsigned char //對(duì)數(shù)據(jù)類型進(jìn)行聲明定義
- #define uint unsigned int
- sbit LED1=P2^0; //定義LED端口
- sbit LSA=P2^2;
- sbit LSB=P2^3;
- sbit LSC=P2^4;
- uchar num,num1,num2,shi,ge;
- uint z,i,j;
- uchar code smgdisplay[]={0x3f,0x06,0x5b,0x4f,
- 0x66,0x6d,0x7d,0x07,
- 0x7f,0x6f,0x77,0x7c,
- 0x39,0x5e,0x79,0x71}; //顯示0~F的值
- void delayms(uint z); //延時(shí)函數(shù),
- void display(); //數(shù)碼管動(dòng)態(tài)掃描函數(shù),循環(huán)掃描2個(gè)數(shù)碼管顯示
- void main()
- {
- TMOD=0x10;
- TH0=(65535-50000)/256; //給定時(shí)器0賦初值,定時(shí)50ms
- TL0=(65535-50000)%256;
- TH1=(65535-50000)/256; //給定時(shí)器1賦初值,定時(shí)50ms
- TL1=(65535-50000)%256;
- EA=1; //打開總中斷
- TR0=1; //打開定時(shí)器 0
- TR1=1; //打開定時(shí)器 1
- ET0=1; //打開定時(shí)器0中斷允許
- ET1=1; //打開定時(shí)器1中斷允許
- while(1)
- {
- display(); //數(shù)碼管顯示函數(shù)
- }
- }
- void t0_time() interrupt 1
- {
- TH0=(65535-50000)/256; //給定時(shí)器賦初值,定時(shí)50ms
- TL0=(65535-50000)%256;
- num++;
- if(num>=4) // 200ms
- {
- num=0;
- LED1=~LED1; //指示燈反相,可以看到閃爍
- }
- }
- void t1_time() interrupt 3 //中斷服務(wù)程序,是給void display()子函數(shù)的變量賦值?初始化寄存器。在主函數(shù)中等待中斷,執(zhí)行display()子函數(shù)。
- {
- TH1=(65535-50000)/256; //給定時(shí)器賦初值,定時(shí)50ms
- TL1=(65535-50000)%256;
- num1++;
- if(num1>=20) // 1000ms 1秒
- {
- num1=0;
- num2++;
- if(num2>=60)
- {
- num2=0;
- }
- shi=num2/10; //顯示 00 - 59秒
- ge=num2%10;
- }
- }
- void display() //數(shù)碼管動(dòng)態(tài)掃描函數(shù),循環(huán)掃描2個(gè)數(shù)碼管顯示
- {
-
- LSA=0; //位選,選擇點(diǎn)亮的數(shù)碼管,
- LSB=0;
- LSC=0; //顯示第0位
- P0=smgdisplay[ge]; //發(fā)送段碼
- delayms(2); //間隔一段時(shí)間掃描
- P0=0x00; //消隱
-
- LSA=1; //位選,選擇點(diǎn)亮的數(shù)碼管,
- LSB=0;
- LSC=0; //顯示第1位
- P0=smgdisplay[shi]; //發(fā)送段碼
- delayms(2); //間隔一段時(shí)間掃描
- P0=0x00; //消隱
- }
- void delayms(uint z) //延時(shí)函數(shù),
- {
- for(i=z;i>0;i--)
- for(j=110;j>0;j--);
- }
復(fù)制代碼 |
|