数字钟
数字钟
功能要求:
1、 使用8为动态数码管作为显示,4个独立按键用于输入;
2、 初始化:开机显示00-00-00,1、2位表示小时,4、5位表示分钟、7、8位表示秒
3、 初始化后立刻开始走时。采用24小时制显示时间。
4、 1、2号按键负责小时的加减,3、4号按键负责分钟的加减。
代码:
#include<reg51.h> //连接74ls138模块 sbit A1=P1^0; sbit B1=P1^1; sbit C1=P1^2; //按键*************************** sbit k1=P2^0; sbit k2=P2^1; sbit k3=P2^2; sbit k4=P2^3; //*************************** #define C 50000 //t0工作方式1的计数值,也就是50ms,计算20次就是1s #define TH_M1 (65536-C)/256 #define TL_M1 (65536-C)/256 unsigned char code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; void delay(int i); //延时函数i * 1ms void show(int s,int m,int h); int c_t0=0; //t0中断计算次数 int i=0,s=0,m=0,h=0; main() { k1=1,k2=1,k3=1,k4=1; IE=0X82; TMOD=0X01; TH0=TH_M1;TL0=TL_M1; TR0=1; while(1) { {//调节 时 if(k1==0)//k1 + { delay(200);h++; if(h>=24) h=0; } if(k2==0)//k2 - { delay(200);h--; if(h<0) h=23; } } {//调节 分 if(k3==0)//k3 + { delay(200);m++; if(m>=60) { m=0,h++; if(h==24) { h=0; } } } if(k4==0)//k4 - { delay(200);m--; if(m<=0) { m=59; if(h==0) { h=24; } h--; } } } show(s,m,h); } } void t0(void)interrupt 1 //t0定时器中断 { TH0=TH_M1;TL0=TL_M1; if(++c_t0==20) //计算20次就是1s { c_t0=0;s++; if(s==60) { m++;s=0; if(m==60) { h++;m=0; } if(h==24) { h=0; } } } } void show(int s,int m,int h) { A1=0;B1=0;C1=0;P0=tab[h/10];delay(1);P0=0x00; A1=1;B1=0;C1=0;P0=tab[h%10];delay(1);P0=0x00; A1=0;B1=1;C1=0;P0=0x40;delay(1);P0=0x00; A1=1;B1=1;C1=0;P0=tab[m/10];delay(1);P0=0x00; A1=0;B1=0;C1=1;P0=tab[m%10];delay(1);P0=0x00; A1=1;B1=0;C1=1;P0=0x40;delay(1);P0=0x00; A1=0;B1=1;C1=1;P0=tab[s/10];delay(1);P0=0x00; A1=1;B1=1;C1=1;P0=tab[s%10];delay(1);P0=0x00; } void delay(int i) //i * 1ms { int x,y; for(x=0;x<i;x++) for(y=0;y<120;y++); //1ms }
protues仿真:

要努力哟

浙公网安备 33010602011771号