1、电子时钟基于 AT89c51 单片机的设计电子时钟原理图开机显示仿真图: 当按下仿真键时电子时钟开机页面显示第一行显示 JD12102Class-16,第二行显示动态 TINE:12:00:04。电子时钟调时间仿真图:当按下 K1 为 1 次时,光标直接跳到电子时钟的秒,可以按下K2 进行调节。当按下 K1 为 2 次时,光标直接跳到电子时钟的分,可以按下 K2 进行调节。当按下 K1 为 3 次时,光标直接跳到电子时钟的时,可以按下 K2 进行调节。当按下 K1 为 4 次时,光标直接跳完,电子时钟可以进行正常计时。电子时钟闹钟调节仿真:当按下 K3 为 1 次时,直接跳到闹钟显示界面 00
2、:00:00,按下 K2可以对闹钟的秒进行调节。当按下 K3 为 2 次时,可以调到分,按下 K2 可以对闹钟的分进行调节。当按下 K3 为 3 次时,可以调到时,按下 K2 可以对闹钟的时进行调节。当按下 K3 为 4 次时,直接跳到计时界面,对闹钟进行到计时,时间到可以发出滴滴声。#include#define uchar unsigned char /预定义一下#define uint unsigned intuchar table=“JD12102Class-21“; /显示内容sbit lcden=P34; /寄存器 EN 片选引脚sbit lcdrs=P35; /寄存器 RS 选择
3、引脚sbit beep=P36; /接蜂鸣器extern void key1();extern void key2();extern void key3();uchar num,hour=12,minite,second,ahour,aminite,asecond,a,F_k1,F_k2,F_k3; /定义变量void delay(uint z) /延时 uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);void write_com(uchar com)lcdrs=0;P0=com; /送出指令,写指令时序delay(5);lcden=1;delay(5);lcd
4、en=0;void write_data(uchar date)lcdrs=1;P0=date; /送出数据,写指令程序delay(5);lcden=1;delay(5);lcden=0;void write_add(uchar add,uchar date)uchar aa,bb;aa=date/10;bb=date%10;write_com(0x80+add);write_data(0x30+aa);write_data(0x30+bb);void init() /初始化lcden=0;write_com(0x38); /设置 16*2 显示,5*7 点阵write_com(0x0c);
5、/开显示,不显示光标write_com(0x06); /地址加 1,写入数据是光标右移 1 位write_com(0x01); /清屏write_com(0x80); /起点为第一行第一个字符开始void display(uchar h,uchar m,uchar s) /显示设计程序write_com(0x80+0x16);write_com(0xC0+0x00);write_data(T);write_data(I);write_data(M);write_data(E); write_data(:);write_data(0x30+(h/10);write_data(0x30+(h%10
6、);write_data(:);write_data(0x30+(m/10);write_data(0x30+(m%10);write_data(:);write_data(0x30+(s/10);write_data(0x30+(s%10);write_data( );write_data( );write_data( ); void main()init();TMOD=0X01; /设置 T0 定时方式 1TH0=(65535-50000)/256; /设置初值TL0=(65535-50000)%256;EA=1; /开总中断TR0=1; /启动 T0ET0=1;for(num=0;num
7、 /调时间程序#define uchar unsigned char#define uint unsigned intsbit k1=P10; /定义 3 个变量sbit k2=P11;sbit k3=P12;extern uchar F_k1,F_k3,second,minite,hour,ahour,aminite,asecond; /预定义变量extern void write_com(uchar com);extern void write_add(uchar add,uchar date);extern void display(uchar h,uchar m,uchar s);vo
8、id delay_key(int i)while(i-);void key1()if(k1=0) /按下 K1 零次时,直接计时与开机显示delay_key(100);if(k1=0)TR0=0;while(!k1);F_k1+;if(F_k1=4)F_k1=0; write_com(0x0c);TR0=1;if(F_k1=1|F_k3=1)write_com(0xC0+0x0c);write_com(0x0f);if(F_k1=2|F_k3=2)write_com(0xC0+0x09);if(F_k1=3|F_k3=3)write_com(0xC0+0x06);void key2()if(k
9、2=0)delay_key(100);while(!k2);if(F_k1=1) /按下 K1 一次时设置闹钟的秒second+;if(second=60)second=0;write_add(0x4b,second);if(F_k1=2) /按下 K3 两次时设置闹钟的分minite+;if(minite=60)minite=0;write_add(0x48,minite);if(F_k1=3) / 按下 K1 三次时设置闹钟的时hour+;if(hour=24)hour=0;write_add(0x45,hour);if(F_k3=1) /按下 K3 一次时设置闹钟的秒 asecond+;
10、 if(asecond=60)asecond=0; write_add(0x4b,asecond);if(F_k3=2) /按下 K3 两次时设置闹钟的分aminite+;if(aminite=60)aminite=0;write_add(0x48,aminite);if(F_k3=3) /按下3 三次时设置闹钟的时ahour+;if(ahour=24)ahour=0;write_add(0x45,ahour);void key3() if(k3=0)delay_key(100);if(k3=0)while(!k3);F_k3+;if(F_k3=4) /K3 等于四次时直接跳入闹钟显示F_k3=0;write_com(0x0c);if(F_k3=1)display(ahour,aminite,asecond);