單片機源程序如下:
- #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)
2018-11-5 12:29 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|