![电子万年历设计智能仪器仪表课设_第1页](http://file2.renrendoc.com/fileroot_temp3/2021-6/17/25f74e5d-c436-47f5-b713-5a2692e2bad2/25f74e5d-c436-47f5-b713-5a2692e2bad21.gif)
![电子万年历设计智能仪器仪表课设_第2页](http://file2.renrendoc.com/fileroot_temp3/2021-6/17/25f74e5d-c436-47f5-b713-5a2692e2bad2/25f74e5d-c436-47f5-b713-5a2692e2bad22.gif)
![电子万年历设计智能仪器仪表课设_第3页](http://file2.renrendoc.com/fileroot_temp3/2021-6/17/25f74e5d-c436-47f5-b713-5a2692e2bad2/25f74e5d-c436-47f5-b713-5a2692e2bad23.gif)
![电子万年历设计智能仪器仪表课设_第4页](http://file2.renrendoc.com/fileroot_temp3/2021-6/17/25f74e5d-c436-47f5-b713-5a2692e2bad2/25f74e5d-c436-47f5-b713-5a2692e2bad24.gif)
![电子万年历设计智能仪器仪表课设_第5页](http://file2.renrendoc.com/fileroot_temp3/2021-6/17/25f74e5d-c436-47f5-b713-5a2692e2bad2/25f74e5d-c436-47f5-b713-5a2692e2bad25.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、摘 要时钟,自从它发明的那天起,就成为人类的朋友,但随着时间的推移,科学技术的不断发展,人们对时间计量的精度要求越来越高,应用越来越广。怎样让时钟更好的为人民服务,怎样让我们的老朋友焕发青春呢?这就要求人们不断设计出新型时钟。现今,高精度的计时工具大多数都使用了石英晶体振荡器,由于电子钟,石英表,石英钟都采用了石英技术,因此走时精度高,稳定性好,使用方便,不需要经常调校,数字式电子钟用集成电路计时时,译码代替机械式传动,用led显示器代替显示器代替指针显示进而显示时间,减小了计时误差,这种表具有时,分,秒显示时间的功能,还可以进行时和分的校对,片选的灵活性好。时钟电路在计算机系统中起着非常重要
2、的作用,是保证系统正常工作的基础。在一个单片机应用系统中,时钟有两方面的含义:一是指为保障系统正常工作的基准振荡定时信号,主要由晶振和外围电路组成,晶振频率的大小决定了单片机系统工作的快慢;二是指系统的标准定时时钟,即定时时间,它通常有两种实现方法:一是用软件实现,即用单片机内部的可编程定时/计数器来实现,但误差很大,主要用在对时间精度要求不高的场合;二是用专门的时钟芯片实现,在对时间精度要求很高的情况下,通常采用这种方法,典型的时钟芯片有:ds1302,ds18b20等都可以满足高精度的要求。本文主要介绍用单片机内部的定时/计数器来实现电子时钟的方法,本设计由单片机at89s51芯片和lcd
3、602核心,辅以必要的电路,构成了一个数字电子时钟。目录1 智能仪器仪表的简介11.1智能仪器仪表简介11.2智能仪器仪表的作用11.3本课题的背景和意义12 系统设计简介22.1 数字电子钟简介22.2 设计要求22.3 设计方案论证22.4 硬件设计电路43.系统硬件设计53.1主控制器选择53.2显示电路63.3温度传感器简介63.4 ds18b20温度传感器与单片机的接口电路73.5时钟电路73.6复位电路83.7系统总体电路图94 设计语言及软件介绍104.1c语言介绍104.2protues软件介绍105 系统软件设计115.1 概述115.2 系统程序设计模块115.2.1主程序
4、115.2.2 ds18b20子程序125.2.3 ds1302子程序125.2.4定时器定时设定子程序135.2.5 lcd1602显示子程序135.3 控制源程序135.3.1 c语言程序135.4 调试及仿真451 智能仪器仪表的简介1.1智能仪器仪表简介仪器仪表(英文:instrumentation)仪器仪表是用以检出、测量、观察、计算各种物理量、物质成分、物性参数等的器具或设备。真空检漏仪、压力表、测长仪、显微镜、乘法器等均属于仪器仪表。广义来说,仪器仪表也可具有自动控制、报警、信号传递和数据处理等功能,例如用于工业生产过程自动控制中的气动调节仪表,和电动调节仪表,以及集散型仪表控制
5、系统也皆属于仪器仪表。1.2智能仪器仪表的作用90年代,仪器仪表的智能化突出表现在以下几个方面:微电子技术的进步更深刻地影响仪器仪表的设计;dsp芯片的问世,使仪器仪表数字信号处理功能大大加强;微型机的发展,使仪器仪表具有更强的数据处理能力;图像处理功能的增加十分普遍;vxi总线得到广泛的应用。近年来,智能化测量控制仪表的发展尤为迅速。国内市场上已经出现了多种多样智能化测量控制仪表,例如,能够自动进行差压补偿的智能节流式流量计,能够进行程序控温的智能多段温度控制仪,能够实现数字pid和各种复杂控制规律的智能式调节器,以及能够对各种谱图进行分析和数据处理的智能色谱仪等 1.3本课题的背景和意义数
6、字电子钟是采用数字电路实现对.时,分,秒.数字显示的计时装置,广泛用于个人家庭,车站, 码头办公室等公共场所,成为人们日常生活中不可少的必需品,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表, 钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。因此,研究数字钟及扩大其应用,有着非常现实的意义。2 系统设计简介2.1 数字电子钟简介数字温度计可以准确的判断和测量温
7、度,以数字显示,而非指针或水银显示。故称数字温度计或数字温度表。数字温度计采用温度敏感元件也就是温度传感器(如铂电阻,热电偶,半导体,热敏电阻等),将温度的变化转换成电信号的变化,如电压和电流的变化,温度变化和电信号的变化有一定的关系,如线性关系,一定的曲线关系等,这个电信号可以使用模数转换的电路即ad转换电路将模拟信号转换为数字信号,数字信号再送给处理单元,如单片机或者pc机等,处理单元经过内部的软件计算将这个数字信号和温度联系起来,成为可以显示出来的温度数值,如25.0摄氏度,然后通过显示单元,如led,lcd或者电脑屏幕等显示出来给人观察。这样就完成了数字温度计的基本测温功能。2.2 设
8、计要求1、显示年月日时分秒及星期信息。 2、具有可调整日期和时间功能3、增加闰年计算功能2.3 设计方案论证方案一:系统分为主控制器模块、显示模块、按键开关模块,主控制模块采用at89c52单片机为控制中心,显示模块采用普通的共阴led数码管,键输入采用中断实现功能调整,计时使用at89c52单片机自带的定时器功能,实现对时间、日期的操作,通过按键盘开关实现对时间、日期的调整。方案二:系统分为主控模块、时钟电路模块、按键扫描模块,lcd显示模块,电源电路、复位电路、晶振电路等模块。主控模块采用at89c52单片机,按键模块用四个按键,用于调整时间,显示模块采用lcd1602,时钟电路模块采用d
9、s1302时钟芯片实现对时间、日期的操作。两个方案工作原理大致相同,只有显示模块和时钟电路不同。led数码管价格适中,对于数字显示效果较好,而且使用单片机的端口也较少; lcd1602液晶显示屏,显示功能强大,可以显示大量文字、图形,显示多样性,清晰可见,价格相对led数码管来说要昂贵些,但是基于本设计显示的东西较多,若采用led数码管的话,所需数码管较多,而且不利于控制,因此选择lcd1602作为显示模块。ds1302是一款高性能的实时时钟芯片,以计时准确、接口简单、使用方便、工作电压范围宽和低功耗等优点,得到广泛的应用,实时时钟有秒、分、时、星期、日、月和年,月小于31天时可以自动调整,并
10、具有闰年补偿功能,而且在掉电时能够在外部纽扣电池的供电下继续工作。单片机有定时器的功能,但时间误差较大,且需要编写时钟程序,因此采用ds1302作为时钟电路。对比以上方案,结合设计技术指标与要求我们选择了方案二进行设计。总框图:该数字电子时钟的总体设计框图如图2.3所示。 图2.3数字电子钟总体设计框图2.4 硬件设计电路单片机最小系统是由晶振电路,上电复位、按键复位电路,isp下载接口和电源指示灯组成。原理图如图2-4所示。图2.4 单片机最小系统设计电路图3.系统硬件设计3.1主控制器选择1at89c51单片机介绍:at89c51单片机是由深圳宏晶公司代理销售的一款mcu,是由美国设计生产
11、的一种低电压、高性能cmos 8位单片机,片内含8kbytes的可反复写的flashrom和128bytes的ram,2个16位定时计数器5。at89c51单片机内部主要包括累加器acc(有时也简称为a)、程序状态字psw、地址指示器dptr、只读存储器rom、随机存取存储器ram、寄存器、并行i/o接口p0p3、定时器/计数器、串行i/o接口以及定时控制逻辑电路等。这些部件通过内部总线联接起来,构成一个完整的微型计算机。单片机中央处理系统的方案设计,选用at89c51单片机作为中央处理器,如图(2)所示。该单片机除了拥有mcs-51系列单片机的所有优点外,内部还具有8k的在系统可编程flas
12、h存储器,低功耗的空闲和掉电模式,极大的降低了电路的功耗,还包含了定时器、程序存储器、数据存储器等硬件,其硬件能符合整个控制系统的要求,不需要外接其他存储器芯片和定时器件,方便地构成一个最小系统。整个系统结构紧凑,抗干扰能力强,性价比高。图3-1at89c51引脚图3.2显示电路1602液晶也叫1602字符型液晶 它是一种专门用来显示字母、数字、符号等的点阵型液晶模块 它有若干个5x7或者5x11等点阵字符位组成,每个点阵字符位都可以显示一个字符。显示电路采用lcd1602液晶显示,如图(10)所示,图中只画出了其相应的接口,3脚用于调节lcd1602的背光,4、5、6为lcd1602的控制口
13、,用于控制其写入或是读出指令,7至14脚为lcd1602的数据口,将数传送到lcd1602中。其如图3.2所示:图3.2 lcd1602显示电路3.3温度传感器简介 ds18b20温度传感器是美国dallas半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现912位的数字值读数方式。ds18b20的性能特点如下:独特的单线接口仅需要一个端口引脚进行通信;多个ds18b20可以并联在惟一的三线上,实现多点组网功能;无须外部器件;可通过数据线供电,电压范围为3.05.5v;零待机功耗;温度以9或12位二进制数字表
14、示;用户可定义报警设置;报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作; 其测温原理图如下:图3-3 ds18b20的测温原理图3.4 ds18b20温度传感器与单片机的接口电路 当ds18b20处于写存储器操作和温度a/d转换操作时,总线上必须有强的上拉,上拉开启时间最大为10us。采用寄生电源供电方式时vdd端接地。由于单线制只有一根线,因此发送接口必须是三态的。图3-4 ds18b20温度传感器与单片机的接口电路3.5时钟电路时钟电路主要由时钟芯片ds1302、备用电池、晶振等几部分组成,如图(6)所示。d
15、s1302采用3线串行接口,占用引脚少,内部集成了可编程日历时钟,用户可以根据需要通过单片机的控制来自行设置,支持双电源供电,可以使用外部主电源和备用电源,备份电源能够使时钟芯片继续工作。图3.5(a) ds1302时钟电路ds1302各引脚的功能为:8: vcc1:备用电池端;1: vcc2:5v电源。当vcc2vcc1+0.2v时,由vcc2向ds1302供电,当vcc2 vcc1时,由vcc1向ds1302供电;7: sclk:串行时钟,输入; 6: i/o:数据输入输出口;5: ce/rst:复位脚;2、3: x1、x2 是外接晶振脚 (32.768khz的晶振);4: 地(gnd)。
16、ds1302是spi总线驱动方式。它不仅要向寄存器写入控制字,还需要读取相应寄存器的数据。ds1302的控制字如下图:图3.5(b)ds1302的控制字图3.6复位电路 复位电路是单片机的片内电路初始化,使单片机从一种确定的状态开始运行。复位操作通常有两种基本形式:上电复位、开关复位。此处选择上电复位,该操作要求接通电源后自动实现复位操作。电容上电后使rst持续一段高电平时间,此处电解电容c设定参数为10uf,如图所示:常用的复位电路如下图所示:图3-6复位电路3.7系统总体电路图 数字电子钟设计原理图如图3-8所示,控制器使用单片机at89c51,温度计传感器使用ds18b20,用lcd16
17、02实现温度显示。 图3-7系统总体设计图4 设计语言及软件介绍4.1c语言介绍1972年,贝尔实验室的dennis ritchie和brian kernighan在b语言的基础上,作了进一步的充实和完善,设计出了c语言。c语言的主要特点是:语言简洁、紧凑,使用方便、灵活。运算符丰富。c的运算符包含的范围广泛,共有34种运算符。c将括号、赋值、强制类型转换等都作为运算符处理。数据结构丰富,具有现代化语言的各种数据结构。具有结构化的控制语句。语法限制不太严格,程序设计自由度大。c语言允许直接访问物理地址,能进行位操作,能实现汇编语言的大部分功能,可以直接对硬件进行操作。生成目标代码质量高,程序执
18、行效率高。c程序可移植性好。4.2protues软件介绍proteus软件是labcenter electronics公司的一款电路设计与仿真软件,它包括isis、ares等软件模块,ares模块主要用来完成pcb的设计,而isis模块用来完成电路原理图的布图与仿真。proteus的软件仿真基于vsm技术,它与其他软件最大的不同也是最大的优势就在于它能仿真大量的单片机芯片,比如mcs-51系列、pic系列等等,以及单片机外围电路,比如键盘、led、lcd等等。通过proteus软件的使用我们能够轻易地获得一个功能齐全、实用方便的单片机实验室。5 系统软件设计5.1 概述主程序首先对系统环境初始
19、化,设置定时器t0工作模式为16位定时/计数器模式,置位总中断允许位ea,并对键盘端口置位,再对lcd1602初始化,ds1302初始化。接着扫描键盘,在键盘程序里面是对时间、日期及闹钟的调整,最下面是时间的显示。5.2 系统程序设计模块本电路包括基本的时钟电路模块、液晶显示模块、语音报时模块、温度传感器模块。各功能模块通过控制芯片连接起来,完成本设计要求。5.2.1主程序主程序流程图如图4.2.1所示:lcd显示按键扫描每三秒读取温度一次启用ds1302。初始化lcd以及定时器图5.2.1 主程序流程图5.2.2 ds18b20子程序提取百、十、个、小数点后一位 读到的数转换为整型向ds18
20、20写数据,跳过rom,读数据复位初始化ds18b20程序框图如下 图5.2.2 读出温度子程序流程图5.2.3 ds1302子程序其流程图如图5.2.3所示:dnum=?dnum=?送到12684显示1:小时减一 2:分减一 3:秒减一4:年减一 5:月减一 6:日减一 7:星期减一计算要显示的数据1:小时加一 2:分加一 3:秒加一4:年加一 5:月加一 6:日加一 7:星期加一 flag=1?初始化图5.2.3 ds1302程序框图5.2.4定时器定时设定子程序其流程图如图5.2.4所示:设定每3s调整一次的时间循环,以共调用设定每0.5s调整一次的时间循环,以共调用设定工作在定时器0工
21、作方式1tmod = 0x01 ; 开总中断 图5.2.4定时器定时设定子程序5.2.5 lcd1602显示子程序lcd子程序框图: 设定lcd光标显示、关闭,判断是否忙的函数完成显示初始化lcd设定,调用来自其他子程序的数值第四行显示状态信息第三行显示温度第二行显示时间及星期第一行显示日期及平闰年图5.2.5 lcd1602子程序流程图5.3 控制源程序5.3.1 c语言程序ds18b20子程序:sbit dq = p33; / 定义dq引脚为p3.3/* 延时函数 * 功能:在11.059mhz的晶振条件下调用本函数需要24s ,然后每次计数需16s */void ds18_delay(i
22、nt useconds) int s;for (s=0; suseconds;s+);/* 复位函数 * 功能:完成单总线的复位操作。* 复位时间为480s,因此延时时间为(480-24)/16 = 28.5,取29s。* 经过70s之后检测存在脉冲,因此延时时间为(70-24)/16 = 2.875,取3s。*/unsigned char ow_reset(void) unsigned char presence;dq = 0; / 将 dq 线拉低ds18_delay(29); / 保持 480sdq = 1; / dq返回高电平ds18_delay(3); / 等待存在脉冲presenc
23、e = dq; / 获得存在信号ds18_delay(25); / 等待时间隙结束return(presence); / 返回存在信号,0 = 器件存在, 1 = 无器件/* 位写入函数 * 功能:向单总线写入1位值:bitval*/void write_bit(char bitval) dq = 0; / 将dq 拉低开始写时间隙if(bitval=1) dq =1; / 如果写1,dq 返回高电平ds18_delay(5); / 在时间隙内保持电平值,dq = 1; / ds18_delay函数每次循环延时16s,因此ds18_delay(5) = 104s/* 字节写入函数 * 功能:向
24、单总线写入一个字节值:val*/void ds18write_byte(char val) unsigned char i;unsigned char temp;for (i=0; ii; temp &= 0x01; write_bit(temp); ds18_delay(5);/* 位读取函数 * 功能:从单总线上读取一位信号,所需延时时间为15s,因此无法调用前面定义* 的ds18_delay()函数,而采用一个for()循环来实现延时。* */unsigned char read_bit(void) unsigned char i;dq = 0; /将dq 拉低开始读时间隙dq = 1;
25、 / then return highfor (i=0; i3; i+); / 延时15sreturn(dq); / 返回 dq 线上的电平值/* 字节读取函数 * 功能:从单总线读取一个字节的值*/unsigned char dsread_byte(void) unsigned char i;unsigned char value = 0;for (i=0;i8;i+) / 读取字节,每次读取一个字节if(read_bit() value|=0x01i; / 然后将其左移ds18_delay(6); return(value);/* 读取温度函数 * 功能:如果单总线节点上只有一个器件则可以
26、直接掉用本函数。如果节点上有多个器* 件,为了避免数据冲突,应使用match rom函数来选中特定器件。* 注: 本函数是根据ds1820的温度数据格式编写的,若用于ds18b20,必须根据* ds18b20的温度数据格式作适当修改。*/unsigned int readtemperature(void) unsigned char get10;unsigned char temp_lsb,temp_msb;unsigned int t;unsigned char k;ow_reset();ds18write_byte(0xcc); / 跳过 romds18write_byte(0x44);
27、/ 启动温度转换ds18_delay(5);ow_reset();ds18write_byte(0xcc); / 跳过 romds18write_byte(0xbe); / 读暂存器for (k=0;k2;k+)getk=dsread_byte();temp_msb = get1; / sign byte + lsbittemp_lsb = get0; / temp data plus lsbt=temp_msb*256+temp_lsb;t=t&0x0ff0;if(t0xf0)t=(-1)*t;return t4;/temp_f = (int)temp_c)* 9)/5 + 32; / 输出
28、华氏温度值lcd1602子程序#include#includeds18b20_3.h#define uint unsigned int#define uchar unsigned charuchar a,b,miao,shi,fen,ri,yue,nian,week,flag,key1n,temp,miao1,shi1=12,fen1=1,miao1=0,clock=0 ;/flag用于读取头文件中的温度值,和显示温度值#define yh 0x80 /lcd第一行的初始位置,因为lcd1602字符地址首位d7恒定为1(100000000=80)#define er 0x80+0x40 /lc
29、d第二行初始位置(因为第二行第一个字符位置地址是0x40)/液晶屏的与c51之间的引脚连接定义(显示数据线接c51的p0口)sbit rs=p20;sbit en=p22;sbit rw=p21; /如果硬件上rw接地,就不用写这句和后面的rw=0了sbit led=p26; /lcd背光开关/ds1302时钟芯片与c51之间的引脚连接定义sbit io=p11;sbit sclk=p10;sbit rst=p12;sbit clo=p14;sbit acc0=acc0;sbit acc7=acc7;/*acc累加器=aacc.0=e0h acc.0就是acc的第0位。acc可以位寻址。累加器
30、acc是一个8位的存储单元,是用来放数据的。但是,这个存储单元有其特殊的地位,是单片机中一个非常关键的单元,很多运算都要通过acc来进行。以后在学习指令时,常用a来表示累加器。但有一些地方例外,比如在push指令中,就必须用acc这样的名字。一般的说法,a代表了累加器中的内容、而acc代表的是累加器的地址。 */校时按键与c51的引脚连接定义sbit key1=p15; /设置键sbit key2=p16; /加键sbit key3=p17; /减键sbit buzzer=p13;/蜂鸣器,通过三极管9012驱动,端口低电平响/*/uchar code tab1=20 - - ; /年显示的固
31、定字符uchar code tab2= : : ;/时间显示的固定字符uchar code tab3= hello welcome;/开机动画/延时函数,后面经常调用void delay(uint xms)/延时函数,有参函数uint x,y;for(x=xms;x0;x-) for(y=110;y0;y-);void delay1ms(int i)/1毫秒延时 int j,k; while(i-) for(j=76;j1;j-); for(k=29;k1;k-); /*液晶写入指令函数与写入数据函数,以后可调用*/*在这个程序中,液晶写入有关函数会在ds1302的函数中调用,所以液晶程序要放
32、在前面*/write_1602com(uchar com)/*液晶写入指令函数*rs=0;/数据/指令选择置为指令rw=0; /读写选择置为写p0=com;/送入数据delay(1);en=1;/拉高使能端,为制造有效的下降沿做准备delay(1);en=0;/en由高变低,产生下降沿,液晶执行命令write_1602dat(uchar dat)/*液晶写入数据函数*rs=1;/数据/指令选择置为数据rw=0; /读写选择置为写p0=dat;/送入数据delay(1);en=1; /en置高电平,为制造下降沿做准备delay(1);en=0; /en由高变低,产生下降沿,液晶执行命令lcd_i
33、nit()/*液晶初始化函数* uchar j; write_1602com(0x0f|0x08);for(a=0;a17;a+) write_1602dat(tab3a); j=17;while(j-)write_1602com(0x1c);/循环左移delay(700); write_1602com(0x01);delay(10);write_1602com(0x38);/设置液晶工作模式,意思:16*2行显示,5*7点阵,8位数据write_1602com(0x0c);/开显示不显示光标write_1602com(0x06);/整屏不移动,光标自动右移write_1602com(0x01
34、);/清显示/*开机动画显示hello welcome dianzizhong*/write_1602com(yh+1);/日历显示固定符号从第一行第1个位置之后开始显示for(a=0;a14;a+)write_1602dat(tab1a);/向液晶屏写日历显示的固定符号部分/delay(3);write_1602com(er+2);/时间显示固定符号写入位置,从第2个位置后开始显示for(a=0;a0;a-)io=acc0;sclk=0;sclk=1;acc=acc1;uchar read_byte()/读一个字节rst=1;for(a=8;a0;a-)acc7=io;sclk=1;sclk
35、=0;acc=acc1;return (acc);/-void write_1302(uchar add,uchar dat)/向1302芯片写函数,指定写入地址,数据rst=0;sclk=0;rst=1;write_byte(add);write_byte(dat);sclk=1;rst=0;uchar read_1302(uchar add)/从1302读数据函数,指定读取数据来源地址uchar temp;rst=0;sclk=0;rst=1;write_byte(add);temp=read_byte();sclk=1;rst=0;return(temp);uchar bcd_decim
36、al(uchar bcd)/bcd码转十进制函数,输入bcd,返回十进制 uchar decimal; decimal=bcd4; return(decimal=decimal*10+(bcd&=0x0f);/-void ds1302_init() /1302芯片初始化子函数(2010-01-07,12:00:00,week4)rst=0;sclk=0;write_1302(0x8e,0x00); /允许写,禁止写保护 write_1302(0x80,0x00); /向ds1302内写秒寄存器80h写入初始秒数据00write_1302(0x82,0x00);/向ds1302内写分寄存器82h
37、写入初始分数据00write_1302(0x84,0x12);/向ds1302内写小时寄存器84h写入初始小时数据12write_1302(0x8a,0x01);/向ds1302内写周寄存器8ah写入初始周数据4write_1302(0x86,0x08);/向ds1302内写日期寄存器86h写入初始日期数据07write_1302(0x88,0x07);/向ds1302内写月份寄存器88h写入初始月份数据01write_1302(0x8c,0x10);/向ds1302内写年份寄存器8ch写入初始年份数据10write_1302(0x8e,0x80); /打开写保护/-/温度显示子函数void
38、write_temp(uchar add,uchar dat)/向lcd写温度数据,并指定显示位置uchar gw,sw,bw;if(dat=0&dat=128)gw=dat%10;/取得个位数字sw=dat%100/10;/取得十位数字bw=dat/100;/取得百位数字elsedat=256-dat;gw=dat%10;/取得个位数字sw=dat%100/10;/取得十位数字bw=-3; /0x30-3表示为负号write_1602com(er+add);/er是头文件规定的值0x80+0x40write_1602dat(0x30+bw);/数字+30得到该数字的lcd1602显示码wri
39、te_1602dat(0x30+sw);/数字+30得到该数字的lcd1602显示码write_1602dat(0x30+gw);/数字+30得到该数字的lcd1602显示码 write_1602dat(0xdf);/显示温度的小圆圈符号,0xdf是液晶屏字符库的该符号地址码 write_1602dat(0x43);/显示c符号,0x43是液晶屏字符库里大写c的地址码/-/时分秒显示子函数void write_sfm(uchar add,uchar dat)/向lcd写时分秒,有显示位置加、现示数据,两个参数uchar gw,sw;gw=dat%10;/取得个位数字sw=dat/10;/取得十
40、位数字write_1602com(er+add);/er是头文件规定的值0x80+0x40write_1602dat(0x30+sw);/数字+30得到该数字的lcd1602显示码write_1602dat(0x30+gw);/数字+30得到该数字的lcd1602显示码/-/年月日显示子函数void write_nyr(uchar add,uchar dat)/向lcd写年月日,有显示位置加数、显示数据,两个参数uchar gw,sw;gw=dat%10;/取得个位数字sw=dat/10;/取得十位数字write_1602com(yh+add);/设定显示位置为第一个位置+addwrite_1
41、602dat(0x30+sw);/数字+30得到该数字的lcd1602显示码write_1602dat(0x30+gw);/数字+30得到该数字的lcd1602显示码/-void write_week(uchar week)/写星期函数write_1602com(yh+0x0c);/星期字符的显示位置switch(week)case 1:write_1602dat(m);/星期数为1时,显示 write_1602dat(o); write_1602dat(n); break; case 2:write_1602dat(t);/星期数据为2时显示 write_1602dat(u); write_
42、1602dat(e); break;case 3:write_1602dat(w);/星期数据为3时显示 write_1602dat(e); write_1602dat(d); break;case 4:write_1602dat(t);/星期数据为4是显示 write_1602dat(h); write_1602dat(u); break;case 5:write_1602dat(f);/星期数据为5时显示 write_1602dat(r); write_1602dat(i); break;case 6:write_1602dat(s);/星期数据为6时显示 write_1602dat(t)
43、; write_1602dat(a); break;case 7:write_1602dat(s);/星期数据为7时显示 write_1602dat(u); write_1602dat(n); break;/*键盘扫描有关函数*void keyscan()if(key1=0)/-key1为功能键(设置键)-delay(9);/延时,用于消抖动if(key1=0)/延时后再次确认按键按下 buzzer=0;/蜂鸣器短响一次 delay(20); buzzer=1;while(!key1);key1n+;if(key1n=12)key1n=1;/设置按键共有秒、分、时、星期、日、月、年、返回,8个
44、功能循环switch(key1n)case 1: tr0=0;/关闭定时器/tr1=0;write_1602com(er+0x09);/设置按键按动一次,秒位置显示光标 write_1602com(0x0f);/设置光标为闪烁 temp=(miao)/10*16+(miao)%10;/秒数据写入ds1302 write_1302(0x8e,0x00); write_1302(0x80,0x80|temp);/miao write_1302(0x8e,0x80); break;case 2: write_1602com(er+6);/按2次fen位置显示光标 /write_1602com(0x0
45、f);break;case 3: write_1602com(er+3);/按动3次,shi /write_1602com(0x0f);break;case 4: write_1602com(yh+0x0e);/按动4次,week /write_1602com(0x0f);break;case 5: write_1602com(yh+0x0a);/按动5次,ri /write_1602com(0x0f);break;case 6: write_1602com(yh+0x07);/按动6次,yue /write_1602com(0x0f);break;case 7: write_1602com(yh+0x04);/按动7次,nian /write_1602com(0x0f);b
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024-2025学年新教材高中生物第5章基因突变及其他变异第1节基因突变和基因重组练习新人教版必修第二册
- 2024-2025学年高中数学第二章平面向量2.3.1平面向量基本定理课时作业新人教A版必修4
- 现代化企业供应链与物盛运营模式探讨
- 知识产权管理在教育领域的应用
- 七年级语文上册教学计划(14篇)
- 7 生命最宝贵 (教学设计) -部编版道德与法治三年级上册
- 知识产权在医疗设备研发中的重要性
- 6《拉拉手交朋友》第一课时(教学设计)- 一年级道德与法治上册统编版·2024
- 《三位数乘两位数》(教学设计)- 2024-2025学年四年级上册数学人教版
- 小学二年级上学期形近字
- 上海专科层次自主招生考试习题集②(含答案)
- 某市政道路施工交通疏导方案
- 世界主要国际组织课件
- 语言学纲要(新)课件
- 心理评估与诊断简介课件
- 移动式压力容器充装复审换证考试重点题库(180题)
- 栗姓近现代政界
- 小班安全《汤姆走丢了》PPT课件教案反思微视频
- 作物栽培学课件棉花
- 回弹法检测砌体强度培训讲义PPT(完整全面)
- DB37-T 997-2022危险化学品作业场所警示标志标识规范
评论
0/150
提交评论