实时日历时钟温度的设计与实现

上传人:hao****an 文档编号:156723220 上传时间:2022-09-27 格式:DOC 页数:29 大小:1.56MB
返回 下载 相关 举报
实时日历时钟温度的设计与实现_第1页
第1页 / 共29页
实时日历时钟温度的设计与实现_第2页
第2页 / 共29页
实时日历时钟温度的设计与实现_第3页
第3页 / 共29页
点击查看更多>>
资源描述
单片机原理及应用课程设计目 录1课程设计题目与要求21.1课程设计内容21.2主要设备与器材21.3设计要求21.4 设计人员分工22课设所需软件简介32.1 Keil uVision4的简要介绍32.2 STC-ISP的简要介绍43方案分析与确定63.1 方案思路分析63.2 方案流程图64单元芯片电路的设置及总体设计84.1 DS1302芯片引脚功能84.2 DS1302的使用方法94.3 DS18B20芯片引脚功能104.4 DS18B20的使用方法114.5 LCD1602引脚功能134.6 LCD1602的使用145整体电路设计和程序源代码156设计结果257心得体会278参考文献281课程设计题目与要求1.1课程设计内容利用STC89C52RC单片机设计实现实时日历/时间/温度在LCD1602上的显示1.2主要设备与器材PC机一台,HOT51增强型单片机开发板,STC89C52RC单片机一块,LCD1602液晶屏,DS1302时钟芯片,DS18B20温度传感器等,其它器材任选。1.3设计要求(1)在LCD1602上显示年月日,星期,时分秒,温度,通过3个独立按键修改时间。(2)显示格式:LCD第一行:年-月-日 星期 LCD第二行:时-分-秒 温度1.4 设计人员分工伍国豪:整体电路设计,焊接电路刘青梅、何盈财:软件设计2课设所需软件简介2.1 Keil uVision4的简要介绍 2009年2月发布Keil Vision4,Keil Vision4引入灵活的窗口管理系统,使开发人员能够使用多台监视器,并提供了视觉上的表面对窗口位置的完全控制的任何地方。新的用户界面可以更好地利用屏幕空间和更有效地组织多个窗口,提供一个整洁,高效的环境来开发应用程序。新版本支持更多最新的ARM芯片,还添加了一些其他新功能。 1. 系统概述 Keil C51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。下面详细介绍Keil C51开发系统各部分功能和使用。 2. Keil C51单片机软件开发系统的整体结构 C51工具包的整体结构,uVision与Ishell分别是C51 for Windows和for Dos的集成开发环境(IDE),可以完成编辑、编译、连接、调试、仿真等整个开发流程。开发人员可用IDE本身或其它编辑器编辑C或汇编源文件。然后分别由C51及C51编译器编译生成目标文件(.OBJ)。目标文件可由LIB51创建生成库文件,也可以与库文件一起经L51连接定位生成绝对目标文件(.ABS)。ABS文件由OH51转换成标准的Hex文件,以供调试器dScope51或tScope51使用进行源代码级调试,也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如EPROM中。 使用独立的Keil仿真器时,注意事项 :* 仿真器标配11.0592MHz的晶振,但用户可以在仿真器上的晶振插孔中换插其他频率的晶振。 * 仿真器上的复位按钮只复位仿真芯片,不复位目标系统。 * 仿真芯片的31脚(/EA)已接至高电平,所以仿真时只能使用片内ROM,不能使用片外ROM;但仿真器外引插针中的31脚并不与仿真芯片的31脚相连,故该仿真器仍可插入到扩展有外部ROM(其CPU的/EA引脚接至低电平)的目标系统中使用。 优点:1.Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。 2.与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。用过汇编语言后再使用C来开发,体会更加深刻。 Keil C51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。如图2.1所示:图2.1 KEIL操作界面2.2 STC-ISP的简要介绍STC-ISP 是一款单片机下载编程烧录软件,是针对STC系列单片机而设计的,可下载STC89系列、12C2052 系列和12C5410等系列的STC单片机,使用简便,现已被广泛使用。操作说明如下:(1) 打开STC-ISP,如下图界面,在MCU Type栏目下选中单片机,如STC90C516RC。如图2.2所示: 图2.2 ISP操作界面(2)查看设备管理器中的COM端口,波特率一般保持默认,如果遇到下载问题,可以适当下调一些。(3) 先确认硬件连接正确,点击“打开文件”并在对话框内找到您要下载的HEX文件。(4)选择所要下载的文件,这样可以使您在每次编译KEIL时HEX代码能自动加载到STC-ISP,点击“Download/下载”。(5)手动按下电源开关便即可把可执行文件HEX写入到单片机内,如图1.2是写入程序截图。(6)程序写入完毕,目标板开始运行程序结果。3方案分析与确定3.1 方案思路分析 由题目要求,根据设置的年月日的显示全年的年月公历、星期等信息。由于需要显示去年的日期以及星期等信息,普通的LED数码管显然已经不能胜任,为此,我们可以选择LCD1602液晶显示器完成课设要求。目前所具备的设备只有一块STC89C52RC的单片机,PC机。 课设要求显示日期、温度等信息,因此,我们需要一块DS1302时钟芯片和一个DS18B20温度传感器,该时钟芯片可以产生年份,月份,日期,星期,时,分,秒的数据,温度传感器可以实时采集当前环境的温度,完全可以完成课程设计的各项要求。基于以上分析,我们可以利用DS1302产生的各种时钟数据,DS18B20采集当前环境温度,由单片机完成对数据的读取,然后通过单片机将数据写至LCD1602,以显示数据,达到可视化的效果。如图3.1所示:CPULCD1602DS1302DS18B20 图3.1 整体设计框架图3.2 方案流程图根据以上分析,以及使用各种芯片的操作流程,我们可以大致确定课程设计的软件设计方案方案,其大致流程如图3.2所示:重新设置时间,并写至进DS1302的寄存器检测是否有时间校准按键按下CPU将数据送至LCD1602显示CPU读取DS18B20 ,DS1302的温度和时间数据相关引脚的特殊位定义相关数字及字母数组设置开始完成与DS18B20,LCD1602,DS1302相关的子函数的编程完成与DS18B20,LCD1602,DS1302相关的初始化设置图3.2 设计流程图4单元芯片电路的设置及总体设计4.1 DS1302芯片引脚功能 DS1302 是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个318的用于临时性存放数据的RAM寄存器。DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后备电源双电源引脚,同时提供了对后备电源进行涓细电流充电的能力。 DS1302的引脚排列,其中Vcc1为后备电源,VCC2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由Vcc1或Vcc2两者中的较大者供电。当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。当Vcc2小于Vcc1时,DS1302由Vcc1供电。X1和X2是振荡源,外接32.768kHz晶振。RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电运行时,在Vcc2.0V之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。I/O为串行数据输入输出端(双向),后面有详细说明。SCLK为时钟输入端。 如图4.1所示:图4.1 DS1302引脚定义图引脚描述:X1 X2 32.768KHz 晶振管脚GND 接地RST 复位脚I/O 数据输入/输出引脚SCLK 串行时钟Vcc1,Vcc2 电源供电管脚(VCC1为后备电源,VCC2为主电源)4.2 DS1302的使用方法使用DS1302时,要对其引脚和寄存器进行特殊设置,以实现所需功能。引脚设置后面会提及,这里不做说明,主要讲一下程序的编写。DS1302的的工作过程中包过读写一个字节数据等过程,下面做相应的解释。/* 功 能:写一个字节*/void write_byte(uchar dat)ACC=dat;RST=1;for(a=8;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=0;ACC=ACC1;return (ACC);/* 功 能:向1302芯片写函数,指定写入地址,数据*/void write_1302(uchar add,uchar dat)RST=0;SCLK=0;RST=1;write_byte(add);write_byte(dat);SCLK=1;RST=0;/* 功 能:从1302读数据函数,指定读取数据来源地址*/uchar read_1302(uchar add)/uchar temp;RST=0;SCLK=0;RST=1;write_byte(add);temp=read_byte();SCLK=1;RST=0;return(temp);/* 功 能:1302芯片初始化子函数*/void ds1302_init() /1302芯片初始化子函数(2010-01-07,12:00:00,week4)RST=0;SCLK=0;write_1302(0x8e,0x00); /允许写,禁止写保护 write_1302(0x8e,0x80); /打开写保护4.3 DS18B20芯片引脚功能DS18B20是DALLAS公司生产的单总线式数字温度传感器,它具有微型化、低功耗、高性能、搞干扰能力强、易配处理器等优点,特别适用于构成多点温度测控系统,可直接将温度转化成串行数字信号(提供9位二进制数字)给单片机处理,且在同一总线上可以挂接多个传感器芯片。它具有3引脚TO92小体积封装形式,温度测量范围为55125,可编程为9位12位A/D转换精度,测温分辨率可达0.0625,被测温度用符号扩展的16位数字量方式串行输出,其工作电源既可在远端引入,也可采用寄生电源方式产生,多个DS18B20可以并联到3根或2根线上,CPU只需一根端口线就能与多个DS18B20通信,占用微处理器的端口较少,可节省大量的引线和逻辑电路。以上特点使DS18B20非常适用于远距离多点温度检测系统。引脚定义图如图4.2所示:图4.2 DS18B20引脚定义图在TO-92和SO-8的封装中引脚有所不同,具体差别请查阅PDF手册,在TO-92封装中引脚分配如下: 1(GND):地2(DQ):单线运用的数据输入输出引脚3(VDD):可选的电源引脚DS18B20工作过程一般遵循以下协议:初始化ROM操作命令存储器操作命令处理数据这个命令读取暂存器的内容。读取将从字节0开始,一直进行下去,直到第9(字节8,CRC)字节读完。如果不想读完所有字节,控制器可以在任何时间发出复位命令来中止读取。4.4 DS18B20的使用方法使用DS1302时,要对其引脚和寄存器进行特殊设置,以实现所需功能。引脚设置后面会提及,这里不做说明,主要讲一下程序的编写。DS18B2的工作过程中包过读写一个字节数据等过程,下面做相应的解释。/*函数功能:DS18B20初始化子程序*/unsigned char Init_DS18B20(void)unsigned char x=0; DQ=0; /发送复位脉冲 DS18_delay(29); /延时(480ms) DQ=1; /拉高数据线 DS18_delay(3); /等待(1560ms) 等待存在脉冲 x=DQ; /获得存在信号(用于判断是否有器件) DS18_delay(25); / 等待时间隙结束 return(x); /返回存在信号,0 = 器件存在, 1 = 无器件/*函数功能:向DS18B20读一字节数据*/ReadOneChar(void) unsigned char i=0; unsigned char dat=0; for (i=8;i0;i-) DQ=1; DS18_delay(1); DQ=0; dat=1; /等效dat=dat1(dat=dat右移一位后的值) DQ=1; if(DQ) dat|=0x80; DS18_delay(4); return(dat);/*函数功能:向DS18B20写一字节数据*/WriteOneChar(unsigned char dat) unsigned char i=0; for(i=8;i0;i-) DQ=0; DQ=dat&0x01;DS18_delay(5);DQ=1;dat=1; /复合赋值运算,等效dat=dat1(dat=dat右移一位后的值)DS18_delay(4);/*函数功能:向DS18B20读温度值*/unsigned int ReadTemperature(void) Init_DS18B20();WriteOneChar(0xcc); WriteOneChar(0x44);DS18_delay(125);Init_DS18B20();WriteOneChar(0xcc);WriteOneChar(0xbe);tempL=ReadOneChar();tempH=ReadOneChar();4.5 LCD1602引脚功能1602液晶也叫1602字符型液晶它是一种专门用来显示字母、数字、符号等的点阵型液晶模块它有若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符。每位之间有一个点距的间隔每行之间也有间隔起到了字符间距和行间距的作用,正因为如此所以他不能显示图形 n1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。引脚图如图4.3所示: 图4.3 LCD1602引脚图1602采用标准的16脚接口,其中: 第1脚:VSS为电源地 第2脚:VDD接5V电源正极 第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会 产生“鬼影”,可以通过串联一个电阻来调整亮度)。 第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。 第5脚:RW为读写信号线,高电平时进行读操作,低电平时进行写操作。 第6脚:E(或EN)端为使能(enable)端。 第714脚:D0D7为8位双向数据端。 第1516脚:空116脚背光负极。4.6 LCD1602的使用write_1602com(uchar com) /*液晶写入指令函数*rs=0; rw=0; P0=com; delay(1);en=1; delay(1);en=0; write_1602dat(uchar dat) /*液晶写入数据函数*rs=1;rw=0; P0=dat; delay(1);en=1; delay(1);en=0; lcd_init() /*液晶初始化函数*write_1602com(0x38); write_1602com(0x0c); write_1602com(0x06); write_1602com(0x01); write_1602com(yh+1);/for(a=0;a14;a+)write_1602dat(tab1a); write_1602com(er+2); for(a=0;a8;a+)write_1602dat(tab2a); 5整体电路设计和程序源代码由上面的分析可以得到实验的电路图如图5.1所示:图5.1 系统原理图设计源代码如下:/*程序名称: LCD1602.C */#include#includeDS18B20.H#define uint unsigned int#define uchar unsigned charuchar a,miao,shi,fen,ri,yue,nian,week,flag,key1n,temp;/flag用于读取头文件中的温度值,和显示温度值#define yh 0x80 /LCD第一行的初始位置,因为LCD1602字符地址首位D7恒定为1(100000000=80)#define er 0x80+0x40 /LCD第二行初始位置sbit rs=P25;sbit rw=P26;sbit en=P27;sbit SCLK = P16; /*实时时钟时钟线引脚 */sbit IO = P35; /*实时时钟数据线引脚 */sbit RST = P17; /*实时时钟复位线引脚 */sbit ACC0=ACC0;sbit ACC7=ACC7;/校时按键与C51的引脚连接定义sbit key1=P32; /设置键sbit key2=P33; /加键sbit key3=P34; /减键uchar code tab1=20 - - ; /年显示的固定字符uchar code tab2= : : ; /时间显示的固定字符/延时函数,后面经常调用void delay(uint xms) /延时函数,有参函数uint x,y;for(x=xms;x0;x-) for(y=110;y0;y-);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_init() /*液晶初始化函数*write_1602com(0x38); /设置液晶工作模式write_1602com(0x0c); /开显示不显示光标write_1602com(0x06); /整屏不移动,光标自动右移write_1602com(0x01); /清显示write_1602com(yh+1); /日历显示for(a=0;a14;a+)write_1602dat(tab1a); /向液晶屏写日历显示的固定符号部分write_1602com(er+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=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_Decimal(uchar bcd) /BCD码转十进制函数,输入BCD,返回十进制 uchar Decimal; Decimal=bcd4; return(Decimal=Decimal*10+(bcd&=0x0F);void ds1302_init() /1302芯片初始化子函数RST=0;SCLK=0;write_1302(0x8e,0x00); /允许写,禁止写保护 write_1302(0x8e,0x80); /打开写保护/温度显示子函数void write_temp(uchar add,uchar dat) /向LCD写温度数据,并指定显示位置uchar gw,sw;gw=dat%10;/取得个位数字sw=dat/10;/取得十位数字write_1602com(er+add); /er是头文件规定的值0x80+0x40write_1602dat(0x30+sw); /数字+30得到该数字的LCD1602显示码write_1602dat(0x30+gw); /数字+30得到该数字的LCD1602显示码 write_1602dat(0xdf); /显示温度的小圆圈符号 write_1602dat(0x43); /显示C符号/时分秒显示子函数void write_sfm(uchar add,uchar dat) /向LCD写时分秒,有显示位置加、现示数据,两个参数uchar gw,sw;gw=dat%10; /取得个位数字sw=dat/10; /取得十位数字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_1602dat(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_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); write_1602dat(A); break;case 7:write_1602dat(S);/星期数据为7时显示 write_1602dat(U); write_1602dat(N); break;/*闰年的处理*uchar runnian(uchar nian,uchar yue)uchar nian1,yue1;nian1=nian;yue1=yue; switch(yue1) case 1: case 3: case 5: case 7: case 8: case 10: case 12: return 31; break; case 2: if(nian % 4 = 0 & nian % 100 != 0) / 判断是否为闰年 return 29; else return 28; break; case 4: case 6: case 9: case 11: return 30; break; default: break; /*按键扫描有关函数*void keyscan()if(key1=0) / key1为功能键(设置键)delay(9); /延时,用于消抖动if(key1=0) /延时后再次确认按键按下while(!key1);key1n+;if(key1n=9)key1n=1; /设置按键共有秒、分、时、星期、日、月、年、返回,8个功能循环switch(key1n)case 1: TR0=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位置显示光标break;case 3: write_1602com(er+3); /按动3次,shibreak;case 4: write_1602com(yh+0x0e); /按动4次,weekbreak;case 5: write_1602com(yh+0x0a); /按动5次,ribreak;case 6: write_1602com(yh+0x07); /按动6次,yuebreak;case 7: write_1602com(yh+0x04); /按动7次,nianbreak;case 8:write_1602com(0x0c); /按动到第8次,设置光标不闪烁TR0=1; /打开定时器 temp=(miao)/10*16+(miao)%10; write_1302(0x8e,0x00); write_1302(0x80,0x00|temp); /miao数据写入DS1302 write_1302(0x8e,0x80); break;/-加键key2-if(key1n!=0) /当key1按下以下。再按以下键才有效(按键次数不等于零)if(key2=0)delay(10);if(key2=0)while(!key2);switch(key1n)case 1:miao+; /设置键按动1次,调秒if(miao=60)miao=0; /秒超过59,再加1,就归零write_sfm(0x08,miao); /令LCD在正确位置显示加设定好的秒数temp=(miao)/10*16+(miao)%10; /十进制转换成BCD码 write_1302(0x8e,0x00); /允许写,禁止写保护 write_1302(0x80,temp); write_1302(0x8e,0x80); /打开写保护write_1602com(er+0x09); break;case 2:fen+;if(fen=60)fen=0;write_sfm(0x05,fen); /令LCD在正确位置显示加设定好的分数据 temp=(fen)/10*16+(fen)%10; /十进制转换成DS1302要求的DCB码 write_1302(0x8e,0x00); /允许写,禁止写保护 write_1302(0x82,temp); write_1302(0x8e,0x80); /打开写保护write_1602com(er+6); break;case 3:shi+;if(shi=24)shi=0;write_sfm(2,shi); temp=(shi)/10*16+(shi)%10; /十进制转换成DS1302要求的DCB码 write_1302(0x8e,0x00); /允许写,禁止写保护 write_1302(0x84,temp); write_1302(0x8e,0x80); /打开写保护write_1602com(er+3); break;case 4:week+;if(week=8)week=1; write_1602com(yh+0x0C); /指定加后的周数据显示位置write_week(week); /指定周数据显示内容 temp=(week)/10*16+(week)%10; /十进制转换成DS1302要求的DCB码 write_1302(0x8e,0x00); /允许写,禁止写保护 write_1302(0x8a,temp); write_1302(0x8e,0x80); /打开写保护 write_1602com(yh+0x0e); break;case 5:ri+; yue = BCD_Decimal(read_1302(0x89); nian=BCD_Decimal(read_1302(0x8d);if(ri=28)ri=runnian(nian,yue);write_nyr(9,ri); /令LCD在正确的位置显示加设定好的日期数据temp=(ri)/10*16+(ri)%10; /十进制转换成DS1302要求的DCB码 write_1302(0x8e,0x00); /允许写,禁止写保护 write_1302(0x86,temp); write_1302(0x8e,0x80); /打开写保护write_1602com(yh+10); break;case 6:yue+;if(yue=13)yue=1;write_nyr(6,yue); temp=(yue)/10*16+(yue)%10; /十进制转换成DS1302要求的DCB码 write_1302(0x8e,0x00); /允许写,禁止写保护 write_1302(0x88,temp); write_1302(0x8e,0x80); /打开写保护write_1602com(yh+7); break;case 7:nian+; if(nian=100)nian=0;write_nyr(3,nian); temp=(nian)/10*16+(nian)%10; write_1302(0x8e,0x00); /允许写,禁止写保护 write_1302(0x8c,temp); write_1302(0x8e,0x80); /打开写保护write_1602com(yh+4); break;/-减键key3,各句功能参照加键注释-if(key3=0)delay(10); /调延时,消抖动if(key3=0)while(!key3);switch(key1n)case 1:miao-;if(miao=-1)miao=59;write_sfm(0x08,miao); temp=(miao)/10*16+(miao)%10; write_1302(0x8e,0x00); write_1302(0x80,temp); write_1302(0x8e,0x80); write_1602com(er+0x09); /write_1602com(0x0b);break;case 2:fen-;if(fen=-1)fen=59;write_sfm(5,fen);temp=(fen)/10*16+(fen)%10; write_1302(0x8e,0x00); write_1302(0x82,temp); write_1302(0x8e,0x80); write_1602com(er+6); break;case 3:shi-; if(shi=-1)shi=23;write_sfm(2,shi);temp=(shi)/10*16+(shi)%10; write_1302(0x8e,0x00); write_1302(0x84,temp); write_1302(0x8e,0x80); write_1602com(er+3); break;case 4:week-;if(week=0)week=7; write_1602com(yh+0x0C); write_week(week); temp=(week)/10*16+(week)%10; write_1302(0x8e,0x00); write_1302(0x8a,temp); write_1302(0x8e,0x80); write_1602com(yh+0x0e); break;case 5:ri-;if(ri=0)ri=31;write_nyr(9,ri);temp=(ri)/10*16+(ri)%10; write_1302(0x8e,0x00); write_1302(0x86,temp); write_1302(0x8e,0x80); write_1602com(yh+10); break;case 6:yue-;if(yue=0)yue=12;write_nyr(6,yue);temp=(yue)/10*16+(yue)%10; write_1302(0x8e,0x00); write_1302(0x88,temp); write_1302(0x8e,0x80); write_1602com(yh+7); break;case 7:nian-; if(nian=-1)
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑环境 > 建筑工程


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!