发布时间 : 星期一 文章电子时钟程序设计更新完毕开始阅读4a392bf9c8d376eeaeaa3115
开始 计数单元清零 装入计数值192 继续计数 一秒到 ss++ 调节小时中断 调节分钟中断 一分到 mm++;ss=0 hh++ 一小时到 mm++;ss=0 hh++;mm=0 数码显示 2.4设计程序
#include
void delay(unsigned char k); sbit check=P0^0; sbit inter0=P3^2; sbit inter1=P3^3; char data which=0; char data count=0;
void smadd(unsigned char k); void smsub(unsigned char n);
char code buf[]={ 0x00,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0xff,0x6f }; char code sel[]= {0x01,0x02,0x04,0x08}; void main() {
char i;
for(i=0;i<500;i++); time[0]=0; time[1]=1; time[2]=8; time[3]=0; time[4]=2; time[5]=1; TMOD=0X01;
TH0=(65535-5000)/256; TL0=(65535-5000)%6; IP=0x07; IE=0X87; TR0=1; while(1) {
for(i=0;i<6;i++) { P1=sel[i];
P2=buf[time[i]] ; delay(10); }
if(check==0) {
delay(8); TR0=0;
which=(which+1)%3; while(check==0); TR0=1; } } }
void delay(unsigned char k) {char i;
for (;k>0;k--)
for(i=0;i<80;i++) {;} }
void time_tr0() interrupt 1 using 2 { TH0=(65535-5000)/256; TL0=(65535-5000)%6; count++;
if(count==100) {
smadd(0); } }
void int0_i() interrupt 0 using 3 {
TR0=0;
smadd(which*2); TR0=1;
while(inter0==0); }
void int1_i() interrupt 2 using 1 {
TR0=0;
delay(20);
smsub(which*2);; TR0=1;
while(inter1==0); }
void smsub(unsigned char n) {
delay(80); if(time[n]>0) {
time[n]=time[n]-1;
}
else if(time[n]==0&&(n==3||n==1)) {
time[n]=5; smsub(n+1); }
else if(time[n]==0&&(n==4||n==2||n==0)) {
time[n]=23; smsub(n+1); }
else if(time[n]==0&&(n==5)) {
time[n]=0; } }
void smadd(unsigned char n) {
char flag=0; delay(80);
if((n==0)||(n==2)||(n==4)) {
if(n==4&&time[5]==2&&time[4]==3) {
time[4]=0; time[5]=0; flag=1; }
if(time[n]==9) { time[n]=0; smadd(n+1); }
else if(time[n]<9&&flag==0) { time[n]=time[n]+1; } }
else if((n==1)||(n==3)) {
if(time[n]==5) { time[n]=0; smadd(n+1);