资源描述:
《用数码管(8位)显示的数字时钟程序.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、用数码管(8位)显示的数字时钟程序用数码管(8位)显示的数字时钟,由于是在开发板上写的程序,所以51单片机的一些I/O口设定并不完全一样,以下程序仅供参考#includesbitdula=P2^6; //段选锁存器sbitwela=P2^7; //位选锁存器sbitkey1=P3^2; //INT0 选择键sbitkey2=P3^4; //T0 时间增加sbitkey3=P3^6; //S4 时间减少chara=0,hour=0,minute=0,seconed=0;ch
2、arh1,h2,m1,m2,s1,s2;charnum=0;charcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};voiddelay(charz){ charx,y;for(x=z;x>0;x--) for(y=110;y>0;y--);}voiddisplay_hour(charh) //显示小时{ h1=h/10;h2=h%10;wela=1;P0=0xfe; //11111110wela=0;P0=0xff;dula
3、=1;P0=table[h1];dula=0;delay(5);wela=1;P0=0xfd; //11111101wela=0;P0=0xff;dula=1;P0=table[h2];dula=0;delay(5);}voiddisplay_minute(charm) //显示分钟{ m1=m/10;m2=m%10;wela=1;P0=0xf7; //11110111wela=0;P0=0xff;dula=1;P0=table[m1];dula=0;delay(5);wela=1;P0=0xef; /
4、/11101111wela=0;P0=0xff;dula=1;P0=table[m2];dula=0;delay(5);}voiddisplay_seconed(chars) //显示秒{ s1=s/10;s2=s%10;wela=1;P0=0xbf; //10111111wela=0;P0=0xff;dula=1;P0=table[s1];dula=0;delay(5);wela=1;P0=0x7f; //01111111wela=0;P0=0xff;dula=1;P0=table[s2];dula=0
5、;delay(5);}voidinit() //初始化函数{ TMOD=0x01; //定时器0工作方式1TH0=(65536-45872)/256; //装初值晶振11.0592 50ms为45872TL0=(65536-45872)%256;EA=1; //开总中断ET0=1; //开定时器0中断TR0=1; //开启定时器0}voidkey() //按键函数,功能为对时间进行调整{ if(key1==0) //key1键按下进入选择并停止定时器{ dela
6、y(10); while(!key1); //松手检测 TR0=0; num++; //没按一次key1 num自加1}if(num==1) //key1按一次进行“小时”调整{ if(key2==0) //key2按下时间增加 { delay(10); while(!key2); hour++; if(hour==24) hour=0; } if(key3==0) //key3按下时间减少 { delay(10); while(!key3); hour
7、--; if(hour<0) hour=23; }}if(num==2) //按下key1两次进行“分钟调整”{ if(key2==0) { delay(10); while(!key2); minute++; if(minute==60) minute=0; } if(key3==0) { delay(10); while(!key3); minute--; if(minute<0) minute=59; }}if(num==3) //key1按下三次对“秒”进
8、行调节{ if(key2==0) { delay(10); while(!key2); seconed++; if(seconed==60) seconed=0; } if(key3==0) { delay(10); while(!key3); seconed--; if(seconed<0) seconed=59; }}if(num==4