




已阅读5页,还剩21页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
武汉理工大学单片机课程设计 1 0 1 DS1302 实时时钟 (1) 时钟芯片 DS1302 的工作原理: DS1302 在每次进行读、写程序前都必须初始化,先把 SCLK 端置 “0”,接着把 RST 端置“1”,最后才给予 SCLK 脉冲;读/写时序如下图所示。为 DS1302 的控制字,此控制 字的位 7 必须置 1,若为 0 则不能把对 DS1302 进行读写数据。对于位 6,若对程序进行 读/写时 RAM=1,对时间进行读/写时,CK=0。位 1 至位 5 指操作单元的地址。位 0 是读/ 写操作位,进行读操作时,该位为 1;该位为 0 则表示进行的是写操作。控制字节总是从 最低位开始输入/输出的。表 6 为 DS1302 的日历、时间寄存器内容:“CH”是时钟暂停标 志位,当该位为 1 时,时钟振荡器停止,DS1302 处于低功耗状态;当该位为 0 时,时钟 开始运行。 “WP”是写保护位,在任何的对时钟和 RAM 的写操作之前,WP 必须为 0。当 “WP”为 1 时,写保护位防止对任一寄存器的写操作。 (2) DS1302 的控制字节 DS1302 的控制字如表-1 所示。控制字节的高有效位(位 7)必须是逻辑 1,如果它 为 0,则不能把数据写入 DS1302 中,位 6 如果 0,则表示存取日历时钟数据,为 1 表示 存取 RAM 数据;位 5 至位 1 指示操作单元的地址;最低有效位(位 0)如为 0 表示要进 行写操作,为 1 表示进行读操作,控制字节总是从最低位开始输出 表-1 DS1302 的控制字格式 RAM RD 1 A4 A3 A2 A1 A0 / CK /WR (3) 数据输入输出(I/O) 在控制指令字输入后的下一个 SCLK 时钟的上升沿时,数据被写入 DS1302,数据输 入从低位即位 0 开始。同样,在紧跟 8 位的控制指令字后的下一个 SCLK 脉冲的下降沿 读出 DS1302 的数据,读出数据时从低位 0 位到高位 7。如下图 1 所示 武汉理工大学单片机原理与应用课程设计说明书 1 图 1 DS1302 读/写时序图 (4) DS1302 的寄存器 DS1302 有 12 个寄存器,其中有 7 个寄存器与日历、时钟相关,存放的数据位为 BCD 码形式,其日历、时间寄存器及其控制字见表-2。 表-2 DS1302 的日历、时间寄存器 此外,DS1302 还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与 RAM 相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器 内容。 DS1302 与 RAM 相关的寄存器分为两类:一类是单个 RAM 单元,共 31 个,每 个单元组态为一个 8 位的字节,其命令控制字为 C0HFDH,其中奇数为读操作,偶数 为写操作;另一类为突发方式下的 RAM 寄存器,此方式下可一次性读写所有的 RAM 的 31 个字节,命令控制字为 FEH(写)、FFH(读)。 写寄 存器 读寄 存器 Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit0 80H81HCH10 秒秒 82H83H10 分分 10 84H85H12/240 /PMAM 时时 86H87H0010 日日 88H89H00010 月月 8AH8BH00000星期 8CH8DH10 年年 8EH8FHWP0000000 2 2 方案论证与设计 2.1 控制器部分方案设计 硬件控制电路主要用了 AT89C52 芯片处理器、1602LCD 显示器、DS1302 实时时钟、 DB18B20 温度传感器。根据各自芯片的功能互相连接成电子万年历的控制电路。软件控 制程序主要有主控程序、电子万年历的时间控制程序、时间显示及温度显示程序等组成。 设计框图如图 2.1 所示 图 2.1 框图设计 2.2 显示部分的方案论证 方案一:采用 8 段数码管虽经济实惠,但操作比液晶显示来说略显繁琐。 方案二:液晶显示方式。液晶显示效果出众,可以运用菜单项来方便操作,比较简 单,所以,最后选择液晶显示方案。显示电路图如图 2.2 所示。 图 2.2 液晶显示电路 2.3 实时时钟电路设计 图 2.3 是 DS1302 与单片机的连接,其中 Vcc1 为后备电源,Vcc2 为主电源。在主电 源关闭的情况下,也能保持时钟的连续运行。DS1302 由 Vcc1 或 Vcc2 两者中的较大者供 电。当 Vcc2 大于 Vcc1+0.2V 时,Vcc2 给 DS1302 供电。当 Vcc2 小于 Vcc1 时,DS1302 由 Vcc1 供电。X1 和 X2 是振荡源,外接 32.768KHz 晶振。 AT89C52 主控模块 1602 液晶显示 DS1302 时钟电路 独立键盘电路 DS18B20 实时环境温度采 集电路 蜂鸣器 武汉理工大学单片机原理与应用课程设计说明书 3 图 2.3 DS1302 时钟电路 2.4 温度采集模块设计 如图 2.4 所示,采用数字式温度传感器 DS18B20,它是数字式温度传感器,具有测量 精度高,电路连接简单特点,此类传感器仅需要一条数据线进行数据传输,使用 P3.7 与 DS18B20 的 I/O 口连接加一个上拉电阻,Vcc 接电源,Vss 接地。 图 2.4 DS18B20 温度采集模块 2.5 功能按钮设计 当按钮被按下时,该按钮对应的 I/O 口被拉为低电平,松开时按钮对应的 I/O 口由内部 的上拉电阻将该 I/O 拉为高电平,如图 2.5 所示: 图 2.5 键盘电路设计 4 2.6 总体电路图 武汉理工大学单片机原理与应用课程设计说明书 5 3 软件设计流程 3.1 系统总流程图 系统总体流程图如图 3.1 所示,系统流程图设计分析如下:首系统初始化,系统运行, 当有设置键按下时进入时间修改模式,无按键按下时读取时间温度等数据送入显示器显 示。在时间修改模式下设置时间完成后再将时间送入显示器显示。 图 3.1 系统流程图 3.2 温度程序流程图 温度读取程序流程图如图 3.2 所示。流程图分析:开始进入初始化 DS18B20,就是通 过主机拉低单线产生复位脉冲然后释放总线,如果有应答就发起 ROM 命令,当成功执行 操作命令后,就使用温度转换,当温度转换完成后又初始化 DS18B20 是否有应答脉冲, 若有就发起读暂存器和 CRC 命令,同时读出第一第二字节即温度数据。 6 图 3.2 温度读取程序流程图 3.3 DS1302 时钟程序流程图 时钟流程图如图 3.3 所示,流程图分析:DS1302 开始计时时,首先进行初始化,当 有中断信号时,读取时钟芯片的时间数据送入液晶显示。这时若有设置键按下,进行时 间修改,完成后将时间数据送入 1302 芯片,若没有按键按下,直接送入 EPROM 中,送 入液晶显示。 武汉理工大学单片机原理与应用课程设计说明书 7 图 3.3 时钟程序流程图 DS1302 时钟部分子程序 void write_byte(uchar dat)/写一个字节 ACC=dat; RST=1; for(a=8;a0;a-) IO=ACC0; SCLK=0; /产生上升沿写入数据,从低位写入 SCLK=1; ACC=ACC1; 8 uchar read_byte()/读一个字节 RST=1; for(a=8;a0;a-) ACC7=IO; SCLK=1; /产生下降沿输出数据,先输出低位,保存到 ACC 中 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; 武汉理工大学单片机原理与应用课程设计说明书 9 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 void ds1302_init() /1302 芯片初始化子函数(2012-06-18,12:00:00,week7) RST=0; SCLK=0; write_1302(0x8e,0x00); /允许写,禁止写保护 write_1302(0x80,0x00); /向 DS1302 内写秒寄存器 80H 写入初始秒数据 00 write_1302(0x82,0x00);/向 DS1302 内写分寄存器 82H 写入初始分数据 00 write_1302(0x84,0x12);/向 DS1302 内写小时寄存器 84H 写入初始小时数据 12 write_1302(0x8a,0x07);/向 DS1302 内写周寄存器 8aH 写入初始周数据 4 write_1302(0x86,0x17);/向 DS1302 内写日期寄存器 86H 写入初始日期数据 18 write_1302(0x88,0x06);/向 DS1302 内写月份寄存器 88H 写入初始月份数据 06 write_1302(0x8c,0x12);/向 DS1302 内写年份寄存器 8cH 写入初始年份数据 12 write_1302(0x8e,0x80); /打开写保护 10 3.4 LCD 显示程序流程图 显示流程图如图 3.4 所示,流程图分析如下:首先对 1602 显示屏进行初始化(初始 化大约持续 10ms) ,然后检查忙信号,若 BF=0,则获得显示 RAM 地址,写入相应的数 据显示。若 BF=1,则代表模块正在进行内部操作,不接受任何外部指令和数据,直到 BF=0 为止。 图 3.4 LCD 显示程序流程图 武汉理工大学单片机原理与应用课程设计说明书 11 4 万年历的仿真与调试结果 上电后的显示 秒调节 功能按键,自上而下功能依次为调节按键、加按键、减按键 12 5 心得体会 本次设计是我们遇到过的较大的设计,所以遇到的问题也比较的多,尤其是以前没 有接触过如此复杂的硬件电路以及软件编程,在软、硬件设计和调试中遇到了不少的困 难,在同学的帮助才逐一克服了难题,学习到了不少的专业知识。 在整个设计过程之前,我已经在网上找了相关方面的资料,万事开始难,一开始不知 道从哪里下手。后来慢慢学会分析系统,将系统模块化,各个模块可以在软件或者硬件 上实现。在确保各个模块的硬件电路和与之相搭配的程序能够正常工作后在把它们组成 一个系统。在今后的日子里,我会进一步加强自己的动手能力,丰富自己的知识面。 武汉理工大学单片机原理与应用课程设计说明书 13 参考文献参考文献 1李朝青.单片机原理及接口技术M,北京:北京航天航空大学出版社,2005 2李广弟.单片机基础M,北京:北京航空航天大学出版社,2000 3万光毅.单片机实验与实践教程M,北京:北京航空航天大学出版社,2003 4唐亚平、李移伦.单片机原理实训与学习指导M,长沙:中南大学出版社,2006 5刘军.单片机原理与接口技术M,华东理工大学出版社,2006 6谢自美.电子线路设计、实验、测试M,武汉:华中理工大学出版社,2000 14 附件 万年历源程序 #include #include“DS18B20_3.H“ #define uint unsigned int #define uchar unsigned char uchar 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 第二行初始位置(因为第二行第一个字符位置地址是 0x40) /液晶屏的与 C51 之间的引脚连接定义(显示数据线接 C51 的 P0 口) sbit rs=P26; /寄存器选择 sbit en=P27; /下降沿使能 sbit rw=P25; /读写信号线 /DS1302 时钟芯片与 C51 之间的引脚连接定义 sbit IO=P34;/数据线 sbit SCLK=P36; sbit RST=P35; sbit ACC0=ACC0; sbit ACC7=ACC7; ACC 累加器=A ACC.0=E0H /校时按键与 C51 的引脚连接定义 sbit key1=P20; /设置键 sbit key2=P21; /加键 sbit key3=P22; /减键 sbit buzzer=P15;/蜂鸣器,端口低电平响 uchar code tab1=“20 - - “; /年显示的固定字符 uchar code tab2=“ : : “;/时间显示的固定字符 /延时函数,后面经常调用 void delay(uint xms)/延时函数,有参函数 uint x,y; for(x=xms;x0;x-) for(y=120;y0;y-); void write_1602com(uchar com)/*液晶写入指令函数* rs=0;/数据/指令选择置为指令 rw=0; /读写选择置为写 P0=com;/送入数据 delay(1); en=1;/拉高使能端,为制造有效的下降沿做准备 武汉理工大学单片机原理与应用课程设计说明书 15 delay(1); en=0;/en 由高变低,产生下降沿,液晶执行命令 void write_1602dat(uchar dat)/*液晶写入数据函数* rs=1;/数据/指令选择置为数据 rw=0; /读写选择置为写 P0=dat;/送入数据 delay(1); en=1; /en 置高电平,为制造下降沿做准备 delay(1); en=0; /en 由高变低,产生下降沿,液晶执行命令 void lcd_init()/*液晶初始化函数* write_1602com(0x38);/设置液晶工作模式,意思:16*2 行显示,5*7 点阵,8 位数据 write_1602com(0x0c);/开显示不显示光标 write_1602com(0x06);/整屏不移动,光标自动右移 write_1602com(0x01);/清显示 write_1602com(yh+1);/日历显示固定符号从第一行第 1 个位置之后开始显示 for(a=0;a0;a-) IO=ACC0; SCLK=0; /产生上升沿写入数据,从低位写入 SCLK=1; ACC=ACC1; uchar read_byte()/读一个字节 16 RST=1; for(a=8;a0;a-) ACC7=IO; SCLK=1; /产生下降沿输出数据,先输出低位,保存到 ACC 中 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 void ds1302_init() /1302 芯片初始化子函数(2012-06-18,12:00:00,week7) RST=0; SCLK=0; write_1302(0x8e,0x00); /允许写,禁止写保护 write_1302(0x80,0x00); /向 DS1302 内写秒寄存器 80H 写入初始秒数据 00 武汉理工大学单片机原理与应用课程设计说明书 17 write_1302(0x82,0x00);/向 DS1302 内写分寄存器 82H 写入初始分数据 00 write_1302(0x84,0x12);/向 DS1302 内写小时寄存器 84H 写入初始小时数据 12 write_1302(0x8a,0x07);/向 DS1302 内写周寄存器 8aH 写入初始周数据 4 write_1302(0x86,0x17);/向 DS1302 内写日期寄存器 86H 写入初始日期数据 18 write_1302(0x88,0x06);/向 DS1302 内写月份寄存器 88H 写入初始月份数据 06 write_1302(0x8c,0x12);/向 DS1302 内写年份寄存器 8cH 写入初始年份数据 12 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+0x40 write_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;/取得十位数字 write_1602com(er+add);/er 是头文件规定的值 0x80+0x40 write_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);/设定显示位置为第一个位置+add write_1602dat(0x30+sw);/数字+30 得到该数字的 LCD1602 显示码 write_1602dat(0x30+gw);/数字+30 得到该数字的 LCD1602 显示码 void write_week(uchar week)/写星期函数 write_1602com(yh+0x0c);/星期字符的显示位置 switch(week) 18 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; /*键盘扫描有关函数* void keyscan() if(key1=0)/-key1 为功能键(设置键)- delay(9);/延时,用于消抖动 if(key1=0)/延时后再次确认按键按下 buzzer=0;/蜂鸣器短响一次 delay(20); buzzer=1; while(!key1); key1n+; if(key1n=9) key1n=1;/设置按键共有秒、分、时、星期、日、月、年、返回,8 个功能循环 武汉理工大学单片机原理与应用课程设计说明书 19 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(0x0f); 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); break; 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 按下以下。再按以下键才有效(按键次数不等于零) 20 if(key2=0) /上调键 delay(10); if(key2=0) buzzer=0;/蜂鸣器短响一次 delay(20); buzzer=1; 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;/十进制转换成 DS1302 要求的 BCD 码 write_1302(0x8e,0x00); /允许写,禁止写保护 write_1302(0x80,temp); /向 DS1302 内写秒寄存器 80H 写入调整后的秒数据 BCD 码 write_1302(0x8e,0x80); /打开写保护 write_1602com(er+0x09);/因为设置液晶的模式是写入数据后,光标自动右移,所以要指定返回 /write_1602com(0x0b); 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);/向 DS1302 内写分寄存器 82H 写入调整后的分数据 BCD 码 write_1302(0x8e,0x80);/打开写保护 write_1602com(er+6);/因为设置液晶的模式是写入数据后,指针自动加一,在这里是写回原来的位 置 break; case 3:shi+; if(shi=24) shi=0; write_sfm(2,shi);/令 LCD 在正确的位置显示“加“设定好的小时数据 temp=(shi)/10*16+(shi)%10;/十进制转换成 DS1302 要求的 DCB 码 write_1302(0x8e,0x00);/允许写,禁止写保护 write_1302(0x84,temp);/向 DS1302 内写小时寄存器 84H 写入调整后的小时数据 BCD 码 write_1302(0x8e,0x80);/打开写保护 write_1602com(er+3);/因为设置液晶的模式是写入数据后,指针自动加一,所以需要光标回位 break; case 4:week+; 武汉理工大学单片机原理与应用课程设计说明书 21 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);/向 DS1302 内写周寄存器 8aH 写入调整后的周数据 BCD 码 write_1302(0x8e,0x80);/打开写保护 write_1602com(yh+0x0e);/因为设置液晶的模式是写入数据后,指针自动加一,所以需要光标回 位 break; case 5:ri+; if(ri=32) ri=1; write_nyr(9,ri);/令 LCD 在正确的位置显示“加“设定好的日期数据 temp=(ri)/10*16+(ri)%10;/十进制转换成 DS1302 要求的 DCB 码 write_1302(0x8e,0x00);/允许写,禁止写保护 write_1302(0x86,temp);/向 DS1302 内写日期寄存器 86H 写入调整后的日期数据 BCD 码 write_1302(0x8e,0x80);/打开写保护 write_1602com(yh+10);/因为设置液晶的模式是写入数据后,指针自动加一,所以需要光标回位 break; case 6:yue+; if(yue=13) yue=1; write_nyr(6,yue);/令 LCD 在正确的位置显示“加“设定好的月份数据 temp=(yue)/10*16+(yue)%10;/十进制转换成 DS1302 要求的 DCB 码 write_1302(0x8e,0x00);/允许写,禁止写保护 write_1302(0x88,temp);/向 DS1302 内写月份寄存器 88H 写入调整后的月份数据 BCD 码 write_1302(0x8e,0x80);/打开写保护 write_1602com(yh+7);/因为设置液晶的模式是写入数据后,指针自动加一,所以需要光标回位 break; case 7:nian+; if(nian=100) nian=0; write_nyr(3,nian);/令 LCD 在正确的位置显示“加“设定好的年份数据 temp=(nian)/10*16+(nian)%10;/十进制转换成 DS1302 要求的 DCB 码 write_1302(0x8e,0x00);/允许写,禁止写保护 write_1302(0x8c,temp);/向 DS1302 内写年份寄存器 8cH 写入调整后的年份数据 BCD 码 write_1302(0x8e,0x80);/打开写保护 write_1602com(yh+4);/因为设置液晶的模式是写入数据后,指针自动加一,所以需要光标回位 break; /-减键 key3,各句功能参照加键注释- 22 if(key3=0) delay(10);/调延时,消抖动 if(key3=0) buzzer=0;/蜂鸣器短响一次 delay(20); buzzer=1; while(!key3); switch(key1n) case 1:miao-; if(miao=-1) miao=59;/秒数据减到-1 时自动变成 59 write_sfm(0x08,miao);/在 LCD 的正确位置显示改变后新的秒数 temp=(miao)/10*16+(miao)%10;/十进制转换成 DS1302 要求的 DCB 码 write_1302(0x8e,0x00); /允许写,禁止写保护 write_1302(0x80,temp); /向 DS1302 内写秒寄存器 80H 写入调整后的秒数据 BCD 码 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;/十进制转换成 DS1302 要求的 DCB 码 write_1302(0x8e,0x00);/允许写,禁止写保护 write_1302(0x82,temp);/向 DS1302 内写分寄存器 82H 写入调整后的分数据 BCD 码 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;/十进制转换成 DS1302 要求的 DCB 码 write_1302(0x8e,0x00);/允许写,禁止写保护 write_1302(0x84,temp);/向 DS1302 内写小时寄存器 84H 写入调整后的小时数据 BCD 码 write_1302(0x8e,0x80);/打开写保护 write_1602com(er+3);/因为设置液晶的模式是写入数据后,指针自动加一,所以需要光标回位 break; 武汉理工大学单片机原理与应用课程设计说明书 23 case 4:week-; if(week=0) week=7; write_1602com(yh+0x0C);/指定加后的周数据显示位置 write_week(week);/指定周数据显示内容 temp=(week)/10*16+(week)%10;/十进制转换成 DS1302 要求的 DCB 码 write_1302(0x8e,0x00);/允许写,禁止写保护 write_1302(0x8a,temp);/向 DS1302 内写周寄存器 8aH 写入调整后的周数据 BCD 码 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;/十进制转换成 DS1302 要求的 DCB 码 write_1302(0x8e,0x00);/允许写,禁止写保护 write_1302(0x86,temp);/向 DS1302 内写日期寄存器 86H 写入调整后的日期数据 BCD 码 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;/十进制转换成 DS1302 要求的 DCB 码 write_1302(0x8e,0x00);/允许
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 专业知识试题及答案
- 砂石料购销合同范本
- 会计学专业试题及答案
- 宾馆酒店消防安全测试题及答案解析
- 证券从业考试境外毕业及答案解析
- 证券从业资格考试加群及答案解析
- 师德师风考试题库及答案
- 银行招聘考试试题及答案
- 2025年起重机械指挥考试题库及起重机械指挥解析
- 小黑课堂模拟试题及答案
- 新闻发布知识培训课件
- GB/T 18277-2025收费公路收费制式和收费方式
- 高一语文学法指导(绝对经典)
- 包装车间基础知识培训课件
- 2025年贵州建筑中级试题及答案
- 古代服饰复原与租赁服务创新创业项目商业计划书
- 河北社区工作管理办法
- 超声内镜检查及护理配合
- 数字人文与档案重构-洞察及研究
- 关于密码的课件
- 小儿腹泻患者的健康宣教
评论
0/150
提交评论