基于51单片机的时钟程序和仿真图
单片机源程序如下:
- #include"reg51.h"
- #define uint unsigned int
- sbit key=P1^0;
- unsigned int addNum;
- unsigned char Nums,Numm,Numh;
- #define SEGNUM P0
- #define WEI P2
- unsigned char code table[]={0x3f ,0x06 ,0x5b ,0x4f ,0x66 ,0x6d ,
- 0x7d ,0x07 ,0x7f ,0x6f ,0x77 ,0x7c ,
- 0x39 ,0x5e ,0x79 ,0x71 ,0x00};
- void delay(unsigned int num)
- {
- unsigned i,j;
- for(i=num;i>0;i--)
- for(j=120;j>0;j--);
- }
- void main()
- {
- TMOD=0X02;
- TL0=TH0=6;
- ET0=1; //中断允许位
- EA=1;
- TR0=1; //TR0置1,开启计时
- IT0=1; //中断0的中断方式
- EX0=1; //开通允许位
- IT1=1; //中断方式
- EX1=1;
- TR0=1; //启动
- while(1)
- {
-
- if(!key)
- {
- delay(10) ;
- if(!key)
- {
- Numh++;
- while(!key) ;
- }
- }
- WEI=0Xef;
- SEGNUM=table[Nums/10]; //对10取整
- delay(5);
- WEI=0Xdf;
- SEGNUM=table[Nums%10];
- delay(5);
- WEI=0xfb;
- SEGNUM=table[Numm/10];
- delay(5);
- WEI=0xf7;
- SEGNUM=table[Numm%10];
- delay(5);
- if(Numm==60)
- {
- Numm=0;
- }
- WEI=0xfe;
- SEGNUM=table[Numh/10];
- delay(5);
- WEI=0xfd;
- SEGNUM=table[Numh%10];
- delay(5);
-
- }
- }
- void timer0() interrupt 1
- {
- addNum++;
- if(addNum==4000)
- {
- Nums++;
- addNum=0;
- }
- if(Nums==60)
- {
- Numm++;
- Nums=0;
- }
-
- if(Numm==60)
- {
- Numh++;
- Numm=0;
- }
-
- if(Numh==24)
- {
- Numh=0;
- }
- }
- void ex0() interrupt 0 //外部中断0
- {
- Nums++; //表示外部中断来时的动作 (外部中断1)
- }
- void ex1() interrupt 2
- {
- Numm++;
- }
复制代码
所有资料51hei提供下载:
sz.zip
(59.79 KB, 下载次数: 59)
|