单片机源程序如下:
- #include"reg51.h"
- sbit key=P3^4;
- #define WEI P2
- #define SEGNUM P0
- unsigint addNum;
- unsigned int h,m,s;
- 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; //256次-6次
- EA=1; //开中断允许位
- ET0=1; //开中断允许位
- TR0=1; //启动定时/计数器定时或计数
- IT0=1; //边沿触发 (外部中断0)
- EX0=1; //开中断允许位
- IT1=1; //边沿触发 (外部中断1)
- EX1=1; //开中断允许位
- TR0=1; //启动定时/计数器定时或计数
- while (1)
- {
- if(!key)
- {
- delay(10) ;
- if(!key)
- {
- h++; while(!key) ;
- }
- }
- WEI=0xfe; //显示位码
- SEGNUM=table[h/10]; // h
- delay(5); //十位
- WEI=0xfd; //个位
- SEGNUM=table[h%10];
- delay(5);
- WEI=0xfb;
- SEGNUM=table[m/10]; //
- delay(5);
- WEI=0xf7;
- SEGNUM=table[m%10];
- delay(5);
- WEI=0xef;
- SEGNUM=table[s/10]; //
- delay(5);
- WEI=0xdf;
- SEGNUM=table[s%10];
- delay(5);
- }
- }
- void timer0() interrupt 1 //
- {
- addNum++;
- if(addNum==4000) //1000000/250 1秒除250次
- {
- s++; //如果一秒到了,s秒表数加一,addNum归零
- addNum=0;
- }
- if(s==60) //如果秒为60,则清零,分加1
- {
- m++;
- s=0;
- }
- if(m==60)
- {
- h++;
- m=0;
- }
- if(h==24)
- {
- h=0;
- }
- }
- void ex0( ) interrupt 0
- {
- s++; //表示外部中断来时的动作 (外部中断0)
- }
- void ex1( ) interrupt 2
- {
- m++;
- }
复制代码
所有资料51hei提供下载:
时钟,显示时分秒,可按键设置.(用定时器和中断).rar
(16.31 KB, 下载次数: 61)
|