#include#define uint unsigned int#define uchar unsigned charuchar temp,aa,miao,fen,shi;sbit m=P3^0;sbit n=P3^1;uchar code table[]={ //数码管编码表0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};void display(uchar miao,uchar fen,uchar shi);void delay(uint z);void init();void main(){ init();//初始化子程序 miao=0; shi=0; fen=0; while(1) { display(miao,fen,shi); } }void delay(uint z){ uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--);}void display(uchar miao,uchar fen,uchar shi) // 显示子函数{ P0=0x00; P0=table[miao%10]; P2=0x7f; delay(1); P0=0x00; P0=table[miao/10]; P2=0xbf; delay(1); P0=0x00; P0=table[fen%10]; P2=0xdf; delay(1); P0=0x00; P0=table[fen/10]; P2=0xef; delay(1); P0=0x00; P0=table[shi%10]; P2=0xf7; delay(1); P0=0x00; P0=table[shi/10]; P2=0xfb; delay(1);}void init() // 初始化子函数{ temp=0; TMOD=0x01; TH0=(65536-45872)/256; TL0=(65536-45872)%256; //定时器初值,定时50ms(12M晶振),由于考虑MCU指令处理时间,此处赋初值位45872 EA=1; ET0=1; TR0=1; }void timer0() interrupt 1 //定时计数器中断{ TH0=(65536-45872)/256; TL0=(65536-45872)%256; 、 aa++; if(aa==20) //中断2次位1S,秒加1 { miao++; aa=0; if(miao==60) { fen++; // 满60S, 分加1,秒清0 miao=0; if(fen==60) { shi++; // 小时加1 fen=0; if(shi==24) shi=0; //小时满 } } } if(m==0) // 调分 { delay(2); if(m==0) fen++; if(fen==60) fen=0; delay(2); while(!m); } if(n==0) // 调小时 { delay(2); if(n==0) shi++; if(shi==24) shi=0; delay(2); while(!n); }}
|