用定时器做的可调电子钟
- 格式:doc
- 大小:48.50 KB
- 文档页数:28
1、LCD(LM044L)多功能可调时钟设计设计思路:利用单片机的定时器定时,产生时钟的时、分、秒,年、月、日,用LCD(LM044L)显示出时间的时、分、秒,年、月、日,并用英文显示“星期几”。
具有百分之一秒,秒,分,跑表功能。
一键开始并记录4组结果。
使用若干个按键调整时间,一个用于选择调整的时间位,一个用于调整时间。
也可以使用多个键,用于调整各自的时间位。
首先在proteus上绘制电路,编程模拟运行实现。
运行效果代码#include<reg51.h> //包含单片机寄存器的头文件#include<stdlib.h> //包含随机函数rand()的定义文件#include<intrins.h> //包含_nop_()函数定义的头文件sbit RS=P2^0; //寄存器选择位,将RS位定义为P2.0引脚sbit RW=P2^1; //读写选择位,将RW位定义为P2.1引脚sbit E=P2^2; //使能信号位,将E位定义为P2.2引脚sbit BF=P0^7; //忙碌标志位,,将BF位定义为P0.7引脚unsigned char code table[]="2011-12-01"; //初始化液晶显示10 unsigned char code table1[]=" 12:00:55"; //12 unsigned char code table2[]="week 3 00:00:00"; //15 unsigned char code table3[]="00:00:00 00:00:00 00:00:00 00:00:00"; unsigned char count,s1num,s5num;char second,minute,hour,day,month,year,week;char ms,sec,minu;sbit s1=P1^0; //功能键sbit s2=P1^1; //加键sbit s3=P1^2; //减键sbit s4=P1^3; //保存并退出sbit s5=P1^4; //秒表void delay1ms() //计算延迟1ms{unsigned char i,j;for(i=0;i<10;i++)for(j=0;j<33;j++);}/***************************************************** 函数功能:延时若干毫秒入口参数:n***************************************************/void delay(unsigned char n){unsigned char i;for(i=0;i<n;i++)delay1ms();}/*****************************************************函数功能:判断液晶模块的忙碌状态返回值:result。
555式简易电子钟电路的设计方案简介本文档介绍了一种基于555集成电路的简易电子钟的设计方案。
利用该电路设计,我们可以制作出一个具备小时、分钟和秒钟显示功能的电子钟。
设计要点- 使用555定时器集成电路,该集成电路具备稳定的工作特性和可靠的性能。
- 使用数码时钟显示模块,该模块可以将输入的数据转换为数字显示。
- 利用七段数码管来显示小时、分钟和秒钟。
- 引入实时时钟(RTC)模块,用于提供准确的时间信息。
硬件设计1. 使用555定时器作为主要的时钟源。
通过连接合适的电容和电阻,调整555电路的工作频率以匹配我们所需的计时精度。
2. 连接数码时钟显示模块到555电路的输出引脚,以便将计时结果转换为数字显示。
3. 连接七段数码管到数码时钟显示模块的输出引脚,以实现小时、分钟和秒钟的显示功能。
4. 添加实时时钟(RTC)模块,连接到555电路以提供准确的时间信息。
软件设计1. 确保555电路正确工作并通过合适的电容和电阻值产生所需的时钟频率。
2. 使用适当的编程语言编写软件代码,将时间信息从RTC模块传输到数码时钟显示模块。
3. 根据时钟精度要求,实时更新数码时钟显示模块的输出数据。
4. 在七段数码管上显示小时、分钟和秒钟。
调试和测试1. 确保555电路和RTC模块正常工作并提供准确的时间信息。
2. 对数码时钟显示模块进行测试,确保它能正确地将时间信息转换为数字显示。
3. 确保七段数码管能正确显示小时、分钟和秒钟。
4. 对整个电子钟进行综合测试,确保各个组件的协同工作。
结论通过本文档所提供的555式简易电子钟电路的设计方案,我们可以制作出一个具备小时、分钟和秒钟显示功能的电子钟。
该设计方案综合了硬件和软件的设计,实现了稳定的时钟工作和准确的时间信息显示。
通过适当的调试和测试,我们可以确保电子钟的可靠性和性能。
一、绪论1.1课题说明1.2方案设计目的1.3技术指标1.4方案设计及论证二、核心部件简介2.1 555时基电路2.2 74LS90异步加法计数器三、各部分电路组成部分及其设计原理3.1数字电子钟的构成框图3.2数字电子钟的模块及其工作原理3.2.1晶体振荡器电路3.2.2计数器电路3.3秒、分、时译码显示模块3.4校时电路四、说明各部分功能的实现4.1开始状态4.2时、分、秒分别校时4.3满60秒向分钟进位状态满60分向小时进位状态4.4 23:59:59向00:00:00进位状态五、整体电路图六、实验室调试6.1元件清单6.2调试过程6.3调试结果6.4调试心得体会一、绪论1.1 课题说明由于现代社会模拟电子技术基础和数字电子技术基础的高速发展,因而由这技术制造出来的越来越先进,数字钟体积小,安装使用方便,不仅可以作为家用电子钟,而且可以广泛用于车站、体育场馆等公共场所。
虽然数字钟的外形和功能不尽相同,但是用于制造数字钟的原理基本上都是一样的。
所谓数字钟,是指利用电子电路构成的计时器。
本次课程设计要求设计一个数字钟,基本要求为数字钟的时间周期为24小时,数字钟显示时、分、秒,数字钟的时间基准一秒对应现实生活中的时钟的一秒。
供扩展的方面涉及到整点报时、定时闹钟等。
1.2 方案设计目的用中小规模集成电路设计一台能显示时、分、秒的数字电子钟,要求如下:1.由晶体振荡电路产生1HZ的标准脉冲信号。
2.秒、分为00——59 六十进制计数器。
3.时为00——23 二十四进制计数器4.可手动校准。
只要将开关置于校准位置,即可对分别对分、时进行手动脉冲输入校准或连续脉冲校准调整。
5.用Multisim画出整个系统电路图,进行仿真与调试;6.实现整个数字电子钟电路各项任务的正常工作。
7. 撰写设计报告:写出设计过程,和调试结果,写上心得体会。
1.3 技术指标1. 显示时、分、秒的是24小时制。
3. 具有校时功能:可以对小时和分单独校时,对分校时的时候,停止分向小时进位。
用定时器做的可调电子钟#include <reg52.h>#include <51hei.h>#include <LCD1602.H>#define uchar unsigned charsbit neum=P3^2;sbit up=P3^6;sbit down=P3^7;uchar code table2[]="MON"; uchar code table3[]="TUE";uchar code table4[]="WED"; uchar code table5[]="THU"; uchar code table6[]="FRI";uchar code table7[]="SAT";uchar code table8[]="SUN";uchar count,neum_key,a,b;uchar miao,fen,shi,ri,yue,nian,zhou;void init_time(void){TMOD=0x01; //定时器0,工作方式1 TH0=(65536-50000)/256;TL0=(65536-50000)%256; //初值TR0=1;ET0=1;EA=1;}void write_sfm(uchar addr,uchar date) {uchar shi,ge;shi=date/10;ge=date%10;write_cmd(0x80+0x40+addr);write_dat(0x30+shi);write_dat(0x30+ge);}void write_nyr(uchar addr,uchar date1){uchar shi,ge;shi=date1/10;ge=date1%10;write_cmd(0x80+addr);write_dat(0x30+shi);write_dat(0x30+ge);}void keyscan(){if(neum==0){delay(5);if(neum==0){neum_key++;while(!neum);if(neum_key==1){TR0=0;write_cmd(0x80+0x40+11);write_cmd(0x0f);}}if(neum_key==2){write_cmd(0x80+0x40+8); write_cmd(0x0f);}if(neum_key==3){write_cmd(0x80+0x40+5); write_cmd(0x0f);}if(neum_key==4){write_cmd(0x80+13); write_cmd(0x0f);}if(neum_key==5){write_cmd(0x80+10); write_cmd(0x0f);}if(neum_key==6){write_cmd(0x80+7);write_cmd(0x0f);}if(neum_key==7){write_cmd(0x80+4);write_cmd(0x0f);}if(neum_key==8){neum_key=0;write_cmd(0x0c);TR0=1;}}///////////////////////////////////////////////////加减计算/////////////////////////////////////////秒if(neum_key==1){if(up==0){delay(5);if(up==0){while(!up);miao++;if(miao==60){miao=0;}write_sfm(10,miao);write_cmd(0x80+0x40+11); }}if(down==0){delay(5);if(down==0){while(!down);miao--;if(miao==(-1)){miao=59;}write_sfm(10,miao);write_cmd(0x80+0x40+11);}}}///////////////////////分//////////////////////////if(neum_key==2){if(up==0){delay(5);if(up==0){while(!up);fen++;if(fen==60){fen=0;}write_sfm(7,fen);write_cmd(0x80+0x40+8);}}if(down==0){delay(5);if(down==0){while(!down);fen--;if(fen==(-1)){fen=59;}write_sfm(7,fen);write_cmd(0x80+0x40+8);}}}///////////////////////////////////////////时if(neum_key==3){if(up==0){delay(5);if(up==0){while(!up);shi++;if(shi==24){shi=0;}write_sfm(4,shi);write_cmd(0x80+0x40+5);}}if(down==0){delay(5);if(down==0){while(!down);shi--;if(shi==(-1)){shi=23;}write_sfm(4,shi);write_cmd(0x80+0x40+5);}}}/////////////////////////////////////////// 星期if(neum_key==4){if(up==0){delay(5);if(up==0){a++;while(!up);if(a==1)write_cmd(0x80+13);for(b=0;b<3;b++){write_dat(table2[b]);}}}if(a==2){write_cmd(0x80+13);for(b=0;b<3;b++){write_dat(table3[b]); }}if(a==3){write_cmd(0x80+13);for(b=0;b<3;b++){write_dat(table4[b]);}if(a==4){write_cmd(0x80+13); for(b=0;b<3;b++){write_dat(table5[b]); }}if(a==5){write_cmd(0x80+13); for(b=0;b<3;b++){write_dat(table6[b]); }}if(a==6){write_cmd(0x80+13); for(b=0;b<3;b++)write_dat(table7[b]);}}if(a==7){a=0;write_cmd(0x80+13);for(b=0;b<3;b++){write_dat(table8[b]);}}}if(down==0) //减星期{delay(5);if(down==0){a++;while(!down);if(a==1)write_cmd(0x80+13);for(b=0;b<3;b++){write_dat(table8[b]);}}}if(a==2){write_cmd(0x80+13);for(b=0;b<3;b++){write_dat(table7[b]); }}if(a==3){write_cmd(0x80+13);for(b=0;b<3;b++){write_dat(table6[b]);}if(a==4){write_cmd(0x80+13); for(b=0;b<3;b++){write_dat(table5[b]); }}if(a==5){write_cmd(0x80+13); for(b=0;b<3;b++){write_dat(table4[b]); }}if(a==6){write_cmd(0x80+13); for(b=0;b<3;b++)write_dat(table3[b]);}}if(a==7){a=0;write_cmd(0x80+13);for(b=0;b<3;b++){write_dat(table2[b]);}}}}/////////////////////////////////////////// 日if(neum_key==5){if(up==0){delay(5);if(up==0){while(!up);ri++;if(ri==32){ri=0;}write_nyr(9,ri);write_cmd(0x80+10); }}if(down==0){delay(5);if(down==0){while(!down);ri--;if(ri==0){ri=31;}write_nyr(9,ri);write_cmd(0x80+10);}}}/////////////////////////////////////////// yue if(neum_key==6){if(up==0){delay(5);if(up==0){while(!up);yue++;if(yue==13){yue=1;}write_nyr(6,yue);write_cmd(0x80+7);}}if(down==0){delay(5);if(down==0){while(!down);yue--;if(yue==0){yue=12;}write_nyr(6,yue);write_cmd(0x80+7);}}}/////////////////////////////////////////// nian if(neum_key==7){if(up==0){delay(5);if(up==0){while(!up);nian++;if(nian==41){nian=13;}write_nyr(3,nian);write_cmd(0x80+4); }}if(down==0){delay(5);if(down==0){while(!down);nian--;if(nian==12){nian=41;}write_nyr(3,nian);write_cmd(0x80+4);}}}}void main(void){init_time();init_lcd();while(1){keyscan();if(count==20){count=0;miao++;if(miao==60){miao=0;fen++;if(fen==60){fen=0;shi++;if(shi==24) //周{shi=0;ri++;if(ri==32){ri=0;yue++;if(yue==13){yue=0;nian++;if(nian==99){nian=0;}write_nyr(4,nian);}write_nyr(7,yue);}write_nyr(10,ri);}write_sfm(4,shi);}write_sfm(7,fen);}write_sfm(10,miao);}}}void timer0() interrupt 1{TH0=(65536-50000)/256;TL0=(65536-50000)%256;count++;}/////////////////////////////////////////以下是lcd1602头文件////////////////////////////////#ifndef __LCD1602_H__#define __LCD1602_H__sbit rs=P3^5;sbit rw=P2^7;sbit en=P3^4;#define lcd_data P0unsigned char num;unsigned char code table[]=" 2013-12-30 SUN";unsigned char code table1[]=" 22:58:57 ";void delay(unsigned char z) //延时函数{unsigned char x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void write_cmd(unsigned char cmd) {rs=0;rw=0;delay(2);lcd_data=cmd;delay(2);en=1;delay(2);en=0;}void write_dat(unsigned char dat) {rs=1;rw=0;delay(2);lcd_data=dat;delay(2);en=1;delay(2);en=0;void init_lcd(void){guanled();guandz();write_cmd(0x38);write_cmd(0x0c);write_cmd(0x06);write_cmd(0x01);write_cmd(0x80);for(num=0;num<16;num++) {write_dat(table[num]);}write_cmd(0x80+0x40);for(num=0;num<16;num++) {write_dat(table1[num]); }}#endif。
《综合设计实训I》可调式数字时钟姓名:学号:班级:实训地点:指导教师:通信与电子学院编制年月日一、设计要求数字时钟是采用数字电路实现对年,月,日,时,分,秒数字显示的计时装置,广泛用于个人,家庭,车站,码头,办公室等公共场所,成为人们日常生活中的必需品。
1,、设计时可以利用单片机内部定时器,也可以利用外部实时时钟芯片。
(I/O,I2C总线)2、有年,月,日,时,分,秒功能,而且要能够校正前面五项。
3、显示时可以用8位数码管,也可以用LCD液晶屏。
(年只需显示后2位)4、可选功能:闹钟功能。
二、设计方案1、芯片分析AT89C51引脚图管脚说明:VCC:供电电压。
GND:接地。
P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P0口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
一种具有整点报时带闹钟时间可调的数字钟摘要:本文介绍了一种带有整点报时和闹钟时间可调功能的数字钟。
该数字钟采用数字显示屏,同时配备了时钟和闹钟功能,可以实现整点报时并调整闹钟时间。
该数字钟的设计使用了C51单片机控制,具有高可靠性和稳定性。
关键词:数字钟,整点报时,闹钟,C51单片机,可靠性,稳定性正文:随着现代科技的快速发展,数字产品越来越普及。
数字钟作为一种时间测量和管理工具,在我们的日常生活中也得到了广泛的应用。
本文介绍了一种带有整点报时和闹钟时间可调功能的数字钟。
该数字钟采用颜色数字显示屏,具有清晰、鲜艳的显示效果。
同时,该数字钟配备了时钟和闹钟功能,便于用户在日常生活中管理时间。
其中,时钟功能可以显示当前时间,而闹钟功能可以在设定的时间提醒用户进行某项活动。
此外,该数字钟还具有整点报时功能,用户可以选择是否开启该功能,从而实现每小时整点报时的功能。
该数字钟的设计采用了C51单片机控制,具有高可靠性和稳定性。
另外,该数字钟还具有闹钟时间可调功能,用户可以根据需要进行时间设置和调整,方便快捷。
通过该数字钟的使用,可以帮助用户更加有效地进行时间管理,提高生活效率和品质。
总之,该数字钟具有数字显示屏、时钟和闹钟功能、整点报时和闹钟时间可调等多种优秀特性,可以满足用户在日常生活中对于时间管理的需求,具有广泛的应用前景。
在现代社会中,时间显得尤为重要,数字钟作为一种时间管理工具,已经成为人们日常生活中必不可少的东西。
随着科技的不断发展,数字钟也得到了不断的升级和改进,使其更加实用和便捷,也更符合人们的需求和使用习惯。
本文介绍的数字钟采用了颜色数字显示屏和C51单片机控制,这有效地提高了数字钟的可靠性和稳定性。
同时,该数字钟还引入了整点报时和闹钟时间可调的功能,为用户提供了更加精细化、个性化的时间管理服务。
这种数字钟的应用范围非常广泛,可以在家庭、学校、办公室等各种场合中使用。
该数字钟的整点报时功能可以自动在每一个小时的整点时刻发出提示音,既方便了用户,也使整点时间更加规范化。
用EDA软件实现整点报时数字式可调电子时钟的设计一、设计目的了解常见中规模数字集成电路的使用方法,包括计数器、显示译码器、多谐振荡器的工作原理及使用方法。
通过组装具有整点报时数字可调电子时钟,了解这类电路的使用技巧及调整方法。
通过对电路板的实际布线焊接检测调试,提高电子技术硬件的基本能力。
二、系统组成1、先用Multisim实现如下系统:本组合电路包括时基多谐振荡器、计数器、十进制译码显示器、发光数码管等部分组成。
各部分组成框图如下:系统组成图2、仿真通过三、单元电路组成原理与参数选择1、多谐振荡器:这里采用最常见的时基电路555组成的周期为1秒的振荡器。
555集成电路的原理及应用可以参见教材,此不重复。
通常选择适当的定时电阻和电容元件使振荡刚好为1秒钟。
多谐振荡器的电路图和NE555的芯片引脚图如下:2、十进制计数器:本系统采用的是十进制计数器7490。
本系统秒钟是用两个7490构成60进制组成。
分钟也是用两个7490构成60进制组成时钟采用两个7490构成24进制计数器组成。
将三个计数器级连起来就构成了电子时钟。
7490的芯片图和真值表如下:(5脚接电源VCC,10脚接地其中1脚和12脚相连)。
X 0 0 X COUNT下面介绍秒钟和分钟连接方法如下图(如果是秒钟14脚则接多谐振荡器555电路的第3脚,如果是分钟14脚则接秒钟的7408(与门)芯片的第3脚。
下面介绍时钟的接法(14脚接分钟的7408的第3脚):3、7448实现多位数字码显示译(如果是选用共阳极七段数码管则选择7447)7448为七段译码显示器,其功能可详细参见数字电路书。
它实现的功能是把7490输出的(QA、QB、QC、QD)实现译码驱动七段共阴极数码显示它的接法如下:7448的8引脚接第,16脚接电源。
7490的3脚接7480的输出引脚输出高电平时控制计数器时及时清零。
4、LED数码显示管数码显示管是7段显示器,其内部有八个LED发光二极管,7个组成7段显示,一个为小数点指示。
摘要电子式秒表从原理上讲是一种典型的数字电路,其中包括了组合逻辑电路和时序电路。
本设计中数字秒表的最大计时是59秒,最后计数结果用数码管显示,需要实现启动计时、暂停计时、继续计时等功能。
采用两片74LS161芯片级联构成60进制计数器来实现秒表的计数功能。
利用555定时器构成的多谐振荡器为电路提供脉冲源以驱动电路工作。
关键字:数字秒表;振荡器;74LS161;数码管ABSTRACTElectronic stopwatch principle is a typical digital circuits, including combinational logic circuits and sequential circuits. This design, digital stopwatch timing is 59 seconds, the final count results with digital display, and need to start the timer, pause time, continue to timing and other functions. Two 74LS161 chips cascaded 60 binary counter stopwatch count. Multivibrator circuit constituted by the 555 timer pulse source to drive the circuit.Keywords:Digital stopwatch; oscillator; 74LS161; digital tube目录摘要 (I)目录 ............................................................................................................................. I I 1 设计要求及方案选择.. (1)1.1 设计要求 (1)1.2 方案选择 (1)2 理论设计与分析 (2)2.1 电子时钟电路的分析及设计 (2)2.2 电路主要芯片功能 (4)3 电路设计 (5)3.1 整体电路图 (6)3.2 PCB图 (7)4 系统测试 (8)4.1 调试所用的基本仪器 (8)4.2 测试结果 (8)4.3 测试结果分析 (8)5 设计中的收获与体会 (10)参考文献 (11)1 设计要求及方案选择1.1 设计要求(1)设计秒计时(六十进制计数)电路。
用定时器做的可调电子钟#include <reg52.h>#include <51hei.h>#include <LCD1602.H>#define uchar unsigned charsbit neum=P3^2;sbit up=P3^6;sbit down=P3^7;uchar code table2[]="MON"; uchar code table3[]="TUE";uchar code table4[]="WED"; uchar code table5[]="THU"; uchar code table6[]="FRI";uchar code table7[]="SAT";uchar code table8[]="SUN";uchar count,neum_key,a,b;uchar miao,fen,shi,ri,yue,nian,zhou;void init_time(void){TMOD=0x01; //定时器0,工作方式1 TH0=(65536-50000)/256;TL0=(65536-50000)%256; //初值TR0=1;ET0=1;EA=1;}void write_sfm(uchar addr,uchar date) {uchar shi,ge;shi=date/10;ge=date%10;write_cmd(0x80+0x40+addr);write_dat(0x30+shi);write_dat(0x30+ge);}void write_nyr(uchar addr,uchar date1){uchar shi,ge;shi=date1/10;ge=date1%10;write_cmd(0x80+addr);write_dat(0x30+shi);write_dat(0x30+ge);}void keyscan(){if(neum==0){delay(5);if(neum==0){neum_key++;while(!neum);if(neum_key==1){TR0=0;write_cmd(0x80+0x40+11);write_cmd(0x0f);}}if(neum_key==2){write_cmd(0x80+0x40+8); write_cmd(0x0f);}if(neum_key==3){write_cmd(0x80+0x40+5); write_cmd(0x0f);}if(neum_key==4){write_cmd(0x80+13); write_cmd(0x0f);}if(neum_key==5){write_cmd(0x80+10); write_cmd(0x0f);}if(neum_key==6){write_cmd(0x80+7);write_cmd(0x0f);}if(neum_key==7){write_cmd(0x80+4);write_cmd(0x0f);}if(neum_key==8){neum_key=0;write_cmd(0x0c);TR0=1;}}///////////////////////////////////////////////////加减计算/////////////////////////////////////////秒if(neum_key==1){if(up==0){delay(5);if(up==0){while(!up);miao++;if(miao==60){miao=0;}write_sfm(10,miao);write_cmd(0x80+0x40+11); }}if(down==0){delay(5);if(down==0){while(!down);miao--;if(miao==(-1)){miao=59;}write_sfm(10,miao);write_cmd(0x80+0x40+11);}}}///////////////////////分//////////////////////////if(neum_key==2){if(up==0){delay(5);if(up==0){while(!up);fen++;if(fen==60){fen=0;}write_sfm(7,fen);write_cmd(0x80+0x40+8);}}if(down==0){delay(5);if(down==0){while(!down);fen--;if(fen==(-1)){fen=59;}write_sfm(7,fen);write_cmd(0x80+0x40+8);}}}///////////////////////////////////////////时if(neum_key==3){if(up==0){delay(5);if(up==0){while(!up);shi++;if(shi==24){shi=0;}write_sfm(4,shi);write_cmd(0x80+0x40+5);}}if(down==0){delay(5);if(down==0){while(!down);shi--;if(shi==(-1)){shi=23;}write_sfm(4,shi);write_cmd(0x80+0x40+5);}}}/////////////////////////////////////////// 星期if(neum_key==4){if(up==0){delay(5);if(up==0){a++;while(!up);if(a==1)write_cmd(0x80+13);for(b=0;b<3;b++){write_dat(table2[b]);}}}if(a==2){write_cmd(0x80+13);for(b=0;b<3;b++){write_dat(table3[b]); }}if(a==3){write_cmd(0x80+13);for(b=0;b<3;b++){write_dat(table4[b]);}if(a==4){write_cmd(0x80+13); for(b=0;b<3;b++){write_dat(table5[b]); }}if(a==5){write_cmd(0x80+13); for(b=0;b<3;b++){write_dat(table6[b]); }}if(a==6){write_cmd(0x80+13); for(b=0;b<3;b++)write_dat(table7[b]);}}if(a==7){a=0;write_cmd(0x80+13);for(b=0;b<3;b++){write_dat(table8[b]);}}}if(down==0) //减星期{delay(5);if(down==0){a++;while(!down);if(a==1)write_cmd(0x80+13);for(b=0;b<3;b++){write_dat(table8[b]);}}}if(a==2){write_cmd(0x80+13);for(b=0;b<3;b++){write_dat(table7[b]); }}if(a==3){write_cmd(0x80+13);for(b=0;b<3;b++){write_dat(table6[b]);}if(a==4){write_cmd(0x80+13); for(b=0;b<3;b++){write_dat(table5[b]); }}if(a==5){write_cmd(0x80+13); for(b=0;b<3;b++){write_dat(table4[b]); }}if(a==6){write_cmd(0x80+13); for(b=0;b<3;b++)write_dat(table3[b]);}}if(a==7){a=0;write_cmd(0x80+13);for(b=0;b<3;b++){write_dat(table2[b]);}}}}/////////////////////////////////////////// 日if(neum_key==5){if(up==0){delay(5);if(up==0){while(!up);ri++;if(ri==32){ri=0;}write_nyr(9,ri);write_cmd(0x80+10); }}if(down==0){delay(5);if(down==0){while(!down);ri--;if(ri==0){ri=31;}write_nyr(9,ri);write_cmd(0x80+10);}}}/////////////////////////////////////////// yue if(neum_key==6){if(up==0){delay(5);if(up==0){while(!up);yue++;if(yue==13){yue=1;}write_nyr(6,yue);write_cmd(0x80+7);}}if(down==0){delay(5);if(down==0){while(!down);yue--;if(yue==0){yue=12;}write_nyr(6,yue);write_cmd(0x80+7);}}}/////////////////////////////////////////// nian if(neum_key==7){if(up==0){delay(5);if(up==0){while(!up);nian++;if(nian==41){nian=13;}write_nyr(3,nian);write_cmd(0x80+4); }}if(down==0){delay(5);if(down==0){while(!down);nian--;if(nian==12){nian=41;}write_nyr(3,nian);write_cmd(0x80+4);}}}}void main(void){init_time();init_lcd();while(1){keyscan();if(count==20){count=0;miao++;if(miao==60){miao=0;fen++;if(fen==60){fen=0;shi++;if(shi==24) //周{shi=0;ri++;if(ri==32){ri=0;yue++;if(yue==13){yue=0;nian++;if(nian==99){nian=0;}write_nyr(4,nian);}write_nyr(7,yue);}write_nyr(10,ri);}write_sfm(4,shi);}write_sfm(7,fen);}write_sfm(10,miao);}}}void timer0() interrupt 1{TH0=(65536-50000)/256;TL0=(65536-50000)%256;count++;}/////////////////////////////////////////以下是lcd1602头文件////////////////////////////////#ifndef __LCD1602_H__#define __LCD1602_H__sbit rs=P3^5;sbit rw=P2^7;sbit en=P3^4;#define lcd_data P0unsigned char num;unsigned char code table[]=" 2013-12-30 SUN";unsigned char code table1[]=" 22:58:57 ";void delay(unsigned char z) //延时函数{unsigned char x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void write_cmd(unsigned char cmd) {rs=0;rw=0;delay(2);lcd_data=cmd;delay(2);en=1;delay(2);en=0;}void write_dat(unsigned char dat) {rs=1;rw=0;delay(2);lcd_data=dat;delay(2);en=1;delay(2);en=0;void init_lcd(void){guanled();guandz();write_cmd(0x38);write_cmd(0x0c);write_cmd(0x06);write_cmd(0x01);write_cmd(0x80);for(num=0;num<16;num++) {write_dat(table[num]);}write_cmd(0x80+0x40);for(num=0;num<16;num++) {write_dat(table1[num]); }}#endif。