电子时钟日历

合集下载

电子时钟使用说明

电子时钟使用说明

电子时钟使用说明电子时钟是一种现代化的时钟,它采用了电子技术来进行时间计算和显示。

相比传统的机械时钟,电子时钟更加准确、精确,并且功能更加丰富。

下面将对电子时钟的使用进行详细的说明。

一、基本操作:1.插上电源:将电子时钟插入交流电源插座,并确保电压符合时钟的要求。

电子时钟会自动启动并进入待机状态。

2.设置时间:大多数电子时钟都有时间设置功能。

通常通过按下设置按钮(可能会标有"SET"或"MODE"等字样)来进入设置模式,然后使用加减按钮或者旋转按钮设置小时和分钟。

一旦设置完成,再次按下设置按钮退出设置模式,并开始正常工作。

3.调节亮度:电子时钟通常提供了亮度调节功能,以适应不同的环境需求。

通过按下亮度调节按钮(可能会标有"BRIGHT"或"B/L"等字样)来切换亮度档位,并选择最适合的亮度。

4.设置闹钟:大多数电子时钟还具备闹钟功能。

按下闹钟设置按钮(可能会标有"ALARM"或"A/L"等字样)进入闹钟设置模式,然后使用加减按钮或者旋转按钮设置闹钟的小时和分钟。

设置完成后,再次按下闹钟设置按钮退出设置模式,闹钟将会在设定的时间响起。

5.切换显示模式:一些电子时钟还提供了多种显示模式。

通过按下模式切换按钮(可能会标有"MODE"或"DISPLAY"等字样)来切换显示模式,可以切换显示时间、日期、温度等信息。

二、高级功能:1.温度显示:一些电子时钟具备温度检测功能,在屏幕上显示当前的室内温度。

通常使用室内温度感应器来检测温度,并在屏幕特定位置显示。

2.日历功能:一些电子时钟还具有日历功能,可以显示当前的日期,以及周几信息。

有些电子时钟还能显示农历日期和重要节日信息。

3.定时开关机:少数电子时钟还具备定时开关机功能。

用户可以事先设置好开关机的时间,电子时钟将在到达设定时间时自动开关机,非常方便。

时钟和日历的使用方法

时钟和日历的使用方法

时钟和日历的使用方法时钟和日历是我们日复一日都要使用的常用工具,无论是在家里还是在工作场所,在学校还是在旅游、度假中,时钟和日历的存在都是我们生活中不可或缺的一部分。

而在2023年,随着科技的飞速发展,时钟和日历的使用方式也得到了一定的改变,下面我们就来了解一下吧。

一、电子时钟的使用方法电子时钟目前已经成为了我们生活中使用最广泛的时钟之一,它具有精准、方便等特点,下面是电子时钟的使用方法。

1. 关于电池一般的电子时钟都需要使用电池,因此在使用电子时钟之前,一定要确认电池是否充足,并确保没用长时间放置,电池电能无法达到控制时钟运行的标准。

有些电子时钟的电池更换需要特定的工具,所以在更换电池之前,一定要仔细阅读说明书。

2. 设置时间电子时钟有多种设置时间的方式,比如通过按键来设置,或者通过手机APP来同步时间。

在设置时间时,要注意时区的设置,确保时钟显示的是正确的当地时间,以防误差。

3. 闹钟设置大多数电子时钟都带有闹钟功能,这个功能可以让我们设定一个指定的时间,当时间到达时,时钟会发出闹铃提醒。

在设置闹铃时,一定要注意时间和闹铃声音的大小,以免影响到他人或者睡眠质量。

4. 备用电源有些电子时钟还具备备用电源功能,这个功能可以让时钟在停电的情况下继续提供计时服务,这对于一些需要持续计时的场合非常有用。

二、日历的使用方法日历可以让我们快速获取一年中的日期,还可以让我们方便地记录生活中的重要事件。

随着科技的发展,现在的日历已经由纸质版逐渐转向电子版,电子日历在功能和使用方面都比过去的纸质日历更加方便,下面是电子日历的使用方法。

1. 日历的显示打开日历应用之后,一般会默认显示当前月份的日历,如果需要查看其他月份的日历,可以在应用中进行设置。

一般的日历应用还会支持不同形式的日历显示,比如月视图、周视图、日视图等,用户可以根据自己的需求进行切换。

2. 添加事件日历不仅可以让我们快速查看时间,还能让我们轻松添加生活中的重要事件。

电子时钟日历课程设计

电子时钟日历课程设计

电子时钟日历课程设计一、课程目标知识目标:1. 学生能理解电子时钟日历的基本原理,掌握电子时钟日历的组成及功能。

2. 学生能描述电子时钟日历中数字电路、计数器、寄存器等关键部件的工作原理。

3. 学生掌握电子时钟日历的编程方法,能运用所学知识设计简单的电子时钟日历程序。

技能目标:1. 学生能够运用所学知识,动手搭建简单的电子时钟日历电路,并进行调试。

2. 学生能够编写简单的电子时钟日历程序,具备初步的编程能力。

3. 学生能够通过小组合作,解决电子时钟日历制作过程中遇到的问题。

情感态度价值观目标:1. 培养学生对电子技术的兴趣,激发学生的学习热情和探究精神。

2. 培养学生团队合作意识,学会与他人共同解决问题,培养沟通能力和协作精神。

3. 培养学生具备时间观念,认识到时间的重要性,养成良好的时间管理习惯。

本课程针对中学生设计,结合电子技术学科特点,以实践性、操作性为主,注重培养学生的动手能力、编程能力和团队合作意识。

课程内容紧密联系课本,确保学生所学知识与实际应用相结合,提高学生的知识运用能力。

通过本课程的学习,使学生能够更好地理解电子时钟日历的原理,为今后深入学习电子技术打下基础。

二、教学内容1. 电子时钟日历基础知识:介绍电子时钟日历的组成、工作原理,包括数字电路、计数器、寄存器等关键部件的功能与应用。

- 相关教材章节:第一章 数字电路基础,第二节 计数器与寄存器。

2. 电子时钟日历电路设计:讲解如何搭建电子时钟日历电路,分析电路中各部分的作用及相互关系。

- 相关教材章节:第三章 逻辑电路设计,第四节 时序逻辑电路设计。

3. 电子时钟日历编程:教授如何编写电子时钟日历程序,包括编程语言的选择、程序结构及功能实现。

- 相关教材章节:第五章 数字电路编程,第一节 编程语言及其应用。

4. 实践操作:指导学生动手搭建电子时钟日历电路,编写程序,并进行调试。

- 相关教材章节:第六章 实践操作,第二节 电子时钟日历的制作与调试。

时钟和日历的问题解决

时钟和日历的问题解决

时钟和日历的问题解决时钟和日历是我们日常生活中常见的工具,用于记录时间和日期。

然而,有时我们可能会遇到一些与时钟和日历相关的问题,比如时间偏差、时区差异或者日期计算等。

本文将针对一些常见问题给出解决方法,帮助读者更好地应对时钟和日历的使用。

一、时间偏差问题解决在使用时钟时,我们可能会发现时钟显示的时间与实际时间有所偏差。

这可能是由于时钟电池电量不足、机械时钟的机芯出现问题或者是电子时钟的软件故障引起的。

针对这些问题,我们可以采取以下的解决方法:1. 更换电池:如果是电子时钟,首先检查电池是否电量不足,如果是,则及时更换。

如果是机械时钟,则需要联系专业的维修人员来修复时钟机芯。

2. 同步时间:对于电子时钟来说,我们可以通过设定自动同步时间的功能来确保时钟显示的时间与国际标准时间保持一致。

对于机械时钟来说,可以通过调整指针位置与标准时间对齐来修复时间偏差。

二、时区差异问题解决时区差异是由于地球不同地区的经度不同而导致的时间差异。

当我们需要与不同时区的朋友或者合作伙伴保持联系时,时区差异可能会成为问题。

以下是一些解决方法:1. 设置多个时钟:在手机、电脑或者智能手表上设置多个时钟,分别显示不同时区的时间,以便我们快速了解对方的时间。

2. 使用世界时钟:世界时钟是一种专门用于显示不同时区时间的仪器,可以直观地看到全球各地的时间。

三、日期计算问题解决在日常生活中,我们经常需要做一些日期计算,如计算两个日期之间的天数差,或者在一个日期上加上一段时间后得到新的日期等。

以下是一些解决方法:1. 使用日历工具:电子设备上的日历应用可以很方便地帮助我们进行日期计算,我们可以输入起始日期和要计算的时间间隔,系统就会给出计算结果。

2. 借助网上工具:互联网上有很多日期计算的网站或者应用,我们可以通过输入相关信息来进行日期计算,这些工具通常会给出精确的结果。

综上所述,时钟和日历是我们日常生活中必不可少的工具,同时也可能会带来一些问题。

单片机C语言电子钟显示年月日星期及时间(带注释)

单片机C语言电子钟显示年月日星期及时间(带注释)

#include<reg52.h>#define uchar unsigned char#define uint unsigned intuchar code table[]=" 2011-12-30 SA T";uchar code table1[]=" 23:59:55 ";uchar code week1[][3]={"MON","TUE","WEN","THU","FRI","SA T","SUN"}; /*uchar code week2[]="TUE";uchar code week3[]="WEN";uchar code week4[]="THU";uchar code week5[]="FRI";uchar code week6[]="SA T";uchar code week7[]="SUN"; */uchar count,shi,fen,miao,dnum,year,month,day,week,a=5;sbit rs=P2^0; //数据命令sbit rw=P2^1; //读写sbit en=P2^2; //使能sbit d1=P3^1; //独立键盘sbit d2=P3^2;sbit d3=P3^3;sbit d4=P3^4;void delay(uchar z) //延时{uint x,y;for(x=110;x>0;x--)for(y=z;z>0;z--);}void write_com(uchar com) //写指令{rs=0;rw=0;en=0;P0=com;delay(5);en=1;delay(5);en=0;}void write_date(uchar date) //写数据{rs=1;rw=0;en=0;P0=date;delay(5);en=1;delay(5);en=0;}void write_weekday (uchar a){uchar x;write_com(0x80+13);for(x=0;x<3;x++){write_date(week1[a][x]);}}void weekday(uint i){write_weekday(i%7);}void write_sfm(uchar add,uchar date){uchar shi,ge;shi=date/10;ge=date%10;write_com(0x80+0x40+add); //指向要写的地址write_date(0x30+shi); //0x30代表的数字是0,+shi表示shi的数字write_date(0x30+ge); //ge的数字}void write_ymd(uchar add,uchar date){uchar shi,ge;shi=date/10;ge=date%10;write_com(0x80+add); //指向要写的地址write_date(0x30+shi); //0x30代表的数字是0,+shi表示shi的数字write_date(0x30+ge); //ge的数字}void unit(){uchar num;en=0;write_com(0x38); //显示write_com(0x0c); //光标不显示write_com(0x06); //指针加1,整屏不移动write_com(0x01); //清屏write_com(0x80); //指针指向0x80for(num=0;num<16;num++) //第一行显示table数组{write_date(table[num]);delay(20);}write_com(0x80+0x40);for(num=0;num<16;num++) //第二行显示table1数组{write_date(table1[num]);delay(20);}TMOD=0X01;TH0=(65536-50000)/256; //开启中断TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;shi=23;fen=59;miao=55;year=11;month=12;day=30;}void jishu() //计数{if(count==20){count=0;miao++; //秒加if(miao==60){miao=0;fen++; //分加if(fen==60){fen=0;shi++;if(shi==24){shi=0;day++;a++;weekday(a);//时加}write_sfm(3,shi);write_ymd(9,day);if(day==31){day=0x01;write_ymd(9,day);month++;write_ymd(6,month);if(month==13){month=0x01;write_ymd(6,month);year++;write_ymd(3,year);}}}write_sfm(6,fen);}write_sfm(9,miao);}}void change(){d4=0;if(d1==0) //移光标{delay(10);if(d1==0){while(!d1);dnum++;if(dnum==1){TR0=0;write_com(0x0f);write_com(0x80+0x40+10);}if(dnum==2){write_com(0x80+0x40+7);}if(dnum==3){write_com(0x80+0x40+4);}if(dnum==4){write_com(0x80+10);}if(dnum==5){write_com(0x80+7);}if(dnum==6){write_com(0x80+4);}if(dnum==7){dnum=0;TR0=1;write_com(0x0c);}}}if(d2==0) //加数据{delay(10);if(d2==0){while(!d2);if(dnum==1){miao++;if(miao==60)miao=0;write_sfm(9,miao); //顺序不能换write_com(0x80+0x40+10); //顺序不能换}if(dnum==2){fen++;if(fen==60)fen=0;write_sfm(6,fen);write_com(0x80+0x40+7);}if(dnum==3){shi++;if(shi==24){shi=0;}write_sfm(3,shi);write_com(0x80+0x40+4);}if(dnum==4){day++;a++;weekday(a);if(day==31)day=1;write_ymd(9,day);write_com(0x80+10);}if(dnum==5){month++;if(month==13)month=1;write_ymd(6,month);write_com(0x80+7);}if(dnum==6){year++;write_ymd(3,year%100);write_com(0x80+4);}}}if(d3==0) //减数据{delay(10);if(d3==0){while(!d3);if(dnum==1){miao--;if(miao==-1)miao=59;write_sfm(9,miao);write_com(0x80+0x40+10);}if(dnum==2){fen--;if(fen==-1)fen=59;write_sfm(6,fen);write_com(0x80+0x40+7);}if(dnum==3){shi--;if(shi==-1)shi=23;write_sfm(3,shi);write_com(0x80+0x40+4);}if(dnum==4){day--;a--;weekday(a);if(day==0)day=30;write_ymd(9,day);write_com(0x80+10);}if(dnum==5){month--;if(month==0)month=12;write_ymd(6,month);write_com(0x80+7);}if(dnum==6){year--;write_ymd(3,year%100);write_com(0x80+4);}}}}void main(){unit();while(1){jishu();change();}}void timer0()interrupt 1{TH0=(65536-50000)/256;TL0=(65536-50000)%256;count++;}#include<reg52.h>#define uchar unsigned char //宏定义#define uint unsigned int //宏定义sbit rs=P3^5; //液晶数据/指令选择端:1-数据,0-指令sbit lcden=P3^4; //液晶使能控制端:1-有效,0-无效sbit shift_key=P3^2;//位置移动键sbit up_key=P3^3;//增加键uchar temp=0;//定义定时器溢出计数变量,每隔50ms产生1次溢出,temp加1uint year=2011;//定义年变量并赋初值2011年uchar month=06,day=01,week;//定义月、日、星期变量,并赋初值5月23日uchar hour=23,minute=59,second=58;//定义时、分、秒变量,并赋初值12时00分00秒uchar code week_string[7][4]={"MON","TUE","WED","THU","FRI","SA T","SUN"};//定义星期英文缩写表uchar data month_day[12]={31,0,31,30,31,30,31,31,30,31,30,31};//定义每月天数表/*--定时计数器T0及中断初始化函数--*/void init(void){TMOD=0x01;//设置定时器0为工作方式1TH0=(65536-50000)/256;//16位计数初值除以256得到高8位初值TL0=(65536-50000)%256;//16位计数初值除以256的余数得到低8位初值EA=1;//开总中断ET0=1;//开启定时器0中断EX0=1;//开启外部中断,外部中断用于调整时间PT0=1;//将定时器0中断设置高优先级,调整时间期不停止计时TR0=1;//启动定时器0}/*----------1ms延时函数----------*/void delay(uint n){uint i,j;for(i=n;i>0;i--)for(j=114;j>0;j--);}/*-------LCD1602写指令函数-----*/void LCD1602_write_com(uchar com){rs=0;//rs=0,置指令输入状态P0=com;//输出指令码delay(1);//延时1mslcden=1;//lcden=1,使能端有效delay(1);//延时1mslcden=0;//lcden=0,使能端无效}/*-------LCD1602写数据函数-----*/void LCD1602_write_dat(uchar dat){rs=1;//rs=1,置数据输入状态P0=dat; //输出待显示字符的字符码(ASCII码)delay(1);//延时1mslcden=1;//lcden=1,使能端有效delay(1);//延时1mslcden=0;//lcden=0,使能端无效}/*********************公历平年的2月只有28天,公历闰年的2月有29天。

题目:电子日历时钟系统程序设计

题目:电子日历时钟系统程序设计

题目:电子日历时钟系统程序设计一、功能:1.可通过M键切换显示模式:日期(年、月、日)、时间(小时、分、秒)、秒表(小时、分、秒、1/100秒)、闹钟(小时、分、秒)。

2.在日期显示模式,可通过A键依次使年、月、日闪烁或变色,这时可通过I键加1调整。

3.在时间显示模式,可通过A键依次使小时、分、秒闪烁或变色,这时可通过I键加1调整。

4.在秒表显示模式,可通过I键切换(启动/暂停)计时,当暂停计时时可通过A键复位。

5.在闹钟显示模式,可通过A键依次使On/Off标志、小时、分、秒闪烁或变色,这时可通过I键切换On/Off标志或加1调整。

6.调整和秒表操作不影响日期和时间的准确性。

7.可通过Q键结束程序。

二、任务与要求:1.实现方案,流程图(20分)2.实现日期的显示和调整(15分)3.实现时间的显示和调整(15分)4.实现日期和时间的准确性(5分)5.实现程序正常结束(5分)6.实现秒表功能(20分)7.实现闹钟功能,发声10秒(20分)8.基本实现前5项要求,再实现其它扩展要求,视难度加分。

答辩中误导答辩教师(由答辩教师认定,如某些同学参考其它资料但坚持声称全是自己编写的情况),视情节扣分。

n组设计雷同(由答辩教师认定),第一组正常计分,其余n-1组不计分。

设计报告总体要求:①写出主要设计思路,工作原理;②画出硬件接线图;③调试出现的问题及解决方法;④提交程序清单。

三、编程提示:PC机系统中的8253定时器0工作于方式3,外部提供一个时钟作为CLK信号,频率f=1.1931816MHz。

定时器0输出方波的频率: f out=1.1931816/65536=18.2Hz输出方波的周期T out=1/18.2=54.945ms。

8253A每隔55ms引起一次中断,作为定时信号。

可用55945ms作基本计时单位。

用BIOS调用INT 1AH可以取得该定时单位。

例:1秒=18.2 (计时单位)。

主要利用PC机系统功能调用实现电子日历时钟。

电子时钟

电子时钟

8279键盘显示实验(电子秒表)一.实验要求利用实验机上提供的8279键盘电路,数码显示电路,设计一个电子钟(日历),用小键盘控制电子钟(日历)的启停及初始值的预值。

电子钟做成如下两种格式(按F键两种格式可以切换):XX -XX-XX 由左向右分别为: 时、分、秒XX -XX-XX 由左向右分别为: 年、月、日1.C键:清除,显示00-00-00.2.A键:启动,电子钟(日历)计时3.D键:停止,电子钟(日历)停止计时4.B键:设置初值:由左向右依次输入预置的时、分、秒(年、月、日)值,同时应具有判断输入错误的能力,若输入有错,则显示: 00-00-00按B键即可重新输入预置值:5.F键:实现电子钟和日历的切换5.E键:程序退出。

二试验程序//---8279键盘显示实验(电子秒表)---//-----头文件引用------#include<reg51.h>#include<absacc.h>#include<intrins.h>//-----宏声明-----#define D8279 XBYTE[0xF238] //8279 数据口地址#define C8279 XBYTE[0xF239] //8279 状态/命令口地址#define uchar unsigned char#define uint unsigned int#define TimeDisp 1#define DateDisp 0//-----变量定义-----uchar idata time[] = {0,0,0,12}; //10毫秒,秒,分,十uchar idata day[3] = {18,6,8};uchar idata diss[8]={0x20,0x20,0,0,0,0,0,0};//显示缓冲区uchar code ledseg[] = { 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5E,0x79,0x71,0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF,0xF7,0xFC,0xB9,0xDE,0xF9,0xF1,0x00,0x40};// LED显示常数表bit bdata sbz,wbz,kbz; //定义秒标志、键值合法标志、读键标志bit bdata flag = TimeDisp;//-----取键值函数-----uchar getkey(){uchar key;if((C8279&0x07)==0x00){kbz=0;} //无键按下,置标志else{kbz=1;C8279=0x40; //读FIFO RAM命令key=D8279;key=(key&0x3f); //取键盘数据低6位 return(key);}}//-----显示函数-----void disled(d)uchar idata *d;{uchar i;C8279=0x90;for(i=0;i<8;i++){C8279=i+0x80;D8279=ledseg[*d];d++;}}//-----显示缓冲区内容显示-----void disp(void){disled(diss);}//----8279初始化子程序-----void init8279(){C8279=0; //置8279工作方式C8279=0x2f; //置键盘扫描速率C8279=0xc1; //清除LED 显示//while(com&0x80);//等待清除结束}//-----毫秒显示-----void disms(){diss[0]=time[0]%10;diss[1]=time[0]/10;disp();}//-----显示处理-----void display(){if(flag == 1){diss[0]=time[1]%10;diss[1]=time[1]/10;diss[2]=33;diss[3]=time[2]%10;diss[4]=time[2]/10;diss[5]=33;diss[6]=time[3]%10;diss[7]=time[3]/10;}else{diss[0]=day[0]%10;diss[1]=day[0]/10;diss[2]=33;diss[3]=day[1]%10;diss[4]=day[1]/10;diss[5]=33;diss[6]=day[2]%10;diss[7]=day[2]/10;}disp();}//-----初始化-----void first(void){init8279(); //初始化8279 sbz=1; //标志TMOD=0x10;TH1=0xdc; //10毫秒的时间常数 TL1=0x00;disms();ET1=1;EA=1; //允许中断}//-----INT_T1中断服务子程序----- void Int_T1(void) interrupt 3{TR1=0;TH1=0xdc; //10毫秒定时常数TL1=0x00;TR1=1;time[0]=time[0]+1; //10毫秒数加 1 if(time[0]==100) //判断10毫秒=100 {time[0]=0;sbz=1; //置秒标志}//disms();if(time[0]==0){time[1]=time[1]+1; //秒加1if(time[1]==60) //判断秒=60{time[1]=0;time[2]=time[2]+1;//分加1if(time[2]==60) //判断分=60{time[2]=0;time[3]=time[3]+1;//时加1if(time[3]==24)//判断时=23{time[3]=0;day[0] += 1;if(day[0] == 30){day[0] = 0;day[1] += 1;if(day[1] == 12){day[1] = 0;day[2]++;}}}}}}}//-----读数子程序-----void getword(){uchar i;for(i=8;i>0;i--){do{getkey(); //读键盘}while(kbz==0);//无键输入,则再读if((getkey()>9)||(getkey()<0))//判断输入是否大于9,小于0 {wbz=0; //置非法输入标志return;}else{wbz=1; //置合法输入标志if((i == 6)||(i == 3)){i--;diss[i-1]=getkey();disp(); //显示输入的字符}else{diss[i-1]=getkey();disp(); //显示输入的字符}}}}//-----时间清零子程序-----void cleart(){TR1=0; //关计数器time[0]=0; //10毫秒清零time[1]=0; //秒清零time[2]=0; //分钟清零time[3]=0; //小时清零disms(); //显示毫秒sbz=1; //置秒标志}//-----设置初值子程序-----void sett(){getword(); //读数if(wbz==1) //判断输入合法性{if(flag == 1){time[3]=(diss[7]*10+diss[6]);if(time[3]<24)//判断输入小时值< 24 {time[2]=(diss[4]*10+diss[3]);if(time[2]<60)//判断输入分钟数< 60{time[1]=(diss[1]*10+diss[0]);if(time[1]<60)//判断输入秒值< 60{;}else{cleart();} //时间清零}else{cleart();} //时间清零}else{cleart();} //时间清零}else{day[2]=(diss[7]*10+diss[6]);if(day[2]<32)//判断输入小时值< 24{day[1]=(diss[4]*10+diss[3]);if(day[1]<13)//判断输入分钟数< 60{day[0]=(diss[1]*10+diss[0]);if(day[0]<100)//判断输入秒值< 60{;}else{cleart();} //时间清零}else{cleart();} //时间清零}else{cleart();} //时间清零}}else{cleart();} //时间清零display();//显示时间}//-----主程序-----void main(){uint counter = 0;first(); //初始化while(1) //循环{counter++;if(counter == 10000 ){//flag = !flag;counter = 0;}getkey(); //读键盘if(kbz==1) //判断是否有键输入{switch(getkey()){case 0x0c: cleart();//输入键是'C',转CLEART break;case 0x0a: TR1=1; //输入键是'A',电子钟计时break;case 0x0d: TR1=0; //输入键是'D',电子钟停止计时break;case 0x0b: TR1=0; //输入键是'B',转SETTsett();break;case 0x0e: _nop_();//输入键是'E',case 0x0f: flag = !flag;break;while(1)//等待回到监控{}}}else if(sbz==1){display();//显示时间sbz=0;//清标志}}}。

时钟和日历认识时钟和日历的基本概念

时钟和日历认识时钟和日历的基本概念

时钟和日历认识时钟和日历的基本概念时钟和日历是我们日常生活中常见的时间工具,它们帮助我们管理时间、组织生活的重要辅助工具。

本文将深入探讨时钟和日历的基本概念,帮助读者更好地认识它们。

一、时钟的基本概念和类型时钟是测量、显示时间的仪器,广泛应用于各个领域。

它不仅起到指示时间的作用,还能帮助我们安排日程和精确计时。

时钟按照运行机制的不同可以分为机械时钟、电子时钟、原子钟等类型。

1. 机械时钟机械时钟是一种利用传动齿轮和摆轮装置来测量和显示时间的时钟。

它的工作原理是通过齿轮传动使钟表指针进行运动。

机械时钟因其复杂的结构和工艺而需经常维护,但其经典的外观和独特的机械声音使得它们仍然备受人们喜爱。

2. 电子时钟电子时钟是一种通过电子元器件测量和显示时间的时钟。

它采用石英晶体振荡器作为时基,具有准确性高、结构简单、使用方便等特点。

电子时钟广泛应用于家庭、办公室和公共场所,其数字显示界面使我们更方便地读取时间。

3. 原子钟原子钟是一种以原子物理现象作为基础来测量时间的时钟。

它利用铯或气体冷却离子阱等技术来测量原子的振荡频率,并以此作为时间的基准。

原子钟的准确度非常高,误差可达到数亿分之一,是目前用于科学研究和精密实验的最佳选择。

二、日历的基本概念和类型日历是一种记录年、月、日及其相应例假日的系统。

它有助于人们了解、计算和安排时间。

在现代社会中,我们常用的日历主要有阴历和阳历。

1. 阴历阴历是以月亮的运行周期作为基础的一种日历系统。

它的计算方式是根据月亮围绕地球的运行周期,将一年分为12个阴历月。

阴历因其与农业生产和宗教习俗的关系而在一些地区仍然有广泛应用。

2. 阳历阳历是以地球绕太阳运行周期作为基础的一种日历系统。

它的计算方式是将一年按照365天划分为12个月,每月的天数不等。

阳历因其科学性和实用性而成为全球通用的日历系统。

三、时钟和日历在生活中的应用时钟和日历作为时间管理的工具,在我们的日常生活中有着广泛的应用。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

电子时钟日历本实例基于51单片机为控制器,程序采用汇编语言编写。

时钟芯片使用串行通信的DS1302、温度测量采用一线式总线的数字温度传感器DL18B20、显示模块用的是深圳耀宇公司的YM12864R内带字库、NE555用于闹钟时间到时驱动轰鸣器发声。

按键用于时间和闹钟设置,进入或退出设置时需按住设置键3秒以上。

电路原理图如下:实物照片汇编源程序如下:E BIT P1.0 ;使能端脉冲下降沿锁存数据RW BIT P1.1 ;读写控制0写1读RS BIT P1.2 ;指令数据选择0指令1数据DQ BIT P3.3 ;DS18B20数据输出端SZ BIT P2.0 ;设置及退出键YW BIT P2.1 ;移位键UP BIT P2.2 ;加一键KAL BIT P2.3 ;闹钟消警键LEDKG BIT P2.4 ;LCD背光控制开关LED BIT P2.7 ;LCD背光灯SCLK BIT P3.0 ;时钟线IO BIT P3.1 ;数据线RST BIT P3.2 ;复位线FGAL4 BIT 20H.0 ;闹钟报警标志位FLAG1 BIT 20H.1 ;DS18B20复位成功标志位WCOMD EQU 21H ;存放需写入LCD 的指令WDATA EQU 22H ;存放需写入LCD 的数据TEMP_L EQU 23H ;从DS18B20中读出的温度值的低字节TEMP_H EQU 24H ;从DS18B20中读出的温度值的高字节TEMP EQU 25H ;温度值TEMPBUF EQU 26H ;温度转换过程中的暂存单元WDB EQU 27H ;温度显示的百位值WDS EQU 28H ;温度显示的十位值WDG EQU 29H ;温度显示的个位值XQS EQU 2AH ;星期值显示的十位值SECG EQU 2CH ;秒显示的个位值SECS EQU 2DH ;秒显示的十位值MING EQU 2EH ;分钟显示的个位值MINS EQU 2FH ;分钟十位HOUG EQU 30H ;小时个位HOUS EQU 31H ;小时十位DA TEG EQU 32H ;日个位DA TES EQU 33H ;日十位MONG EQU 34H ;月个位MONS EQU 35H ;月十位YERG EQU 36H ;年个位YERS EQU 37H ;年十位SHIF EQU 38H ;移位键值WDATD EQU 39H ;写DS1302的数据缓存XQ EQU 3AH ;设定星期值的缓存单元SEC EQU 3BH ;秒MIN EQU 3CH ;分HOU EQU 3DH ;时DA TE EQU 3EH ;日MON EQU 3FH ;月YER EQU 40H ;年ALMIN EQU 41H ;从DS1302RAM区中读出的闹钟分值(用于设定闹钟后的比较)ALHOU EQU 42H ;从DS1302RAM区中读出的闹钟时值(用于设定闹钟后的比较)FGAL EQU 43H ;闹钟设定标志单元,“00H”表示未设定闹钟,“FFH”表示闹钟已设定ALMING EQU 44H ;闹钟设定时用于显示的分钟个位ALMINS EQU 45H ;闹钟设定时用于显示的分钟十位ALHOUG EQU 46H ;闹钟设定时用于显示的小时个位ALHOUS EQU 47H ;闹钟设定时用于显示的小时十位LZG EQU 48H ;闹钟设定时用于显示的开或关字LZS EQU 49H ;闹钟设定时用于显示的开或关字DR0 EQU 4AH ;DR1 EQU 4BH ;用于定时子程序中的计数用DR2 EQU 4CH ;用于定时子程序中的计数用DR3 EQU 4DH ;用于一秒钟更新一次显示屏的显示DR4 EQU 4EH ;用于定时子程序中的计数用DRF EQU 4FH ;用于计数JSQ1 EQU 50H ;用于显示字符个数的计数ORG 0000HMAIN: MOV 7FH,#0CLR P3.7MOV R0,#20HCLR AM1: MOV @R0,ACJNE R0,#51H,M1MOV P2,#0FFHMOV WDATD,#0MOV A,#8EH ;写控制寄存器,允许对DS1302进行读写操作LCALL WDS1302 ;调DS1302写子程序;MOV A,#80H ;初始化DS1302时才用,即全新的或断电后无备用电源供电的情况下才用来启动DS1302工着;LCALL WDS1302MOV A,#90HMOV WDATD,#0ABHLCALL WDS1302;从此处开始的34行为初始化DS1302时才用,即全新的或断电后无备用电源供电的情况,否则DS1302内部寄存器的值将不确定;MOV XQ,#01H ;向DS1302内部初值不能为0的寄存器写入初值;MOV DATE,#01H;MOV MON,#01H;MOV YER,#10H;MOV WDA TD,XQ;MOV A,#8AH ;写星期;LCALL WDS1302;MOV WDA TD,MIN;MOV A,#82H ;写分;LCALL WDS1302;MOV WDA TD,HOU;MOV A,#84H ;写时;LCALL WDS1302;MOV WDA TD,DA TE;MOV A,#86H ;写日;LCALL WDS1302;MOV WDA TD,MON;MOV A,#88H ;写月;LCALL WDS1302;MOV WDA TD,YER;MOV A,#8CH ;写年;LCALL WDS1302;MOV WDA TD,SEC;MOV A,#80H ;写秒;LCALL WDS1302;MOV WDA TD,ALMIN;MOV A,#0C0H ;写DS1302RAM 00H单元;LCALL WDS1302;MOV WDA TD,ALHOU;MOV A,#0C2H ;写DS1302RAM 01H单元;LCALL WDS1302;MOV WDA TD,FGAL;MOV A,#0C4H ;写DS1302RAM 02H单元;LCALL WDS1302LCALL INITLCDLCALL RDS1302MOV DR3,A ;用于存放前一次的秒钟值以便于每秒钟更新一次LCD显示M2: LCALL DATADIS ;调读DS1302时间数据子程序LCALL SDATA ;调显示数据处理子程序LCALL LCDDISP ;LCD显示更新子程序LCALL DS18B20TM ;“读温度子程序”LCALL KEY ;调按键处理子程序JB LEDKG,M7 ;判断LCD背光开关是否按下LCALL TIM10MSJB LEDKG,M7JNB LEDKG,$ ;按下背光开或关CPL LEDM7: JB FGAL4,M3LCALL ALCMP ;调定时比较子程序SJMP M2M3: JB KAL,M4LCALL TIM10MSJB KAL,M4JNB KAL,$CLR P3.7 ;关闭闹铃M4: MOV A,ALMIN ;若无人按下消警键,则将闹钟设定的小时值加一分钟后与实际分钟值比较,相等后消警;MOV A,ALHOU ;若无人按下消警键,则将闹钟设定的小时值加一小时后与实际小时值比较,相等后消警;ADD A,#1;DA A;CJNE A,#24H,M5;MOV A,#00H;M5: CJNE A,HOU,M6INC ADA ACJNE A,#60H,M5MOV A,#00HM5: CJNE A,MIN,M6CLR FGAL4CLR P3.7M6: LJMP M2;LCD忙标志检测子程序;占用P0口为数据端口BUSF: CLR ECLR RSSETB RWMOV P0,#0FFHNOPSETB ENOPNOPJB P0.7,$CLR ERET;向LCD写数据子程序WDATALCD: LCALL BUSFSETB RSCLR RWMOV P0,WDATANOPNOPSETB ENOPNOPCLR ENOPNOPRET;向LCD写指令子程序WCOMDLCD: LCALL BUSFCLR RSCLR RWMOV P0,WCOMDNOPNOPSETB ENOPNOPCLR ENOPNOPRET;LCD初始化子程序INITLCD: MOV WCOMD,#30H ;使用基本指令集,8位模式LCALL WCOMDLCD ;调向LCD写指令子程序MOV WCOMD,#02H ;位址计数器AC归零MOV WCOMD,#0CH ;显示开.光标关.光标位反白关LCALL WCOMDLCDMOV WCOMD,#01H ;清屏,显示地址计数器AC归零LCALL WCOMDLCDMOV WCOMD,#06H ;写入显示数据时光标右移LCALL WCOMDLCDRET;闹钟比较子程序ALCMP: MOV A,FGAL ;先判断闹钟功能是否开启,若未开启则不进行闹钟比较CJNE A,#0FFH,CP1MOV A,MINCJNE A,ALMIN,CP1MOV A,HOUCJNE A,ALHOU,CP1SETB P3.7SETB FGAL4CP1: RET;写DS1302;WDA TD为待写入数据缓存;DRF用于计数WDS1302: CLR RSTCLR SCLKSETB RSTCLR CMOV DRF,#8WLOOP1: RRC ACLR SCLKMOV IO,CNOPSETB SCLKDJNZ DRF,WLOOP1CLR SCLKMOV A,WDA TDMOV DRF,#8CLR CWLOOP2: RRC ACLR SCLKNOPMOV IO,CNOPSETB SCLKDJNZ DRF,WLOOP2CLR RSTRET;读2DS1302;DRF用于计数RDS1302: CLR RSTCLR SCLKSETB RSTCLR CMOV DRF,#8RLOOP1: RRC AMOV IO,CNOPSETB SCLKCLR SCLKDJNZ DRF,RLOOP1SETB IOMOV DRF,#8CLR CRLOOP2: CLR SCLKMOV C,IONOPRRC ASETB SCLKDJNZ DRF,RLOOP2CLR RSTRET;DS1302数据读取及处理子程序(用于显示)DA TADIS: MOV A,#8BH ;读出DS1302中须显示的单元LCALL RDS1302MOV XQ,AMOV A,#81HLCALL RDS1302MOV SEC,AMOV B,AANL A,#0FHMOV SECG,AMOV A,BSWAP AANL A,#0FHMOV SECS,AMOV A,#83HLCALL RDS1302MOV B,AMOV MIN,AMOV MING,AMOV A,BSWAP AANL A,#0FHMOV MINS,AMOV A,#85HLCALL RDS1302MOV B,AMOV HOU,AANL A,#0FHMOV HOUG,AMOV A,BSWAP AANL A,#0FHMOV HOUS,AMOV A,#87HLCALL RDS1302MOV DATE,AMOV B,AANL A,#0FHMOV DATEG,AMOV A,BSWAP AANL A,#03HMOV DATES,AMOV A,#89HLCALL RDS1302MOV MON,AMOV B,AANL A,#0FHMOV MONG,AMOV A,BSWAP AANL A,#01HMOV MONS,AMOV A,#8DHLCALL RDS1302MOV YER,AMOV B,AANL A,#0FHMOV YERG,AMOV A,BSWAP AANL A,#0FHMOV YERS,AMOV A,#0C1H ;读DS1302RAM 00H单元LCALL RDS1302MOV B,AANL A,#0FHMOV ALMING,AMOV A,BSWAP AANL A,#0FHMOV ALMINS,AMOV A,#0C3H ;读DS1302RAM 01H单元LCALL RDS1302MOV ALHOU,AMOV B,AANL A,#0FHMOV ALHOUG,AMOV A,BSWAP AANL A,#0FHMOV ALHOUS,AMOV A,#0C5H ;读DS1302RAM 02H单元LCALL RDS1302MOV FGAL,A ;判断闹钟功能是否开启,将对应的汉字代码写入显示缓存中CJNE A,#00H,D1MOV LZS,#0B9HMOV LZG,#0D8HSJMP D2D1: CJNE A,#0FFH,D2MOV LZS,#0BFHMOV LZG,#0AAHD2: RET;将显示内容查表,转换成LCD内部所对应的字库码SDATA: MOV A,XQCJNE A,#1,S2MOV XQS,#0D2H ;星期一MOV XQG,#0BBH;SJMP S8S2: CJNE A,#2,S3MOV XQS,#0B6HMOV XQG,#0FEHS3: CJNE A,#3,S4MOV XQS,#0C8HMOV XQG,#0FDHS4: CJNE A,#4,S5MOV XQS,#0CBHMOV XQG,#0C4HMOV XQS,#0CEHMOV XQG,#0E5HS6: CJNE A,#6,S7MOV XQS,#0C1HMOV XQG,#0F9HS7: CJNE A,#7,S8MOV XQS,#0C8HMOV XQG,#0D5HS8: MOV DPTR,#TABL2 ;LCD显示代码表MOV A,MINGMOVC A,@A+DPTRMOV MING,AMOV A,MINSMOVC A,@A+DPTRMOV MINS,AMOV A,HOUGMOVC A,@A+DPTRMOV HOUG,AMOV A,HOUSMOVC A,@A+DPTRMOV HOUS,AMOV A,DATEGMOVC A,@A+DPTRMOV DATEG,AMOV A,DATESMOVC A,@A+DPTRMOV DATES,AMOV A,MONGMOVC A,@A+DPTRMOV MONG,AMOV A,MONSMOVC A,@A+DPTRMOV MONS,AMOV A,YERGMOVC A,@A+DPTRMOV YERG,AMOV A,YERSMOVC A,@A+DPTRMOV YERS,AMOV A,SECGMOVC A,@A+DPTRMOV SECG,AMOV A,SECSMOVC A,@A+DPTRMOV SECS,AMOV A,ALMINGMOVC A,@A+DPTRMOV ALMING,AMOV A,ALMINSMOVC A,@A+DPTRMOV ALMINS,AMOV A,ALHOUGMOVC A,@A+DPTRMOV ALHOUG,AMOV A,ALHOUSMOVC A,@A+DPTRMOV ALHOUS,AMOV A,WDGMOVC A,@A+DPTRMOV WDG,AMOV A,WDSMOVC A,@A+DPTRMOV WDS,ARET;LCD显示更新子程序LCDDISP: MOV A,DR3CJNE A,SEC,DISP1RETDISP1: MOV DR3,SECMOV WCOMD,#81H ;从左上第一行第二字节处开始显示LCALL WCOMDLCDMOV WDATA,#32H ;2LCALL WDATALCDMOV WDATA,#30H ;0LCALL WDATALCDMOV WDATA,YERS ;年LCALL WDATALCDMOV WDATA,YERGLCALL WDATALCDMOV WDATA,#0C4H ;年字的汉字字模LCALL WDATALCDMOV WDATA,#0EAHLCALL WDATALCDMOV WDATA,MONS ;月LCALL WDATALCDMOV WDATA,MONGLCALL WDATALCDMOV WDATA,#0D4H ;月字的汉字字模LCALL WDATALCDMOV WDATA,#0C2HLCALL WDATALCDMOV WDATA,DATESLCALL WDATALCDMOV WDATA,#0C8H ;日字的汉字字模LCALL WDATALCDMOV WDATA,#0D5HLCALL WDATALCDMOV WCOMD,#92HLCALL WCOMDLCDMOV WDATA,HOUSLCALL WDATALCDMOV WDATA,HOUGLCALL WDATALCDMOV WDATA,#3AHLCALL WDATALCDMOV WDATA,#20HLCALL WDATALCDMOV WDATA,MINSLCALL WDATALCDMOV WDATA,MINGLCALL WDATALCDMOV WDATA,#3AHLCALL WDATALCDMOV WDATA,#20HLCALL WDATALCDMOV WDATA,SECSLCALL WDATALCDMOV WDATA,SECGLCALL WDATALCDMOV WCOMD,#88HLCALL WCOMDLCDMOV WDATA,#0D0H ;星LCALL WDATALCDMOV WDATA,#0C7HLCALL WDATALCDMOV WDATA,#0C6H ;期LCALL WDATALCDMOV WDATA,#0DAHLCALL WDATALCDMOV WDATA,XQSLCALL WDATALCDMOV WDATA,XQGLCALL WDATALCDMOV WCOMD,#8CHLCALL WCOMDLCDMOV WDATA,#0CEH ;温LCALL WDATALCDMOV WDATA,#0C2HLCALL WDATALCDMOV WDATA,#0C8H ;度LCALL WDATALCDMOV WDATA,WDS ;温度的十位LCALL WDATALCDMOV WDATA,WDGLCALL WDATALCDMOV WDATA,#0A1H ;CLCALL WDATALCDMOV WDATA,#0E6HLCALL WDATALCDMOV WCOMD,#98HLCALL WCOMDLCDMOV WDATA,#0C4H ;闹LCALL WDATALCDMOV WDATA,#0D6HLCALL WDATALCDMOV WDATA,#0D6H ;钟LCALL WDATALCDMOV WDATA,#0D3HLCALL WDATALCDMOV WDATA,LZSLCALL WDATALCDMOV WDATA,LZGLCALL WDATALCDMOV WCOMD,#9CHLCALL WCOMDLCDMOV WDATA,ALHOUSLCALL WDATALCDMOV WDATA,ALHOUGLCALL WDATALCDMOV WDATA,#3AHLCALL WDATALCDMOV WDATA,#20HLCALL WDATALCDMOV WDATA,ALMINSLCALL WDATALCDMOV WDATA,ALMINGLCALL WDATALCDMOV WDATA,#20HLCALL WDATALCDMOV WDATA,#20HLCALL WDATALCDRET;向DS1302写设定数据SWDS: MOV WDA TD,XQMOV A,#8AH ;写星期LCALL WDS1302MOV WDATD,MINMOV A,#82H ;写分LCALL WDS1302MOV WDATD,HOUMOV A,#84H ;写时LCALL WDS1302MOV WDATD,DATEMOV A,#86H ;写日LCALL WDS1302MOV WDATD,MONMOV A,#88H ;写月LCALL WDS1302MOV WDATD,YERMOV A,#8CH ;写年LCALL WDS1302MOV WDATD,SECMOV A,#80H ;写秒LCALL WDS1302MOV WDATD,ALMINMOV A,#0C0H ;写DS1302RAM 00H单元LCALL WDS1302MOV WDATD,ALHOUMOV A,#0C2H ;写DS1302RAM 01H单元LCALL WDS1302MOV WDATD,FGALMOV A,#0C4H ;写DS1302RAM 02H单元LCALL WDS1302RET;按键处理子程序KEY: JB SZ,KOUTLCALL TIM1SJB SZ,KOUTMOV SHIF,#0MOV WCOMD,#0FH ;开光标,且光标位闪烁LCALL WCOMDLCD ;调写LCD指令子程序MOV DPTR,#TABL1MOV A,SHIFMOVC A,@A+DPTR ;查表后取出需显示的光标位MOV WCOMD,ALCALL WCOMDLCDJNB SZ,$KSZ: JB SZ,KYW ;若再按下设置键则退出设置功能LCALL TIM1SJB SZ,KYWLCALL SWDSMOV WCOMD,#0CH ;关光标LCALL WCOMDLCDMOV SHIF,#0MOV DR3,SECJNB SZ,$KOUT: RETKYW: JB YW,KUPLCALL TIM10MSJB YW,KUPJNB YW,$INC SHIFMOV A,SHIFCJNE A,#10,KYW1MOV SHIF,#0KYW1: MOV DPTR,#TABL1MOV A,SHIFMOVC A,@A+DPTRMOV WCOMD,ALCALL WCOMDLCDSJMP KSZKUP: JB UP,KSZLCALL TIM10MSJB UP,KSZJNB UP,$MOV R3,SHIFCJNE R3,#0,KUP1LJMP KYERKUP1: CJNE R3,#1,KUP2LJMP KMONKUP2: CJNE R3,#2,KUP3LJMP KDATEKUP3: CJNE R3,#3,KUP4LJMP KHOUKUP4: CJNE R3,#4,KUP5LJMP KMINKUP5: CJNE R3,#5,KUP6LJMP KSECKUP6: CJNE R3,#6,KUP7LJMP KXQKUP7: CJNE R3,#7,KUP8LJMP KFGALKUP8: CJNE R3,#8,KUP9LJMP KALHOUKUP9: CJNE R3,#9,KUPALJMP KALMINKUPA: LJMP KSZKYER: MOV A,YERINC ADA AMOV YER,AANL A,#0FHMOV DPTR,#TABL2MOVC A,@A+DPTRMOV YERG,AMOV A,YERSWAP AANL A,#0FHMOVC A,@A+DPTRMOV YERS,AMOV WDATA,YERSLCALL WDATALCDMOV WDATA,YERGLCALL WDATALCDMOV WCOMD,#82H ;用于将光标反回原位LCALL WCOMDLCDLJMP KSZKMON: MOV A,MONINC ADA AMOV MON,ACJNE A,#13H,K1MOV MON,#01HK1: MOV A,MONANL A,#0FHMOV DPTR,#TABL2MOVC A,@A+DPTRMOV MONG,AMOV A,MONSWAP AANL A,#0FHMOVC A,@A+DPTRMOV MONS,AMOV WDATA,MONSLCALL WDATALCDMOV WDATA,MONGLCALL WDATALCDMOV WCOMD,#84HLCALL WCOMDLCDLJMP KSZKDATE: MOV A,DATE INC ADA AMOV DATE,ACJNE A,#32H,K2 MOV DATE,#01HK2: MOV A,DATE ANL A,#0FHMOV DPTR,#TABL2 MOVC A,@A+DPTR MOV DATEG,AMOV A,DATESWAP AANL A,#0FHMOVC A,@A+DPTR MOV DATES,AMOV WDATA,DATES LCALL WDATALCD MOV WDATA,DATEG LCALL WDATALCD MOV WCOMD,#86H LCALL WCOMDLCD LJMP KSZKHOU: MOV A,HOU INC ADA AMOV HOU,ACJNE A,#24H,K3 MOV HOU,#00HK3: MOV A,HOU ANL A,#0FHMOV DPTR,#TABL2 MOVC A,@A+DPTR MOV HOUG,AMOV A,HOUSWAP AANL A,#0FHMOVC A,@A+DPTR MOV HOUS,AMOV WDATA,HOUS LCALL WDATALCD MOV WDATA,HOUG LCALL WDATALCD MOV WCOMD,#92H LCALL WCOMDLCD LJMP KSZKMIN: MOV A,MININC ADA AMOV MIN,ACJNE A,#60H,K4 MOV MIN,#00HK4: MOV A,MIN ANL A,#0FHMOV DPTR,#TABL2 MOVC A,@A+DPTR MOV MING,AMOV A,MINSWAP AANL A,#0FHMOVC A,@A+DPTR MOV MINS,AMOV WDATA,MINS LCALL WDATALCD MOV WDATA,MING LCALL WDATALCD MOV WCOMD,#94H LCALL WCOMDLCD LJMP KSZKSEC: MOV A,SEC INC ADA AMOV SEC,ACJNE A,#60H,K5 MOV SEC,#00HK5: MOV A,SEC ANL A,#0FHMOV DPTR,#TABL2 MOVC A,@A+DPTR MOV SECG,AMOV A,SECSWAP AANL A,#0FHMOVC A,@A+DPTR MOV SECS,AMOV WDATA,SECS LCALL WDATALCD MOV WDATA,SECG LCALL WDATALCD MOV WCOMD,#96H LCALL WCOMDLCD LJMP KSZKXQ: MOV A,XQ INC AMOV XQ,ACJNE A,#8,KXQ1MOV XQ,#1KXQ1: MOV A,XQCJNE A,#1,KXQ2MOV XQS,#0D2HMOV XQG,#0BBHLJMP KXQ9KXQ2: CJNE A,#2,KXQ3MOV XQS,#0B6HMOV XQG,#0FEHLJMP KXQ9KXQ3: CJNE A,#3,KXQ4MOV XQS,#0C8HMOV XQG,#0FDHLJMP KXQ9KXQ4: CJNE A,#4,KXQ5MOV XQS,#0CBHMOV XQG,#0C4HLJMP KXQ9KXQ5: CJNE A,#5,KXQ6MOV XQS,#0CEHMOV XQG,#0E5HLJMP KXQ9KXQ6: CJNE A,#6,KXQ7MOV XQS,#0C1HMOV XQG,#0F9HLJMP KXQ9KXQ7: CJNE A,#7,KXQ9MOV XQS,#0C8HMOV XQG,#0D5HKXQ9: MOV WDA TA,XQS LCALL WDATALCDMOV WDATA,XQGLCALL WDATALCDMOV WCOMD,#8AHLCALL WCOMDLCDLJMP KSZKFGAL: MOV A,FGALCPL AMOV FGAL,ACJNE A,#0,KFGAL1MOV LZS,#0B9HMOV LZG,#0D8HSJMP KFGAL2KFGAL1: CJNE A,#0FFH,KFGAL2 MOV LZS,#0BFHMOV LZG,#0AAHKFGAL2: MOV WDA TA,LZSLCALL WDATALCD MOV WCOMD,#9AH LCALL WCOMDLCD LJMP KSZKALHOU: MOV A,ALHOU INC ADA AMOV ALHOU,ACJNE A,#24H,K6MOV ALHOU,#00HK6: MOV A,ALHOUANL A,#0FHMOV DPTR,#TABL2 MOVC A,@A+DPTR MOV ALHOUG,AMOV A,ALHOUSWAP AANL A,#0FHMOVC A,@A+DPTR MOV ALHOUS,AMOV WDATA,ALHOUS LCALL WDATALCD MOV WDATA,ALHOUG LCALL WDATALCD MOV WCOMD,#9CH LCALL WCOMDLCD LJMP KSZKALMIN: MOV A,ALMIN INC ADA AMOV ALMIN,ACJNE A,#60H,K7MOV ALMIN,#00HK7: MOV A,ALMINANL A,#0FHMOV DPTR,#TABL2 MOVC A,@A+DPTR MOV ALMING,AMOV A,ALMINSWAP AANL A,#0FHMOVC A,@A+DPTR MOV ALMINS,AMOV WDATA,ALMINS LCALL WDATALCD MOV WDATA,ALMINGLCALL WCOMDLCDLJMP KSZ;10豪秒延时子程序TIM10MS: MOV DR1,#10TD1: MOV DR2,#250TD2: NOPNOPDJNZ DR2,TD2DJNZ DR1,TD1RET;1秒延时子程序TIM1S: MOV R5,#1TD3: MOV R6,#100TD4: LCALL TIM10MSDJNZ R6,TD4DJNZ R5,TD3RET;LCD显示地址表TABL1: DB 82H,84H,86H,92H,94H,96H,8AH,9AH,9CH,9EH;LCD显示代码表TABL2: DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H;“读温度子程序”DS18B20TM: LCALL STA18B20 ;调“DS18B20初始复位子程序”MOV A,#0CCHLCALL W18B20MOV A,#44HLCALL W18B20LCALL STA18B20MOV A,#0CCHLCALL W18B20MOV A,#0BEHLCALL W18B20LCALL R18B20LCALL TEMPCONVRET;“DS18B20初始复位子程序”STA18B20: SETB DQNOPNOPCLR DQLCALL T500USSETB DQNOPMOV DR4,#37STA1: JNB DQ,STA2DJNZ DR4,STA1JMP STA3STA2: SETB FLAG1JMP STA4STA3: CLR FLAG1JMP STA5STA4: MOV DR4,#100DJNZ DR4,$STA5: SETB DQRET;“写DS18B20子程序”W18B20: MOV DR1,#8CLR CYWR1: CLR DQMOV R7,#9DJNZ R7,$RRC AMOV DQ,CMOV R7,#23DJNZ R7,$SETB DQNOPDJNZ DR1,WR1SETB DQRET;“读DS18B20子程序”R18B20: MOV DR2,#2MOV R1,#TEMP_LRD1: MOV DR1,#8CLR ARD2: CLR CSETB DQNOPNOPCLR DQNOPNOPNOPSETB DQMOV R7,#9DJNZ R7,$MOV C,DQMOV R7,#23DJNZ R7,$RRC ADJNZ DR1,RD2MOV @R1,AINC R1DJNZ DR2,RD1RET;“温度转换子程序”;读出温度高字节的低四位与低字节的高四位组合成一个字节即可得到温度的整数值TEMPCONV: MOV A,TEMP_LANL A,#0F0HSWAP AMOV TEMPBUF,AMOV A,TEMP_HANL A,#0FHSWAP AORL A,TEMPBUFMOV TEMP,AMOV B,#100DIV ABMOV WDB,AMOV A,#10XCH A,BDIV ABMOV WDS,AMOV WDG,BRET;500微秒延时子程序T500US: MOV R4,#250DJNZ R4,$RETEND。

相关文档
最新文档