电子时钟程序设计 联系客服

发布时间 : 星期一 文章电子时钟程序设计更新完毕开始阅读4a392bf9c8d376eeaeaa3115

开始 计数单元清零 装入计数值192 继续计数 一秒到 ss++ 调节小时中断 调节分钟中断 一分到 mm++;ss=0 hh++ 一小时到 mm++;ss=0 hh++;mm=0 数码显示 2.4设计程序

#include #include #include char data time[6];

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);