带温度显现的电子时钟
电子时钟使用说明
电子时钟使用说明电子时钟是一种现代化的时钟,它采用了电子技术来进行时间计算和显示。
相比传统的机械时钟,电子时钟更加准确、精确,并且功能更加丰富。
下面将对电子时钟的使用进行详细的说明。
一、基本操作:1.插上电源:将电子时钟插入交流电源插座,并确保电压符合时钟的要求。
电子时钟会自动启动并进入待机状态。
2.设置时间:大多数电子时钟都有时间设置功能。
通常通过按下设置按钮(可能会标有"SET"或"MODE"等字样)来进入设置模式,然后使用加减按钮或者旋转按钮设置小时和分钟。
一旦设置完成,再次按下设置按钮退出设置模式,并开始正常工作。
3.调节亮度:电子时钟通常提供了亮度调节功能,以适应不同的环境需求。
通过按下亮度调节按钮(可能会标有"BRIGHT"或"B/L"等字样)来切换亮度档位,并选择最适合的亮度。
4.设置闹钟:大多数电子时钟还具备闹钟功能。
按下闹钟设置按钮(可能会标有"ALARM"或"A/L"等字样)进入闹钟设置模式,然后使用加减按钮或者旋转按钮设置闹钟的小时和分钟。
设置完成后,再次按下闹钟设置按钮退出设置模式,闹钟将会在设定的时间响起。
5.切换显示模式:一些电子时钟还提供了多种显示模式。
通过按下模式切换按钮(可能会标有"MODE"或"DISPLAY"等字样)来切换显示模式,可以切换显示时间、日期、温度等信息。
二、高级功能:1.温度显示:一些电子时钟具备温度检测功能,在屏幕上显示当前的室内温度。
通常使用室内温度感应器来检测温度,并在屏幕特定位置显示。
2.日历功能:一些电子时钟还具有日历功能,可以显示当前的日期,以及周几信息。
有些电子时钟还能显示农历日期和重要节日信息。
3.定时开关机:少数电子时钟还具备定时开关机功能。
用户可以事先设置好开关机的时间,电子时钟将在到达设定时间时自动开关机,非常方便。
12864液晶电子钟具有按键可调闹钟温度显示
12864液晶电子钟具有按键可调闹钟温度显示理解才是最主要程序已全部通过硬件测试,请放心使用。
(没有使用到DS1302)/某某某某某某某某某某某某12864时钟显示函数某某某某某某某某某某某某某//某某某某某某实现时间走动、按键控制、蜂鸣器闹铃、温度显示某某某某某某/#include<reg52.h>#include<tdio.h>#defineucharunignedchar#defineuintunignedint/某某某某某某某某某某某某某某某某某某某某功能:定义液晶12864控制端接口某某某某某某某某某某某某某某某某某某某某某/bitr=P2^6;//注意:rw控制端始终为低电平,直接在硬件上接低电平biten=P2^7;bitwd=P2^0;//温度传感器信号线/某某某某某某某某某某某某某某某某某某某某功能:定义蜂鸣器、按键接口某某某某某某某某某某某某某某某某某某某某某/bitbeet=P2^2;//蜂鸣器定义bitkey1=P1^0;//功能选择bitkey2=P1^1;//至加bitkey3=P1^2;//至减bitkey4=P1^3;//北京时间与闹钟时间画面切换/某某某某某某某某某某某某某某某某某某某某功能:定义数据初始值某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某/charhour=23,minute=59,econd=58,count=0;charhi=0,fen=0,miao=0,hm;intyear=2022;charmonth=12,day=30,mm=0,cc=7;uinttemp;floatf_temp;/某某某某某某某某某某某某某某某某某某某某功能:定义数组字符串某某某某某某某某某某某某某某某某某某某某某/ucharcodetable1[]={"幸福牌电子钟"};ucharcodetable2[]={"温馨提示:00.0℃"};/某某某某某某某某某某某某某某某某某某某某功能:延时函数某某某某某某某某某某某某某某某某某某某某某某某某某某某/voiddelay(uintz){uint某,y;for(某=z;某>0;某--)for(y=110;y>0;y--);}/某某某某某某某某某某某某某某某某某某某功能:蜂鸣器响应某某某某某某某某某某某某某某某某某某某某某某某/voidfengmingqi(){beet=0;delay(1);beet=1;delay(1);}理解才是最主要/某某某某某某某某某某某某某某某某某某某某功能:液晶12864读写数据某某某某某某某某某某某某某某某某某某/void某ieling_hu(ucharaa,ucharbb){if(aa==1){r=0;}if(aa==0){r=1;}P0=bb;delay(1);en=1;delay(1);en=0;delay(1);}/某某某某某某某某某某某某某某某某某某某某功能:液晶12864写入地址某某某某某某某某某某某某某某某某某某/void某ieludizhi(uchar某,uchary){witch(某){cae1:某ieling_hu(1,0某80+y);return;//return返回的意思cae2:某ieling_hu(1,0某90+y);return;cae3:某ieling_hu(1,0某88+y);return;cae4:某ieling_hu(1,0某98+y);return;}}/某某某某某某某某某某某某某某某某某某某某功能:液晶12864写入字符串某某某某某某某某某某某某某某某某某/void某iezifuchuan(uchar某dd){while(某dd!='\0'){某ieling_hu(0,某dd++);}}/某某某某某某某某某某某某某某某某某某某某功能:液晶12864清屏函数某某某某某某某某某某某某某某某某某某某某某/voidqingping(){某ieling_hu(1,0某01);//清屏某ieling_hu(1,0某01);//清屏某ieling_hu(1,0某01);//清屏delay(20);}/某某某某某某某某某某某某某某某某某某某某功能:液晶12864初始化指令操作某某某某某某某某某某某某某某某某某某/voidinit_12864(){某ieling_hu(1,0某30);//基本指令操作某ieling_hu(1,0某30);//基本指令操作某ieling_hu(1,0某0C);//0某0c:无光标,O某OF:光标反白显示某ieling_hu(1,0某01);//清屏理解才是最主要某ieling_hu(1,0某06);}/某某某某某某某某某某某某某某某某某某某某功能:液晶12864初始化字串显示某某某某某某某某某某某某某某某某某某/voidinit_zifu(){某ieludizhi(1,0);某iezifuchuan("欢迎使用");delay(1);某ieludizhi(2,0);某iezifuchuan("幸福牌电子钟");delay(1);某ieludizhi(3,0);某iezifuchuan("订购热线");delay(1);某ieludizhi(4,0);某iezifuchuan("Phone:0777-66914");delay(9534);qingping();某ieludizhi(1,0);某iezifuchuan(table1);delay(1);某ieludizhi(4,0);某iezifuchuan(table2);delay(1);某ieludizhi(3,5);某iezifuchuan("星期");某ieludizhi(2,2);某iezifuchuan("年月日");}/某某某某某某某某某某某某某某某某某某某功能:时间、年月日显示函数某某某某某某某某某某某某某某某某某某某某/voiddiplay(){某ieludizhi(3,0);//显示时分秒某ieling_hu(0,0某30+hour/10);某ieling_hu(0,0某30+hour%10);某ieling_hu(0,':');某ieling_hu(0,0某30+minute/10);某ieling_hu(0,0某30+minute%10);某ieling_hu(0,':');某ieling_hu(0,0某30+econd/10);某ieling_hu(0,0某30+econd%10);某ieludizhi(2,0);//显示年某ieling_hu(0,0某30+year/1000);某ieling_hu(0,0某30+year%1000/100);某ieling_hu(0,0某30+year%100/10);某ieling_hu(0,0某30+year%10);某ieludizhi(2,3);//显示月某ieling_hu(0,0某30+month/10);某ieling_hu(0,0某30+month%10);某ieludizhi(2,5);//显示日某ieling_hu(0,0某30+day/10);某ieling_hu(0,0某30+day%10);}/某某某某某某某某某某某某某某某某某某某功能:闹钟(时间、年月日)显示函数某某某某某某某某某某某某某某某某某某某某/voiddiplay1(){理解才是最主要某ieludizhi(3,0);//显示时分秒某ieling_hu(0,0某30+hi/10);某ieling_hu(0,0某30+hi%10);某ieling_hu(0,':');某ieling_hu(0,0某30+fen/10);某ieling_hu(0,0某30+fen%10);某ieling_hu(0,':');某ieling_hu(0,0某30+miao/10);某ieling_hu(0,0某30+miao%10);某ieludizhi(2,0);//显示年某ieling_hu(0,0某30+year/1000);某ieling_hu(0,0某30+year%1000/100);某ieling_hu(0,0某30+year%100/10);某ieling_hu(0,0某30+year%10);某ieludizhi(2,3);//显示月某ieling_hu(0,0某30+month/10);某ieling_hu(0,0某30+month%10);某ieludizhi(2,5);//显示日某ieling_hu(0,0某30+day/10);某ieling_hu(0,0某30+day%10);}/某某某某某某某某某某某某某某某某某某某功能:星期函数某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某/ void某ingqi(){witch(cc){cae1:某ieludizhi(3,7);某iezifuchuan("一");return;cae2:某ieludizhi(3,7);某iezifuchuan("二");return;cae3:某ieludizhi(3,7);某iezifuchuan("叁");return;cae4:某ieludizhi(3,7);某iezifuchuan("四");return;cae5:某ieludizhi(3,7);某iezifuchuan("五");return;cae6:某ieludizhi(3,7);某iezifuchuan("六");return;cae7:某ieludizhi(3,7);某iezifuchuan("日");return;}}/某某某某某某某某某某某某某某某某某某某功能:按键程序某某某某某某某某某某某某某某某某某某某/voidanjian(){if(key4==0){delay(1);hm=~hm;while(key4==0);}/某某某某某某某某某某某某某某某某某某某功能:key1按键选择功能某某某某某某某某某某某某某某某某某某某/if(key1==0){delay(1);mm++;if(hm!=0){if(mm>=4)mm=0;}理解才是最主要if(mm==1){某ieludizhi(3,3);某ieling_hu(0,0某5f);}if(mm==2){TR0=1;某ieludizhi(3,2);某ieling_hu(0,0某5f);}if(mm==3){某ieludizhi(3,0);某ieling_hu(0,0某5f);}if(mm==4){某ieludizhi(2,5);某ieling_hu(0,0某5f);}if(mm==5){某ieludizhi(2,3);某ieling_hu(0,0某5f);}if(mm==6){某ieludizhi(2,1);某ieling_hu(0,0某5f);}if(mm==7){某ieludizhi(3,7);某ieling_hu(0,0某5f);}if(mm==8){某ieludizhi(2,7);某ieling_hu(0,0某02);}if(mm>=9){某ieludizhi(2,7);某ieling_hu(0,0某20);mm=0;}//mm=0;跳出调整时间while(key1==0);}/某某某某某某某某某某某某某某某某某某某功能:key2按键加减功能某某某某某某某某某某某某某某某某某某某/if(mm==1&&key2==0)//秒加1{if(hm==0){TR0=0;delay(1);if(key2==0){econd++;if(econd>=60){e cond=0;}}}if(hm!=0){delay(1);if(key2==0){miao++;if(miao>=60){miao=0;}}} while(key2==0);}if(mm==1&&key3==0)//秒减1{if(hm==0){TR0=0;delay(1);if(key3==0){econd--;if(econd<=-1){econd=59;}}}if(hm!=0){delay(1);if(key3==0){miao--;if(miao<=-1){miao=59;}}}while(key3==0);}if(mm==2&&key2==0)//分加1{if(hm==0){delay(1);if(key2==0){minute++;if(minute>=60){minut e=0;}}}if(hm!=0){delay(1);if(key2==0){fen++;if(fen>=60){fen=0;}}}while(key2==0);}if(mm==2&&key3==0)//分减1{if(hm==0){delay(1);if(key3==0){minute--;if(minute<=-1){minute=59;}}}if(hm!=0){delay(1);if(key3==0){fen--;if(fen<=-1){fen=59;}}} while(key3==0);}理解才是最主要if(mm==3&&key2==0)//时加1{if(hm==0){delay(1);if(key2==0){hour++;if(hour>=24){hour=0;}}} if(hm!=0){delay(1);if(key2==0){hi++;if(hi>=24){hi=0;}}}while(key2==0);}if(mm==3&&key3==0)//时减1{if(hm==0){delay(1);if(key3==0){hour--;if(hour<=-1){hour=23;}}}if(hm!=0){delay(1);if(key3==0){hi--;if(hi<=-1){hi=23;}}} while(key3==0);}if(mm==4&&key2==0)//日加1{delay(1);if(key2==0){day++;if(day>=31){day=1;}}while(key2==0);}if(mm==4&&key3==0)//日减1{delay(1);if(key3==0){day--;if(day<=0){day=31;}}while(key3==0);}if(mm==5&&key2==0)//月加1 {delay(1);if(key2==0){month++;if(month>=13){month=1;}}理解才是最主要while(key2==0);}if(mm==5&&key3==0)//月减1{delay(1);if(key3==0){month--;if(month<=0){month=12;}}while(key3==0);}if(mm==6&&key2==0)//年加1{delay(1);if(key2==0){year++;}//不设置年限while(key2==0);}if(mm==6&&key3==0)//年减1{delay(1);if(key3==0){year--;}while(key3==0);}if(mm==7&&key2==0)//星期加1 {delay(1);if(key2==0){cc++;if(cc>=8){cc=1;}}while(key2==0);}if(mm==7&&key3==0)//星期减1 {delay(1);if(key3==0){cc--;if(cc==0){cc=7;}理解才是最主要}while(key3==0);}}/某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某功能:18B20所有函数某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某//某某某某某某某某某某某某某某某某某某某18B20复位,初始化函数某某某某某某某某某某某某某某某某某某某某某某某某某某/voiddreet(void){uinti;wd=0;i=103;while(i>0)i--;wd=1;i=4;while(i>0)i--;}/某某某某某某某某某某某某某某某某某某某18B20读1位函数某某某某某某某某某某某某某某某某某某某某某某某某某某/bittempreadbit(void){uinti;bitdat;wd=0;i++;//i++起延时作用wd=1;i++;i++;dat=wd;i=8;while(i>0)i--;return(dat);}/某某某某某某某某某某某某某某某某某某某18B20读1个字节函数某某某某某某某某某某某某某某某某某某某某某某某某某某/uchartempread(void){uchari,j,dat;dat=0;for(i=1;i<=8;i++){j=tempreadbit();dat=(j<<7)|(dat>>1);//读出的数据最低位在最前面,这样刚好一个字节在DAT里}return(dat);理解才是最主要}/某某某某某某某某某某某某某某某某某某某18B20写一个字节数据函数某某某某某某某某某某某某某某某某某某某某某某某某某某/voidtempwritebyte(uchardat){uinti;ucharj;bittetb;for(j=1;j<=8;j++){tetb=dat&0某01;dat=dat>>1;if(tetb)//写1{wd=0;i++;i++;wd=1;i=8;while(i>0)i--;}ele{wd=0;//写0i=8;while(i>0)i--;wd=1;i++;i++;}}}/某某某某某某某某某某某某某某某某某某某18B20开始获取温度并转换函数某某某某某某某某某某某某某某某某某某某某某某某某某某/voidtempchange(void){dreet();delay(1);tempwritebyte(0某cc);//写跳过读ROM指令tempwritebyte(0某44);//写温度转换指令}/某某某某某某某某某某某某某某某某某某某18B20读取寄存器中存储的温度数据函数某某某某某某某某某某某某某某某某某某某某某某某某某某/uintget_temp(){uchara,b;dreet();delay(1);理解才是最主要tempwritebyte(0某cc);tempwritebyte(0某be);a=tempread();//读低8位b=tempread();//读高8位temp=b;temp<<=8;//两个字节组合为1个字temp=temp|a;f_temp=temp某0.0625;//温度在寄存器中为12位分辨率位0.0625°temp=f_temp某10+0.5;//乘以10表示小数点后面只取1位,加0.5是四舍五入f_temp=f_temp+0.05;returntemp;//temp是整型}/某某某某某某某某某某某某某某某某某某某18B20发送数据函数某某某某某某某某某某某某某某某某某某某某某某某某某某/{do{SBUF=某parr++;//发送数据while(!TI);//等待发送完成标志为1TI=0;//标志清零}while(某parr);//保持循环直到字符为'\0'}/某某某某某某某某某某某某某某某某某某某某某某某某功能:主函数某某某某某某某某某某某某某某某某某某某某某某某某某某某某/ voidmain(){ucharbuff[4];TMOD=0某01;//设置T0为工作方式1EA=1;ET0=1;TR0=1;//开启T0中断TH0=-50000/256;TL0=-50000%256;init_12864();init_zifu();hm=0;while(1){if(count>5&&count<18){tempchange();//开始获取温度get_temp();//读取寄存温度printf(buff,"%f",f_temp);某ieludizhi(4,5);某ieling_hu(0,0某30+temp/100);某ieling_hu(0,0某30+temp%100/10);理解才是最主要某ieling_hu(0,0某2e);某ieling_hu(0,0某30+temp%100%10);}if(hm==0)diplay();//如果hm=0显示北京时间,否则显示闹钟时间elediplay1();anjian();//按键判断某ingqi();//显示星期if(minute==59&&econd==59){fengmingqi();}//整点报时if(hi==hour&&fen==minute&&miao>=econd&&miao<=econd+3){fengmi ngqi();}//闹钟}}/某某某某某某某某某某某某某某某某某某某某某某某某功能:中断函数某某某某某某某某某某某某某某某某某某某某某某某某某某/ {TH0=-50000/256;TL0=-50000%256;count++;if(count==20){count=0;econd++;if(econd==60){econd=0;minute++;if(minute==60) {minute=0;hour++;if(hour==24){hour=0;day++;cc++;if(cc==8)cc=1; if(day==31){day=1;month++;if(month==13)理解才是最主要{month=1;year++; }}} } } } }。
基于51单片机的多功能电子钟设计
基于51单片机的多功能电子钟设计1. 本文概述随着现代科技的发展,电子时钟已成为日常生活中不可或缺的一部分。
本文旨在介绍一种基于51单片机的多功能电子钟的设计与实现。
51单片机因其结构简单、成本低廉、易于编程等特点,在工业控制和教学实验中得到了广泛应用。
本文将重点阐述如何利用51单片机的这些特性来设计和实现一个具有基本时间显示、闹钟设定、温度显示等功能的电子钟。
本文的结构安排如下:将详细介绍51单片机的基本原理和特点,为后续的设计提供理论基础。
接着,将分析电子钟的功能需求,包括时间显示、闹钟设定、温度显示等,并基于这些需求进行系统设计。
将详细讨论电子钟的硬件设计,包括51单片机的选型、时钟电路、显示电路、温度传感器电路等。
软件设计部分将介绍如何通过编程实现电子钟的各项功能,包括时间管理、闹钟控制、温度读取等。
本文将通过实验验证所设计的电子钟的功能和性能,并对实验结果进行分析讨论。
通过本文的研究,旨在为电子钟的设计提供一种实用、经济、可靠的方法,同时也为51单片机的应用提供一个新的实践案例。
2. 51单片机概述51单片机,作为一种经典的微控制器,因其高性能、低功耗和易编程的特性而被广泛应用于工业控制、智能仪器和家用电器等领域。
它基于Intel 8051微处理器的架构,具备基本的算术逻辑单元(ALU)、程序计数器(PC)、累加器(ACC)和寄存器组等核心部件。
51单片机的核心是其8位CPU,能够处理8位数据和执行相应的指令集。
51单片机的内部结构主要包括中央处理单元(CPU)、存储器、定时器计数器、并行IO口、串行通信口等。
其存储器分为程序存储器(ROM)和数据存储器(RAM)。
程序存储器通常用于存放程序代码,而数据存储器则用于存放运行中的数据和临时变量。
51单片机还包含特殊功能寄存器(SFR),用于控制IO端口、定时器计数器和串行通信等。
51单片机的工作原理基于冯诺伊曼体系结构,即程序指令和数据存储在同一块存储器中,通过总线系统进行传输。
单片机用C51实现时间、星期、年月、温度在DS1602上显示的多功能数字钟
//***************************************************************************** //******用DS1602实现可调日期,时间,星期及温度实时监测的实用数字钟功能******* //*****************创建日期:2010-1-7***********************//功能介绍:用3*3按键在DS1602上显示第一排显示"2010-01-05 MON"第二排显示"23:59:00"//*******************功能介绍**************************************//********* K6:adjtime K3:hour K2:minute K1:OK*******************//********* K3:adjalarm K3:hh K1:OK**********************//********* K2:lookalarm K1:OK **********************//********* K1:alarm ON/OFF ***********************//********* K5:adjdate (K9:month)K8:day (K7:week)K4:OK*********//***********************************************************************#include "main.h"void lcd_data(unsigned char dat);//DS1602数据写入unsigned char kbscan();//按键扫描void ds1602();//DS1602初始化void lcd_com(unsigned char com);//DS1602命令写入void timer0();//用于延时的定时中断初始2mSvoid disp();//主程序的显示调用void display();//正常的显示void display_alarm();//查看闹铃void alarm();//闹铃void process();//按键的处理unsigned char hands();//与18B20通信握手void write_temp_date(unsigned char dat);//写温度数据18B20unsigned char read_temp_date();//读温度数据18B20void tmpdelay(unsigned char tmp);//ds18b20对时序要求严格unsigned char result();//计算月份的天数//*******************************//DS1602命令的写入//*******************************void lcd_com(unsigned char com){rs=0;rw=0;P0=com;dema=1;while(dema!=0);en=1;dema=1;while(dema!=0);en=0;}//*********************//DS1602数据的写入//*********************void lcd_data(unsigned char dat){rs=1;rw=0;P0=dat;dema=1;while(dema!=0);en=1;dema=1;while(dema!=0);en=0;}//***************************//3*3按键的扫描//***************************unsigned char kbscan(){unsigned char sccode,recode,tenp;P1=0XF8;tenp=P1;if(tenp!=0xf8){demb=3;while(demb!=0);if(tenp==P1){sccode=0xfe;while((sccode&0xf7)!=0){P1=sccode;if((P1&0xf8)!=0xf8){recode=P1&0Xf8;sccode=sccode&0xc7;return(recode|sccode);}elsesccode=sccode<<1|0x01;}}}return(0);}//**************************//*********每月的天数计算***//**************************unsigned char result(){switch(month){case 1:return 31;break;case 3:return 31;break;case 5:return 31;break;case 7:return 31;break;case 8:return 31;break;case 10:return 31;break;case 12:return 31;break;case 4:return 30;break;case 6:return 30;break;case 9:return 30;break;case 11:return 30;break;case 2:if(year%4==0){return 29;//闰年29天}else{return 28;//平年28天}}}//**************************//*********DS1602的初始化***//**************************void ds1602(){lcd_com(0x38);//16*2显示5*7矩阵dema=1;while(dema!=0);lcd_com(0x0c);//显示开,无光标无闪烁dema=1;while(dema!=0);lcd_com(0x06);//指针+1,整屏不动dema=1;while(dema!=0);lcd_com(0x01);//清屏}//*******************************//定时中断延时的初始化以及中断***//*******************************void timer0(){TMOD=0X01;TH0=0Xf8;TL0=0X30; //2mS初值12M晶振TR0=1;ET0=1;EA=1;}TIME0() interrupt 1{TR0=0;TH0=0Xf8;TL0=0X30; //2mS初值TR0=1;count++;if(count>=500)//1s{count=0;second++;if(second>=60)//1m{second=0;minute++;if(minute>=60)//1h{minute=0;hour++;if(hour>=24)//1day{hour=0;flag_week++;//星期调整if(flag_week>8){flag_week=1;}day++;if(day>(days=result()))//1month{day=1;month++;if(month>12)//1year{month=1;year++;if(year>100){year=0;}}}}}}}if(dema)dema--;//写命令的延时if(demb)demb--;//按键的延时//************闹铃**********if(demc){demc--;}if(demd){demd--;}flag++;if(flag>=200){flag=0;temp=1;deme++;if(deme>=2){demc=0;temp=0;}}}//**************************//正常日期时间显示//**************************void display(){a=hour/10;b=hour%10;c=minute/10;d=minute%10;e=second/10;f=second%10;m3=year/10;m4=year%10;m6=month/10;m7=month%10;m9=day/10;m10=day%10;//*****第一排显示**********lcd_com(0x81);//第一排从第2个位置开始显示lcd_data(0x32);lcd_com(0x82);lcd_data(0x30);lcd_com(0x83);lcd_data(0x30+m3);lcd_com(0x84);lcd_data(0x30+m4);lcd_com(0x85);lcd_data(0x2d);//"-"lcd_com(0x86);lcd_data(0x30+m6);lcd_com(0x87);lcd_data(0x30+m7);lcd_com(0x88);lcd_data(0x2d);//"-"lcd_com(0x89);lcd_data(0x30+m9);lcd_com(0x8a);lcd_data(0x30+m10);if(flag_week==1)//周1{lcd_com(0x8c);for(n=0;n<3;n++){lcd_data(week1[n]);}}else if(flag_week==2)//周2 {lcd_com(0x8c);for(n=0;n<3;n++){lcd_data(week2[n]);}}else if(flag_week==3)//周3 {lcd_com(0x8c);for(n=0;n<3;n++){lcd_data(week3[n]);}}else if(flag_week==4)//周4 {lcd_com(0x8c);for(n=0;n<3;n++){lcd_data(week4[n]);}}else if(flag_week==5)//周5 {lcd_com(0x8c);for(n=0;n<3;n++){lcd_data(week5[n]);}}else if(flag_week==6)//周6 {lcd_com(0x8c);for(n=0;n<3;n++){lcd_data(week6[n]);}}else if(flag_week==7)//周7{lcd_com(0x8c);for(n=0;n<3;n++){lcd_data(week7[n]);}}//*****第二排显示***********lcd_com(0xc1);//第二排从第3个位置开始显示lcd_data(0x30+a);lcd_com(0xc2);lcd_data(0x30+b);lcd_com(0xc3);lcd_data(0x3a);//":"lcd_com(0xc4);lcd_data(0x30+c);lcd_com(0xc5);lcd_data(0x30+d);lcd_com(0xc6);lcd_data(0x3a);//":"lcd_com(0xc7);lcd_data(0x30+e);lcd_com(0xc8);lcd_data(0x30+f);lcd_com(0xca);lcd_data(0x47);//"G"lcd_com(0xcb);lcd_data(0x47);//"G"lcd_com(0xcd);all_date=all_date%100;lcd_data(match[all_date/10]);//十位lcd_com(0xce);lcd_data(match[all_date%10]);//个位lcd_com(0xcf);lcd_data('C');//"temperapure" "C"}//********************************************** //*************************看闹钟*************** void display_alarm(){a=hh/10;b=hh%10;c=min/10;d=min%10;e=sec/10;f=sec%10;m3=year/10;m4=year%10;m6=month/10;m7=month%10;m9=day/10;m10=day%10;//*****第一排显示**********lcd_com(0x81);//第一排从第2个位置开始显示lcd_data(0x32);lcd_com(0x82);lcd_data(0x30);lcd_com(0x83);lcd_data(0x30+m3);lcd_com(0x84);lcd_data(0x30+m4);lcd_com(0x85);lcd_data(0x2d);//"-"lcd_com(0x86);lcd_data(0x30+m6);lcd_com(0x87);lcd_data(0x30+m7);lcd_com(0x88);lcd_data(0x2d);//"-"lcd_com(0x89);lcd_data(0x30+m9);lcd_com(0x8a);lcd_data(0x30+m10);if(flag_week==1)//周1{lcd_com(0x8c);for(n=0;n<3;n++){lcd_data(week1[n]);}}else if(flag_week==2)//周2{lcd_com(0x8c);for(n=0;n<3;n++){lcd_data(week2[n]);}}else if(flag_week==3)//周3 {lcd_com(0x8c);for(n=0;n<3;n++){lcd_data(week3[n]);}}else if(flag_week==4)//周4 {lcd_com(0x8c);for(n=0;n<3;n++){lcd_data(week4[n]);}}else if(flag_week==5)//周5 {lcd_com(0x8c);for(n=0;n<3;n++){lcd_data(week5[n]);}}else if(flag_week==6)//周6 {lcd_com(0x8c);for(n=0;n<3;n++){lcd_data(week6[n]);}}else if(flag_week==7)//周7 {lcd_com(0x8c);for(n=0;n<3;n++){lcd_data(week7[n]);}}//****第二排**************lcd_com(0xc1);//第二排从第3个位置开始显示lcd_data(0x30+a);lcd_com(0xc2);lcd_data(0x30+b);lcd_com(0xc3);lcd_data(0x3a);//":"lcd_com(0xc4);lcd_data(0x30+c);lcd_com(0xc5);lcd_data(0x30+d);lcd_com(0xc6);lcd_data(0x3a);//":"lcd_com(0xc7);lcd_data(0x30+e);lcd_com(0xc8);lcd_data(0x30+f);lcd_com(0xcd);all_date=all_date%100;lcd_data(match[all_date/10]);//十位lcd_com(0xce);lcd_data(match[all_date%10]);//个位lcd_com(0xcf);lcd_data('C');//"temperapure" "C"}//**********************//闹钟开的显示**********//**********************void display_onalarm(){a=hour/10;b=hour%10;c=minute/10;d=minute%10;e=second/10;f=second%10;m3=year/10;m4=year%10;m6=month/10;m7=month%10;m9=day/10;m10=day%10;//*****第一排显示**********lcd_com(0x81);//第一排从第2个位置开始显示lcd_data(0x32);lcd_com(0x82);lcd_data(0x30);lcd_com(0x83);lcd_data(0x30+m3);lcd_com(0x84);lcd_data(0x30+m4);lcd_com(0x85);lcd_data(0x2d);//"-"lcd_com(0x86);lcd_data(0x30+m6);lcd_com(0x87);lcd_data(0x30+m7);lcd_com(0x88);lcd_data(0x2d);//"-"lcd_com(0x89);lcd_data(0x30+m9);lcd_com(0x8a);lcd_data(0x30+m10);if(flag_week==1)//周1{lcd_com(0x8c);for(n=0;n<3;n++){lcd_data(week1[n]);}}else if(flag_week==2)//周2{lcd_com(0x8c);for(n=0;n<3;n++){lcd_data(week2[n]);}}else if(flag_week==3)//周3{lcd_com(0x8c);for(n=0;n<3;n++){lcd_data(week3[n]);}}else if(flag_week==4)//周4{lcd_com(0x8c);for(n=0;n<3;n++){lcd_data(week4[n]);}}else if(flag_week==5)//周5{lcd_com(0x8c);for(n=0;n<3;n++){lcd_data(week5[n]);}}else if(flag_week==6)//周6{lcd_com(0x8c);for(n=0;n<3;n++){lcd_data(week6[n]);}}else if(flag_week==7)//周7{lcd_com(0x8c);for(n=0;n<3;n++){lcd_data(week7[n]);}}//****第二排**************lcd_com(0xc1);//第二排从第3个位置开始显示lcd_data(0x30+a);lcd_com(0xc2);lcd_data(0x30+b);lcd_com(0xc3);lcd_data(0x3a);//":"lcd_com(0xc4);lcd_data(0x30+c);lcd_com(0xc5);lcd_data(0x30+d);lcd_com(0xc6);lcd_data(0x3a);//":"lcd_com(0xc7);lcd_data(0x30+e);lcd_com(0xc8);lcd_data(0x30+f);lcd_com(0xca);lcd_data(0x4B);//"K"lcd_com(0xcb);lcd_data(0x4B);//"K"lcd_com(0xcd);all_date=all_date%100;lcd_data(match[all_date/10]);//十位lcd_com(0xce);lcd_data(match[all_date%10]);//个位lcd_com(0xcf);lcd_data('C');//"temperapure" "C" }//*****************************//*******按键的处理************//***************************** void process(){if(key!=0){if(key==K6){display();while((key=kbscan())!=K1){display();if((key=kbscan())==K3){hour++;if(hour>=24){hour=0;}}if((key=kbscan())==K2){minute++;if(minute>=60){minute=0;}}}}else if(key==K2)//看闹铃{while(((key=kbscan())!=K1)){display_alarm();}}else if(key==K3)//调闹铃{display_alarm();while((key=kbscan())!=K1){display_alarm();if((key=kbscan())==K3){hh++;if(hh>=24){hh=0;}}if((key=kbscan())==K2){min++;if(min>=60){min=0;}}}}else if(key==K1)//开/关闹钟{flag_alarm=~flag_alarm; }else if(key==K5)//调日期星期{display();while((key=kbscan())!=K4)//ok{display();// if((key=kbscan())==K9)//month // {// month++;// if(month>12)// {// month=1;// }// }if((key=kbscan())==K8)//day{day++;flag_week++;if(flag_week>7){flag_week=1;}if(day>(days=result())){day=1;month++;if(month>12){month=1;year++;if(year>100){year=0;}}}// if((key=kbscan())==K7)//week // {// flag_week++;// if(flag_week>8)// {// flag_week=1;// }// }}}}}}//*************************************//*****************闹铃****************//*************************************void alarm(){if(flag_offalarm==1){if(flag_alarm==1){if(temp){TR0=0;TH0=0Xf8;TL0=0X30;TR0=1; //重装初值2mSdemd=2;while(demd!=0);//P37=~P37;}else{TR0=0;TH0=0XF8;TL0=0X30;TR0=1; //重装初值demc=1;while(demc!=0);//P37=~P37;}}else{P37=1;flag_offalarm=0;}}elseif((flag_alarm==1)&&(minute==min)&&(hour==hh)) {flag_offalarm=1;if(temp){TR0=0;TH0=0Xf8;TL0=0X30;TR0=1; //重装初值2mSdemd=2;while(demd!=0);//P37=~P37;}else{TR0=0;TH0=0XF8;TL0=0X30;TR0=1; //重装初值demc=1;while(demc!=0);//P37=~P37;}}}//**********************************//***********DS18B20时序控制*********** //**********************************void tmpdelay(unsigned char tmp)//注意!!{while(tmp>0){tmp--;}}//*tmdelay(1) ;//16.28us//增加一个就加6.5us // tmdelay(2) ;//22.78us// tmdelay(3) ;//29.30us// tmdelay(4) ;//35.81us// tmdelay(70) ;//465.49// tmdelay(74) ;//491.54// tmdelay(80) ;//530.60// tmdelay(115) ;//150us *//*例如16.28+(?*6.5)=490*///********************************//**************************************//**********DS18B20读取温度***********//*************************************unsigned char read_temp_date()//读温度数据18B20{unsigned char i;unsigned int y=0;value=0;for(i=8;i>0;i--){value>>=1;DQ=0;// tmpdelay(1);//>15usy++;y++;y++;y++;//1-15usDQ=1;// tmpdelay(1);//读温度对时序要求严格不能用tmpdelay(1)代替y++;if(DQ==1){value=value|0x80;}else{}tmpdelay(16);//120US}return (value);}//**************************************//**********DS18B20写指令温度***********//*************************************void write_temp_date(unsigned char dat)//写温度指令18B20{unsigned char i;for(i=8;i>0;i--){DQ=0;tmpdelay(1);//>15usif((dat&0x01)==1){DQ=1;tmpdelay(16);//120us}else{DQ=0;tmpdelay(16);//120usDQ=1;tmpdelay(1);//>15us}dat=dat>>1;}DQ=1;tmpdelay(1);//>15us}//**************************************//**********DS18B20复位*****************//*************************************unsigned char hands()//握手复位{temp=0;// noanswer:do{DQ=0;tmpdelay(72);//490uSDQ=1;tmpdelay(11);/*>60uS 注意:此处把函数名改为hans()后,这里两处的tmpdelay()括号内最好改成74和12*/}while(DQ!=0);temp=1;tmpdelay(35);//>240usDQ=1;return(temp);//此处可以采用两种方式表达,1用直到...才;2用goto转向// if(DQ==1)// {// goto noanswer;// }// else if(DQ==0)// {// temp=1;// tmpdelay(40);//>250uS// DQ=1;// }// return(temp);}void disp(){if(flag_alarm){display_onalarm();}else{display();}}//***********************//*******主程序**********//***********************main(void){timer0();//中断延时初始化ds1602();//初始化while(1){key=kbscan();//调用按键process();//按键处理alarm();//闹零if(hands()==1){write_temp_date(0xcc);//跳过write_temp_date(0x44);//温度转换tmpdelay(75);//500us// dema=250;// while(dema!=0);//500ms}if(hands()==1){write_temp_date(0xcc);//跳过write_temp_date(0xbe);//读取温度数据tmpdelay(75);//500us// dema=250;// while(dema!=0);//500ms}date_l=read_temp_date();//读取低位温度date_h=read_temp_date();//读取高位温度all_date=((date_h<<4)|(date_l>>4));// 整数位// dot_date=date_l&0x0f;// dot_date=dot_date*625;//小数位// all_date=all_date+dot_date/10000;disp();//显示}}。
带温度显示可调闹钟万年历论文
带温度显示可调闹钟万年历摘要本设计由数据显示模块、温度采集模块、时间处理模块和调整设置模块四个模块组成。
系统最大的特点是体现了较强的人机交互和独立的模块化程序设计。
温度采集选用DS18B20芯片,数据显示采用1602A液晶显示模块,在第一行显示年月日、星期以及当前的状态,第二行显示温度和时间,合理的利用液晶显示区域。
51主芯片利用定时中断产生时间,控制着液晶的显示更新、温度的实时变化以及按键的读取处理,而对于闹钟,实际上就是时间里的一个嵌套程序。
时间和闹钟的值由按键调整设置,采用通用的二十四小时制。
该电路采用51单片机作为核心,功耗小,能在3V的低压工作,电压可选用3~5V电压供电。
综上所述此万年历具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。
关键字:万年历;温度计;闹钟;液晶显示一、方案设计与论证根据要求,系统分为四个模块进行方案设计:1.数据显示模块方案一:数据采集处理后采用六位数码管动态扫描,循环依次显示年月日(如09.01.01)、当前时间(如12.00.00)和温度星期(如+23.5_1),数码管用74LS164芯片驱动,硬件电路复杂且显示略显混乱,在软件方面,扫描部分由于要显示的数据太多而显的不清晰。
方案二:考虑到要显示的内容颇多,故运用1602A显示实时数据,第一行显示状态以及年月日星期(如S 2009—01—01 THU),第二行显示温度和实时时间(22.0C12:00:00),在处理按键设置时,第二行暂时屏蔽温度的显示而显示设置的内容。
这样虽然在程序方面多了1602A的一些初始化和读写子函数的定义,但程序的模块化却更加的清楚。
而且采用1602A LCM的液晶显示模块后不仅满足了大量数据的显示,,系统的硬件电路变的十分简单清晰明朗。
本设计采用了这种方案。
2 温度采集模块采用常用的温度采集芯片DS18B20单线数字温度传感器进行温度的采集。
具有温度显示的电子实时时钟万年日历系统的设计与制作
毕业设计(论文)《具有温度显示的电子实时时钟/万年日历系统的设计与制作》专业(系)电气工程系铁道通讯信号方向班级铁道通讯091学生姓名陈志军指导老师赵巧妮完成日期2011.11.22摘要本设计以数字集成电路技术为基础,单片机技术为核心。
本文详细的介绍基于AT89S51单片机带有温度和闹钟的万年历控制系统。
利用单片机定时计数器提供秒信号,DS18B20数字式温度传感器进行温度数据传输,经软件处理,在动态扫描后,利用8个共阳数码管交替显示年月日、时分秒、环境温度值。
为了更好的调节和设置,设计了四个按键快速进行时间和闹钟的精准调整。
关键字:单片机;万年历;温度;闹钟;DS18B20AbstractThis design with digital integrated circuit technology as the foundation, microcontroller technology as the core. This paper is introduced in detail based on AT89S51 with temperature and the alarm clock calendar control system. Using single chip computer timing counter offer seconds signal, the temperature sensor DS18B20 digital temperature data transmission, the software processing, in dynamic scan, a total of 8 Yang digital tube alternate show dates, meticulous, environment when the temperature. In order to better regulate and settings, design the four keys of rapid time and alarm the accuracy of adjustment.Key words:Microcomputer; Calendar;Temperature; Alarm clock; DS18B20; Dynamic scanning目录摘要 (I)第1章引言 (1)1.1研究背景 (1)1.2论文研究目标和意义 (1)1.3论文章节安排 (1)第2章任务与要求 (2)2.1课题概述 (2)2.1.1 设计内容 (2)2.1.2 要求 (2)第3章方案论证与设计 (3)3.1 总体设计分析 (3)3.2 方案的选择与设计 (3)3.2.1 显示模块选择方案和论证: (3)3.2.2 时钟芯片的选择方案和论证: (3)3.2.3 温度传感器的选择方案与论证: (4)3.3 方案确定 (4)第4章硬件电路设计 (5)4.1 硬件电路设计框图 (5)4.1.1 系统硬件概述 (5)4.1.2 单片机主控制模块的设计 (5)4.1.3 振荡电路 (6)4.1.4 复位电路 (6)4.1.5 温度采集模块设计 (6)4.1.6 显示模块的设计 (7)4.1.7 蜂鸣器电路 (8)4.1.8 按键电路 (8)第5章系统的软件设计 (10)5.1编程环境及语言: (10)5.2程序流程框图 (10)第6章电路调试 (12)6.1调试的设备 (13)6.2调试步骤 (13)6.2.1 硬件调试 (13)6.2.2 软件调试 (13)第7章使用说明 (17)7.1 使用方法 (17)7.1.1 系统面板介绍 (17)7.1.2 调整方法 (17)7.1.3 调整框图 (18)7.1.3 注意事项 (19)7.2故障分析 (19)7.2.1 LED数码管显示不全、模糊、多出相对较暗的一位 (19)7.2.2 调整时按键过于灵敏 (19)心得体会 (20)参考文献 (21)附件 (22)附件一:总原理图 (22)附件二:PCB版图 (23)附件三:元件清单 (24)附录四:程序代码 (26)引言1.1研究背景当今社会逐渐步入信息化时代,快节奏、高效率成为当今时代的主题。
基于单片机的带温度显示的数字钟设计(c51语言编程)【开题报告】
开题报告电气工程及其自动化基于单片机的带温度显示的数字钟设计(c51语言编程)一、课题研究意义及现状1980年因特尔公司推出了MCS-51单片机,近30年来,其衍生系列不断出现,从Atmel加入FLASH ROM,到philips加入各种外设,再到后来的Cygnal推出C8051F,使得以8051为核心的单片机在各个发展阶段的低端产品应用中始终扮演着一个重要的角色,其地位不断升高,资源越来越丰富,历经30年仍在生机勃勃地发展,甚至在SoC时代仍占有重要的一席之地。
单片机具有体积小、功能强、低功耗、可靠性高、价格低廉等一系列优点,不仅已成为工业测控领域智能仪表、机电一体化、实时控制、国防工业普遍采用的智能化控制工具,而且已渗入到人们工作和和生活的各个角落,有力地推动了各行业的技术改造和产品的更新换代,应用前景广阔。
C语言已经成为当前举世公认的高效简洁而又贴近硬件的编程语言之一。
将C语言向单片机8051上移植十余20世纪80年代的中后期,经过几十年的努力,C语言已成为专业化单片机上的实用高级语言。
C语言是一种编译型程序设计语言,它兼顾了多种高级语言的特点,并具备汇编语言的功能。
此外,C语言程序具有完善的模块程序结构,从而为软件开发中采用模块化程序设计方法提供了有力的保障。
与汇编语言相比,C51在功能、结构、可读性、可维护性上有明显的优势,因而易学易用。
另外C51可以缩短开发周期,降低成本,可靠性,可移植性好。
因此,使用C语言进行程序设计已成为软件开发的一个主流,用C语言进行8051单片机程序设计是单片机开发与应用的必然趋势。
随着人们生活水平的提高,对物质需求也越来越高,人们已不再满足于钟表原先简单的报时功能,希望出现一些新的功能,诸如环境温度显示、日历的显示、重要日期倒计时、显示跑表功能等,用以带来更大的方便。
而所有这些,又都是以数字化的电子时钟为基础的,不仅应用了数字电路技术,而且还加入了需要模拟电路技术和单片机技术。
带温度显示的电子闹钟设计方案
5.1.2 显示电路调试..................................................................................20
5.1.3 DS1302电路调试............................................................................20
5.2.1 环境温度采集子程序调试..............................................................21
5.2.2 键盘子程序调试..............................................................................21
时间对人们来说总是那么宝贵,工作的忙碌性和繁杂容易使人忘记当前的时间。平时我们要求上班准时,约会或召开会议必然要提及时间;火车要准点到达,航班要准点起飞;工业生产中,很多环节都需要用时间来确定工序替换时刻。所以说能随时准确的知道时间并利用时间,是我们生活和工作中必不可少的。
想知道时间,手表当然是一个很好的选择,但是,在忙碌当中,我们还需要一个“助理” 及时的给我们提醒时间。所以,计时器最好能够拥有一个定时系统,随时提醒容易忘记时间的人。 最早能够定时、报时的时钟属于机械式钟表,但这种时钟受到机械结构、动力和体积的限制,在功能、性能以及造价上都没办法与电子时钟相比。
基于STC89C52单片机时钟的设计与实现
基于STC89C52单片机时钟的设计与实现1. 本文概述本文主要介绍了基于STC89C52单片机和DS1302时钟芯片的电子时钟设计与实现。
该电子时钟系统具有年月日等基本时间显示功能,并集成了秒表计时处理、闹钟定时、蜂鸣器和温度显示等附加功能。
系统采用LCD1602作为液晶显示器件,通过单片机对时钟和温度等数据进行处理后传输至LCD进行显示。
用户可以通过按键对时间进行调节,同时,单片机还通过扩展外围接口实现了温度采集等功能。
本文的目标是提供一个功能丰富、易于操作的电子时钟系统,为学习和应用单片机技术提供一个实用的案例。
2. 系统设计要求在设计基于STC89C52单片机的时钟系统时,我们需要考虑以下几个关键的设计要求:时钟系统必须具备基本的时间显示功能,能够以小时、分钟和秒为单位准确显示当前时间。
系统还应支持设置闹钟功能,允许用户设定特定的时间点进行提醒。
系统需要保证长时间稳定运行,具备良好的抗干扰能力,确保在各种环境下都能准确计时。
还应具备一定的容错能力,即使在操作失误或外部干扰的情况下,也能保证系统的正常运行。
用户界面应简洁直观,便于用户快速理解和操作。
时钟的显示部分应清晰可见,即使在光线较暗的环境下也能保持良好的可视性。
同时,设置和调整时间的操作应简单易懂,方便用户进行日常使用。
在设计时钟系统时,应考虑到未来可能的功能扩展,如温度显示、日期显示等。
系统的设计应具有一定的灵活性和扩展性,以便在未来可以轻松添加新的功能模块。
鉴于时钟系统可能需要长时间运行,能耗是一个重要的考虑因素。
设计时应选择低功耗的元件,并优化电源管理策略,以延长电池寿命或减少能源消耗。
在满足上述所有要求的同时,还需要控制成本,确保产品的市场竞争力。
这可能涉及到对单片机的编程优化、选择性价比高的外围元件等措施。
通过满足上述设计要求,我们可以确保开发出一个功能完善、稳定可靠、用户友好、易于扩展、节能环保且成本效益高的STC89C52单片机时钟系统。
电子时钟带温度显示
摘要本文介绍了一款基于AT89S51单片机控制的带有温度显示的电子钟的设计,通过多功能数字钟带有温度的设计思路,详细叙述了系统硬件、软件的具体实现过程。
论文重点阐述了数字钟硬件中MCU模块、温度模块、时钟模块、显示模块和相关控制模块等的模块化设计与制作;软件同样采用模块化的设计,包括中断模块、温度模块、时间调整模块设计,并采用简单流通性强的C语言编写实现。
本设计实现了时间的修改功能和年、月、日和星期的显示和温度显示功能。
关键词:单片机; C语言编程; DS1302时钟芯片;DS18B20;温度传感器前言单片微型计算机是随着超大规模集成电路技术的发展而诞生的,由于它具有体积小、功能强、性价比高等特点,所以广泛应用于电子仪表、家用电器、节能装置、军事装置、机器人、工业控制等诸多领域,使产品小型化、智能化,既提高了产品的功能和质量,又降低了成本,简化了设计。
本文主要介绍由单片机控制的带有温度显示的电子钟的设计。
随着人们生活水平的日益提高,人们对生活的要求越来越高,原有的事物已经不能满足人们的生活需求了,一些带有新功能的事物已经在慢慢的取代旧事物。
就像电子钟一样,人们用电子钟不仅仅只是看时间了,人们还需要看温度了。
越来越多的新功能更贴近人们的生活了,所以也越来越受人们所喜欢。
带有温度的的电子钟可以使人们随时都可以了解温度的变化。
1.系统实现功能、设计方案论证及芯片介绍1.1. 设计要求本设计准备实现的功能:(1) 万年历(2) 三键调时(设置键,+键,-键)(3) 可每次增减一进行时间调节(4) 按键蜂鸣器提示(5) 温度显示2. 方案论证与设计2.1. 设计方案论证方案一:用主芯片为AT89C51的单片机控制实现,使用单片机内部的定时计数器实现时间的设定,使用按键进行时间的调整和定时,按键有蜂鸣器提示,温度传感器使用DALLAS公司生产的单总线式数字温度传感器,它具有微型化、低功耗、高性能、抗干扰能力强、易配处理器等优点,特别适用于构成多点温度测控系统,可直接将温度转化成串行数字信号(提供9位二进制数字)给单片机处理,且在同一总线上可以挂接多个传感器芯片。
电子时钟温度计使用说明书
电子时钟温度计DIY套件使用说明书
作者:张卫兵 时间:2010.1.27
本套DIY套件专为业余电子爱好者制作,DIY简单实用,成本低。
产品如图所示:
上图为空板。
焊好的成品板。
功能说明:
本套件程序已经烧好,单片机数字时钟温度计DIY,掉电切换到备用电池,无需重新设置时间,显示完整的日历和温度
时间:24小时制显示。
秒:计时由小数点闪烁 精确定时一秒散动一次
温度:显示精确到0.1度
日历:月份和日期显示,年份,月份自动控制
功能按键:K2为设置动能键,可以设定时间,日期,星期等 K3和K4分别为加一和减一功能键。
带有温度显示和液晶显示器的实时时钟设计
sbit T_CLK = P1^6; /*实时时钟时钟线引脚*/
sbit T_IO = P3^5; /*实时时钟数据线引脚*/
sbit T_RST = P1^7; /*实时时钟复位线引脚*/
sbit E=P2^7;//1602使能引脚
sbit RW=P2^6;//1602读写引脚
3、proteus是一个非常好用的仿真软件,其具有强大的电路原理图绘制功能,且可以实现模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统仿真、键盘、LCD系统仿真等多种功能;和keil联合使用时可以检测所编写的程序的正确与否。将keil和proteus联合起来使用是实现电子设计制作的初步阶段,可避免在实际的硬件操作中因为电路原理图或向单片机烧录的程序有误而造成的难以修改的为题。
3、掌握了Proteus的使用方法,从实际操作中认识到Proteus在仿真方面的优越性,激发了自己学习Proteus的兴趣;
4、因为自己要修改程序,所以单单花费在程序分析的时间就很多,为了更好的理解程序,我把每句主要程序的后面都注释了该语句的意思,详情可以见程序清单,发现注释语义的工作量也是非常大的。写实验报告时,每个模块的流程图都是自己画的,用WORD文档画图真的很麻烦,而且不是很美观。因为时间比较仓促,流程图写的条理性不够,不过相信以后多多练习,就可以做得更好。
2、按键处理模块
2.1按键连线图
从左到右依次是:进位键,数字加,数字减,退出
Mode模式键
2.2按键扫描子程序流程图:
否否否否
是是是是是
否
否
是是
2.3加减键处理子程序流程图
否
是
否
是
电子时钟使用说明
单片机电子时钟使用说明
如图所示从左至右,按键功能分别是:【调时】,【加】,【减】
主要功能包括:时间,闹钟,整点报时,温度
查看方法:
1、查看时间:
打开电源开关,即可看到时间显示
2、查看闹钟:
时间正常运行状态下,按一次【加】键,即可看到此时闹钟的时间,默认为7:00,再按一次【加】键,切换到时间显示。
3、查看温度:
时间正常运行状态下,按一次【减】键,即可看到此时的温度值,温度是实时变化的,再按一次【减】键,切换到时间显示。
调整方法:
1、调时间:
在时间运行状态下,按下【调时】键,此时,时间暂停,同时小时位闪烁显示,此时再按【加】,【减】键可以对小时进行加减调整,再按一下【调时】键,分钟位闪烁显示,
此时再按【加】,【减】键可以对分钟进行加减调整。
2、调闹钟:
在时间运行状态下,按下【加】键,此时,显示切换到闹钟时间,再按一次【调时】键,闹钟小时位闪烁显示,此时按【加】,【减】键可对闹钟小时进行加减调整,再按一次【调时】键,此时闹钟分钟位闪烁显示,此时按【加】,【减】键可对闹钟分钟位时行加减调整。
功能开启与关闭
1、闹钟开启与关闭
按下【调时】+【加】键,可听到蜂鸣器提示音,当蜂鸣器提示一声表示闹钟开启,两声表示闹钟关闭。
注:需要先按下【调时】键,再同时按下【减】键。
2、整点报时开启与关闭
按下【调时】+【减】键,可听到蜂鸣器提示音,当蜂鸣器提示一声表示整点报时开启,两声表示闹钟关闭。
注:需要先按下【调时】键,再同时按下【减】键。
(注:默认闹钟及整点报时都为关闭,需要开启时请按以上方法操作!!!)。
基于51单片机的多功能电子时钟设计
设计研发2021.07基于51单片机的多功能电子时钟设计杨洁,叶晶晶(黔南民族师范学院物理与电子科学学院,贵州都匀,558000 )摘要:单片机体积小、重量轻、抗干扰能力强、环境要求不高、价格低廉、可靠性高、灵活性好、深受初学者喜欢。
以STC90C58为核心控制芯片,DS1302为时钟芯片,DS18B20釆集温度,完成多功能电子时钟的设计。
该设计能够准确显示年、月、日、星期、时、分、秒及温度,通过按键可以调整年、月、日、星期、时、分、秒、12/24小时转换、整点提示以及闹钟,还可显示阴阳历。
关键词:电子时钟;单片机;阴阳历转换;DS1302 ; DS18B20Design of Multi-function Clock Based on 51 MCUYang Jie, Ye Jingjing(College of physics and electronic science, Qiannan Normal University for N&tionalities, DuyunGuizhou, 558000)Abstract : MCU is small in size, light in weight, strong in anti-interference ability, low in environmentai requirements, low in price, high in reliability, good in flexibility, and is popular among beginners. Stc90c58 as the core control chip, DS1302 as the clock chip, DS18B20 temperature acquisition, complete the design of multi —functional electronic clock. The design can accurately display the year, month, day, week, hour, minute, second and temperatore. Through the button, you can adjust the year, month, day, week, hour, minute, second, 12/24-hour conversion, whole point prompt and alarm clock, and display the lunar calendar.Keywords : Electronic clock ; MCU ; The lunar conversion ; DS 1302 ; DS18B200引言目前单片机的使用已经十分广泛,本次设计的多功能电 子钟能完成年、月、日、星期、时、分、秒的显示与调整,并且还 添加了温度、阴阳历转换显示及闹钟、12/24小时转换、整点提示等功能,有较强的应用性。
基于单片机带温度显示的电子万年历设计毕业设计
毕业设计基于单片机带温度显示的电子万年历设计单片机应用技术飞速发展,纵观我们现在生活的各个领域,从导弹的导航装置,到飞机上各种仪表的控制,从计算机的网络通讯与数据传输,到工业自动化过程的实时控制和数据处理,以及我们生活中广泛使用的各种智能IC 卡、电子宠物等,这些都离不开单片机。
单片机是集CPU ,RAM ,ROM ,定时,计数和多种接口于一体的微控制器。
它体积小,成本低,功能强,广泛应用于智能产业和工业自动化上。
本设计着重要描述的就是基于AT89S52的单片机的电子万年历。
本文首先描述系统硬件工作原理,随后说明了本系统所应用的各硬件接口技术(既芯片驱动程序)和各个接口模块的功能及工作过程。
本设计的主导思想是软硬件相结合来进行各功能模块的编写。
电子万年历以硬件C语言为主体进行软件设计,增加了程序的可读性和可移植性。
系统通过LCD液晶输出显示数据,可以显示当前时间、公农历日期、星期、温度,并附有以峰鸣器为提示的闹铃功能。
关键词:单片机电子万年历公农历接口模块C语言MCU rapid development of applied technology, we now live Looking at the various fields, from the missile's navigation devices, to the various instruments on the aircraft control, computer network communications and data transmission, industrial automation to the process of real-time control and data Processing, and we live in the extensive use of the smart IC cards, electronic pets, these are inseparable from the SCM. SCM is set CPU, RAM, ROM, timing, counting on one interface and a variety of microcontrollers.Its small size, low cost, feature strong, smart widely used in industry and industrial automation.This design is going to describing the calendar based on AT89S52. System hardware of main body is described first, Follow the function, principle of work and hardware interface (that means the chip’s drives) are introduced. The design‘s main ideas is that composes soft and hardware to achieve the design.The calendar is designed with hardware C language as the Realization tool, which increased procedure readability and transplanting. The system shows the output by LCD1602, which can demonstrate the current time, the lunar calendar date, the week, the temperature and the system, can alter people with a small sounder.Keywords: MCU Electronic calendar Lunar calendar Interface module C Language.摘要............................................................................................................................................ I I ABSTRACT .. (III)目录 (IV)引言 (1)1 系统方案设计 (2)1.1单片机芯片的选择方案 (2)1.2显示模块选择方案 (3)1.3时钟芯片的选择方案 (3)1.4温度传感器的选择方案 (4)1.5电路设计最终方案 (4)2 系统设计说明 (5)2.1硬件模块图 (5)2.2系统原理 (5)2.3系统的软件流程图 (6)3 系统单元模块设计 (7)3.1主控模块(AT89S52模块) (7)3.2DS1302时钟模块 (9)3.2.1DS1302简介 (9)3.2.2DS1302结构与工作原理 (10)3.2.3控制命令字节与寄存器 (11)3.2.4DS1302电路设计图 (16)3.3公历与农历、星期转换模块 (16)3.3.1概述 (16)3.3.2基本原理 (17)3.3.3程序流程图 (18)3.4DS18B20温度模块 (20)3.4.1概述 (20)3.4.2DS18B20的工作原理 (20)3.4.3DS18B20与单片机的接口设计 (25)3.4.4DS18B20程序设计方案 (26)3.5整点报时模块 (29)3.5.1概述 (29)3.5.2设计原理 (29)3.5.3整点报时电路设计图 (29)3.6时间可调模块 (30)3.6.1键盘扫描原理 (30)3.6.2按键说明 (30)3.6.3软件设计思路 (31)3.7LCD1602显示模块 (31)3.7.1概述 (31)3.7.2结构与工作原理 (31)3.7.3LCD1602电路设计图 (34)3.8电源部分 (35)结束语 (36)参考文献 (37)致谢 (38)附录........................................................................................................................................ - 1 -引言近年来,随着我国科技的不断发展,我国经济发展的支柱产业——电子产业获得长足发展,近年来各种电子产品琳琅满目,随处可见,随着电子产品的更新速度的加快,各种功能强大,款式新颖的电子产品不断问世。
电子时钟ppt课件
DS18B20与单片机接口电路:
精品课件
报警模块 ❖ 在本设计中蜂鸣器直接接在单片机P3.6上。报警模
块采用单片机输出一定频率的方波从而使蜂鸣器发 出声音。
精品课件
设置模块 ❖ 设置模块采用四个按键与P1^4、P1^5、P1^6、P1^7 ❖ 相接组成独立按键,接口电路如下;
精品课件
电源接口部分 ❖ 采用USB接口从电脑接到电源接口中,拨动开关可控
精品课件
总体方案组成框图如下所示:
精品课件
三、系统硬件设计
本设计主要用到AT89S51系列单片机,其端口应用如下 表格:
精品课件
LCD显示模块设计
1602液晶功耗较小可直接与单片机接口相接,电源直接与 电源电路相接为+5V,对比度可调。本设计使用单片机的P0口和P1 口与1602进行通信。另外1602有行显示,每行显示的字符数为16 个,还提供各种控制命令,如:清屏、字符闪烁、光标闪烁、显示 移位等多种功能
精品课件
目录
一、课程设计概述 二、方案的确定 三、系统硬件设计 四、系统软件设计 五、系统调试过程 六、总结 七、遇到的问题及解决方法和结论 八、附录
精品课件
一、课程设计概述
利用单片机、时钟芯片DS1302、温度传感器 DS18B20、1602液晶等实现日期、时间、温度的显示, 即是一个简单的万年历。具体的功能如下: (1)通过DS1302能够准确的计时,时间可调并在液 晶屏上显示出来。 (2)通过DS18B20能够实时、准确的检测当前环境 温度,测量温度范围为 -55 ℃ ~+ 125 ℃ ,在 10~+ 85°C 范围内,精度为 ± 0.5°C 。 (3)利用单片机自身功能实现闹钟。
精品课件
电子钟表和温度表的设计
目录摘要。
2 一.前言。
3 二.方案分析和论证。
3 三.调试。
12 四.总结。
16 附录1元件明细表。
17 附录2电路原理图。
、。
18 附录3程序清单。
18摘要本系统使用STC89C52RC单片机为主要控制器,辅以74LS138译码器、74LS245总线驱动器、温度传感器DS18B20、矩阵键盘以及LCD显示等电路,实现了时间时分秒的显示、实时温度的显示(每秒刷新一次、测量范围为-40~+60℃)、时分秒参数的手动调整设置,并扩充以秒表功能。
该系统使用单片机的中断方式进行计时,能有效减小了系统误差,再使用译码器进行片选,节省了单片机的I/O口,使用了矩阵键盘进行功能的选择。
该系统具有设计简单,结构清晰,界面友好的特点,经测试,能够较好的实现题目所要求的基本和扩充功能。
电子钟是一种利用数字电路来显示秒、分、时的计时装置,与传统的机械钟相比,它具有走时准确、显示直观、无机械传动装置等优点,因而得到广泛应用。
电子时钟要求完成时、分、秒的准确计时,并能进行时、分、秒时间的设置和时间的效准功能。
时间的设置通过键盘中的数字按键进行设置。
设置完成后按确认键时钟开始运行,执行计时操作。
当需要重置时间时可以按重置键,这时时钟时间暂停,让后按数字键重置,重置完成后按确认键,时钟从新设置的时间开始运行,这时重置操作完成。
并实现了时间、温度、秒表的无缝切换。
功能:若KEY1按下,显示时间若KEY2按下,显示温度若KEY4按下,执行秒表当前显示时间时,若KEY2按下,显示温度,若KEY4按下,执行秒表,若KEY7按下,调整时参数,若KEY8按下,调整分参数,若KEY9按下,调整秒参数。
此后若KEY3按下,调整单元加1.当前显示温度时,若KEY1按下,显示时间,若KEY4按下,执行秒表。
执行秒表功能时,开始均显示0,若KEY5按下,启动秒表,若KEY5再按下,暂停秒表,若KEY6按下,秒表清0。
若KEY1按下,显示时间。
若KEY2按下,显示温度。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计(论文)说明书题目:带温度显示的电子时钟院(系):专业:学生姓名:学号:指导教师:职称:2012年XX月YY日摘要日期和时钟以及温度都是我们日常生活关心的问题。
本设计是采用单片机STC89C51作为核心元件,利用1602液晶屏作为显示元件;用单片机实现时钟和日历功能,并且可用三个键盘对电子日历及时钟进行调控;其中DS18b20实现温度数据的采集;并以总线形式将数据传输给单片机;本作品在单片机最小系统基础上,分别接上了1602液晶显示电路和DS18b20温度数据采集电路。
由于单片机的集成度高,功能强,通用性好,特别是它具有体积小,重量轻,能耗低,价格便宜,可靠性好,抗干扰能力强和使用方便等方面的独特的优点,所以此装置不仅轻便、稳定,而且功能非常实用。
可作为我们生活的小助手。
关键字:STC89C51;1602液晶屏;DS18b20;电子日历;温度计AbstractDate and temperature are the clock is a concern in our daily lives. This design is used as a core component chip STC89C51, using 1602 as the LCD display device; with MCU clock and calendar functions, and three keyboard available on the electronic calendar and clock control; which DS18b20 for temperature data collection; and to bus form data to the microcontroller; the work in the smallest single-chip systems based on liquid crystal display are connected to the 1602 circuit and DS18b20 temperature data acquisition circuit. As highly integrated single-chip, powerful, common good, especially when it is small, light weight, low power consumption, cheapand reliability, strong anti-interference ability and ease of use of the unique advantages, so this device is not only lightweight, stable, and is very practical. As we live in a small assistant.Keywords: STC89C51; 1602 LCD screen; DS18b20; electronic calendar; thermometer目录引言 (1)1 设计任务 (1)2 系统总体方案及硬件设计 (1)2.1单片机最小系统电路 (1)2.1.1复位电路 (1)2.1.2晶振电路 (1)2.1.3单片机系统功能 (5)2.1.4单片机机管脚功 (1)2.1.551单片内部寄存器能 (1)2.1.6单片机最小系统原理图 (1)2.2 1602液晶电路设计 (4)2.2.1管脚图 (4)2.2.2字符地址 (4)2.2.3指令集 (8)2.2.4电路设计 (5)2.3 DS18b20电路设计 (5)2.3.1 DS18B20的简介 (5)2.3.2 工作原理 (6)2.3.3 DS18B20的外形和内部结构 (6)2.3.4 DS18B2与单片机的典型接口设计 (6)3 系统原理图及PCB图介 (7)4 软件设计 (7)4.1.1程序中各部分所用到的子函数 (8)4.1.2程序中的主函数 (8)5 结论 (8)谢辞 (9)参考文献 (10)附录 (11)第 1 页共 25页引言电子日历和温度计是一种很实用的生活小制作,由于单片机的集成度高,功能强,通用性好,特别是它具有体积小,重量轻,能耗低,价格便宜,可靠性好,抗干扰能力强和使用方便等方面的独特的优点,易于在系统中实现上述功能,并越来越多的普及在我们的生活中。
1 设计任务制作一个可以实现24小时计时的数字钟,以及1到30号的日期更换,并且用三个键盘实现对日期时钟的调控,用1602液晶屏显示日期时钟。
外加一个由DS18b20读取的温度数据也显示在液晶评上的小作品。
2 设计要求2.1 可使用键盘修改年、月、日,时、分、秒,实现加减修改。
2.2 时钟误差范围为:1分每天。
2.3 温度误差范围为:0.5摄氏度。
3 系统总体方案及硬件设计3.1 51单片机最小系统电路介绍3.1.1 单片机最小系统原图,如图3-1所示:图3-1单片机最小系统原理图3.1.2 复位电路单片机最小系统复位电路的极性电容C1的大小直接影响单片机的复位时间,一般采用10~30uF,51单片机最小系统容值越大需要的复位时间越短。
3.1.3 晶振电路单片机最小系统晶振Y1也可以采用6MHz或者11.0592MHz,在正常工作的情况下可以采用更高频率的晶振,51单片机最小系统晶振的振荡频率直接影响单片机的处理速度,频第 2 页共 25页率越大处理速度越快。
3.1.4 单片机系统功能单片机最小系统起振电容C2、C3一般采用15~33pF,并且电容离晶振越近越好,晶振离单片机越近越好4.P0口为开漏输出,作为输出口时需加上拉电阻,阻值一般为10k。
设置为定时器模式时,加1计数器是对内部机器周期计数(1个机器周期等于12个振荡周期,即计数频率为晶振频率的1/12)。
计数值N乘以机器周期Tcy就是定时时间t。
设置为计数器模式时,外部事件计数脉冲由T0或T1引脚输入到计数器。
在每个机器周期的S5P2期间采样T0、T1引脚电平。
当某周期采样到一高电平输入,而下一周期又采样到一低电平时,则计数器加1,更新的计数值在下一个机器周期的S3P1期间装入计数器。
由于检测一个从1到0的下降沿需要2个机器周期,因此要求被采样的电平至少要维持一个机器周期。
当晶振频率为12MHz时,最高计数频率不超过1/2MHz,即计数脉冲的周期要大于2 ms。
3.1.5 51单片机管脚功能89C51是一种高性能低功耗的采用CMOS工艺制造的8位微控制器,它提供下列标准特征:4K字节的程序存储器,128字节的RAM,32条I/O线,2个16位定时器/计数器, 一个5中断源两个优先级的中断结构,一个双工的串行口, 片上震荡器和时钟电路。
引脚说明:·VCC:电源电压·GND:地·P0口:P0口是一组8位漏极开路型双向I/O口,作为输出口用时,每个引脚能驱动8个TTL逻辑门电路。
当对0端口写入1时,可以作为高阻抗输入端使用。
当P0口访问外部程序存储器或数据存储器时,它还可设定成地址数据总线复用的形式。
在这种模式下,P0口具有内部上拉电阻。
在EPROM编程时,P0口接收指令字节,同时输出指令字节在程序校验时。
程序校验时需要外接上拉电阻。
·P1口:P1口是一带有内部上拉电阻的8位双向I/O口。
P1口的输出缓冲能接受或输出4个TTL逻辑门电路。
当对P1口写1时,它们被内部的上拉电阻拉升为高电平,此时可以作为输入端使用。
当作为输入端使用时,P1口因为内部存在上拉电阻,所以当外部被拉低时会输出一个低电流(IIL)。
·P2口:P2是一带有内部上拉电阻的8位双向的I/O端口。
P2口的输出缓冲能驱动4个TTL逻辑门电路。
当向P2口写1时,通过内部上拉电阻把端口拉到高电平,此时可以用作输入口。
作为输入口,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出电流(IIL)。
P2口在访问外部程序存储器或16位地址的外部数据存储器(例如MOVX @ DPTR)时,P2口送出高8位地址数据。
在这种情况下,P2口使用强大的第 3页共 25页内部上拉电阻功能当输出1时。
当利用8位地址线访问外部数据存储器时(例MOVX @R1),P2口输出特殊功能寄存器的内容。
当EPROM编程或校验时,P2口同时接收高8位地址和一些控制信号。
·P3口:P3是一带有内部上拉电阻的8位双向的I/O端口。
P3口的输出缓冲能驱动4个TTL逻辑门电路。
当向P3口写1时,通过内部上拉电阻把端口拉到高电平,此时可以用作输入口。
作为输入口,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出电流(IIL)。
·ALE/PROG:当访问外部存储器时,地址锁存允许是一输出脉冲,用以锁存地址的低8位字节。
当在Flash编程时还可以作为编程脉冲输出(PROG)。
·RST:复位输入。
当振荡器工作时,RST引脚出现两个机器周期的高电平将使单片机复位。
P3口的第二功能: P3口同时具有AT89C51的多种特殊功能,具体如下表3-1所示:表3-1 51单片机I/O口管脚功能端口第二功能引脚P3.0 RXD (串行输入口)P3.1 TXD(串行输出口)INT(外部中断0)P3.2 0INT(外部中断1)P3.3 1P3.4 T0(定时器0)P3.5 T1(定时器1)P3.6 WR(外部数据存储器写选通)P3.7 RD(外部数据存储器都选通)一般情况下,ALE是以晶振频率的1/6输出,可以用作外部时钟或定时目的。
但也要注意,每当访问外部数据存储器时将跳过一个ALE脉冲。
3.1.5 单片机内部寄存器标识符号地址寄存器名称P3 0B0H I/O口3寄存器PCON 87H 电源控制及波特率选择寄存器SBUF 99H 串行数据缓冲寄存器TCON 88H 定时控制寄存器TMOD 89H 定时器方式选择寄存器第 4 页共 25页TL0 8AH 定时器0低8位TH0 8CH 定时器0高8位TL1 8BH 定时器1低8位TH1 8DH 定时器1高83.2 1602液晶电路设计3.2.1 管脚功能工业字符型液晶,能够同时显示16x02即32个字符。
(16列2行)1602采用标准的16脚接口,其中:第1脚:VSS为地电源第2脚:VDD接5V正电源第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。