资源描述
#i nclude reg52.h单片机头文件#define uchar unsigned char/定义 uchar 代替 unsigned char#defi ne uint un sig ned intsbit duan=P2W;/ 位定义sbit wei=P2A7;sbit k1=P3A4;sbit k2=P3A5;sbit k3=P3A6;sbit k4=P3A7;void display(uchar a0,uchar a1,uchar a2,uchar a3,uchar a4,uchar a5);/ 函数声明void delay(uchar mss);ucharcodetab=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f,0 x77,0 x7c,0 x39,0 x5e,0 x79,0 x71,0 x00; /共阴数码管显示数字uchar ms=0,mg=0,fs=0,fg=0,ss=0,sg=0,m=0,f=0,s=0;/ 定义变量/主函数main ()P0=0 x00;duan=1;dua n=0;P0=0 xc0;wei=1;wei=0;TH0=(65536-50000)/256;TL0=(65536-50000)%256;TMOD=0 x01;/设置定时器工作方式-定时器 0 在工作模式 1 下工作,即一个 16 位的计时器TR0=1;开定时器 0ET0=1;/开中断 1 即定时器中断 0EA=1;/开总中断while(1)/按键 k1 为低电频/延时去抖/判断 k1 是否按下/等待按键释放分钟自加秒置 0/分钟为 60,自动置 0,小时自加 1f=0; if(k1=0)delay(40);S+;if(s=24) s=0;if(k2=0) delay(40);if(k2=0)while(k2!=1);f-;m=0;if(f=-1)f=59;s-;if(s=-1) s=0;if(k3=0) delay(40);if(k3=0)while(k3!=1); s+;m=0; if(s=24) s=0;if(k4=0) delay(40);if(k4=0) while(k4!=1);s-;m=0;if(s=-1)s=23;mg=m%10;ms=m/10;fg=f%10;fs=f/10;sg=s%10;ss=s/10;/秒个位是秒数除以 10 的余数秒十位是秒数除以十的商display(mg,ms,fg,fs,sg,ss);调用显示函数,实参为秒的十位个位void timerO() in terrupt 1int num;TH0=(65536-50000)/256;TL0=(65536-50000)%256;nu m+;清 0if(nu m=20)m+;num=0;if(m=60)m=0;f+;if(f=60)f=0;s+;if(s=24)s=0;/中断函数num 是个标志/计时器赋初值当 num=20 即 1s 进入秒自加,num秒自加到 60 自动清 0,分自加void display(uchar aO,uchar a1,uchar a2,uchar a3,uchar a4,uchar a5)/ 显示函数P0=taba0;P0 口赋值 tabaO即对应实参 tabmg秒个位显示duan=1;/开段选即读到 tabmg到数码管上dua n=0;/关段选P0=0 xdf; P0 赋 Oxdf 即 1101 1111wei=1;开位选,即第六个数码管被选通wei=0;关位选/ delay(10);delay(5);延时PO=taba1;duan=1;dua n=0;P0=0 xef;wei=1;wei=0;delay(5);P0=0 xf7;wei=1;wei=0;P0=taba2;duan=1;dua n=0;delay(5);P0=0 xfb;wei=1;wei=0;P0=taba3;duan=1;dua n=0;delay(15);P0=0 xfd;wei=1;wei=0;PO=taba4;duan=1;dua n=0;delay(5);PO=Oxfe; wei=1; wei=0;P0=taba5; duan=1; dua n=0; delay(5); void delay(uchar mss)int i,j;for(i=mss;i0;i-)for(j=30;j0;j-);/延时函数
展开阅读全文