ImageVerifierCode 换一换
格式:DOCX , 页数:17 ,大小:18.42KB ,
资源ID:7674717      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7674717.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(RTC实时时钟预约开机自动煲粥电饭煲.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

RTC实时时钟预约开机自动煲粥电饭煲.docx

1、RTC实时时钟预约开机自动煲粥电饭煲/*文件名:RTC实时时钟预约开机自动煲粥电饭煲作者; 枫落版本: V11.11.1说明: 通过RTC实时时钟断电走时,预约开机时只需要调试CLOCK时间开机, 然后全功率加热水开后半功率熬闷,熬完之后自动间歇加热(保温 不改变普通电饭煲内部工作电路使电饭煲变智能。 1602液晶显示当前时间和开机预约时间 默认预约时间为05:30 RTC时钟DS1302芯片保证时间延续性 四按键控制简单明了 傻瓜式操作界面修改记录:2012年4月17日基本完成功能,加装无限延时程序可以使用 备份时间2012年4月18日*/*头文件*/#include#include #in

2、clude #include #define uint unsigned int#define uchar unsigned char/*1302地址定义*/#define WRITE_SECOND 0x80#define WRITE_MINUTE 0x82#define WRITE_HOUR 0x84#define READ_SECOND 0x81#define READ_MINUTE 0x83#define READ_HOUR 0x85#define WRITE_PROTECT 0x8E/*位地址*8*/sbit ACC_7 = ACC7;/管脚定义/*LCD1602设置 START* /

3、#define LCD_DB P0 sbit LCD_RS=P26; sbit LCD_RW=P25; sbit LCD_E=P27; sbit KZ=P10; /键盘控制键sbit SJ=P11; /小时加sbit FJ=P12; /分钟加sbit NKZ=P13;/闹钟控制/sbit KT=P13;sbit SCLK = P36; / DS1302时钟信号7脚sbit DIO= P34; / DS1302数据信号6脚sbit CE = P35; / DS1302片选5脚sbit ZK=P14; /高压总开关sbit MK=P30; /模式控制/*变量*/uchar duan,wei; /当

4、前显示的段数据,位数据/sbit DQ=P37;/uint templ,temph;/uint shuju=0x0000;uchar BZW=0;uchar ZKB=1,MKB=1;uchar Nfen=30,Nshi=5; /闹钟变量uchar Nfen_1,Nshi_1;/加热开水延时量uchar hc6; /数据拆分缓冲变量uchar Miao,Fen,Shi; /时分秒变量uchar code duanma=0123456789; /LED显示字段码/uchar code weima=0x05,0x04,0x03,0x02,0x01,0x00; /动态显示数据位码/*延时函数*/voi

5、d Delay(uint i) uint x,y; for(x=i;x0;x-) for(y=120;y0;y-) ; /*短延时*void TempDelay (unsigned char idata us) while(us-); */*地址、数据发送子程序 */void Write1302 ( unsigned char addr,dat ) unsigned char i,temp; CE=0; /CE引脚为低,数据传送中止 SCLK=0; /清零时钟总线 CE = 1; /CE引脚为高,逻辑控制有效 /发送地址 for ( i=8; i0; i- ) /循环8次移位 SCLK = 0

6、; temp = addr; DIO = (bit)(temp&0x01); /每次传输低字节 addr = 1;/右移一位 SCLK = 1; /发送数据 for ( i=8; i0; i- ) SCLK = 0; temp = dat; DIO = (bit)(temp&0x01); dat = 1; SCLK = 1; CE = 0;/*数据读取子程序 */unsigned char Read1302 ( unsigned char addr ) unsigned char i,temp,dat1,dat2; CE=0; SCLK=0; CE = 1;/发送地址 for ( i=8; i

7、0; i- ) /循环8次移位 SCLK = 0; temp = addr; DIO = (bit)(temp&0x01); /每次传输低字节 addr = 1;/右移一位 SCLK = 1; /读取数据 for ( i=8; i0; i- ) ACC_7=DIO; SCLK = 0; ACC=1; SCLK = 1; CE=0; dat1=ACC; dat2=dat1/16; /数据进制转换 dat1=dat1%16; /十六进制转十进制 dat1=dat1+dat2*10; return (dat1);/*数据处理*/void sjcl(uchar dat,det) /dat为待拆分数据,

8、det为即将存入缓冲数组位置 hcdet=dat%10; hcdet+1=dat/10;/*BCD码转换函数*/uchar To_BCD(uchar dat) /十进制转BCD码 uchar temp,temp1; temp=dat/10; temp1=dat%10; dat=temp*16+temp1; return (dat);/*- ;模块名称:delay_n10us(); ;功 能:延时函数,延时约n个10us ;占用资源:- ;参数说明:- ;-*/ void delay_n10us(uint n) /延时n个10us12M晶振 uint i; for(i=n;i0;i-) _nop

9、_();_nop_();_nop_();_nop_();_nop_();_nop_(); /*- ;模块名称:LCD_write_command(); ;功 能:LCD1602写指令函数 ;占用资源: P2.0-RS(LCD_RS),P2.1-RW(LCD_RW),P2.2-E(LCD_E). ;参数说明:dat 为写命令参数 ;-*/ void LCD_write_command(uchar dat) delay_n10us(10); LCD_RS=0; /指令 LCD_RW=0; /写入 LCD_E=1; /允许 LCD_DB=dat; delay_n10us(10); / LCD_E=0

10、; delay_n10us(10); / /*- ;模块名称:LCD_write_data(); ;功 能:LCD1602写数据函数 ;占用资源: P2.0-RS(LCD_RS),P2.1-RW(LCD_RW),P2.2-E(LCD_E). ;参数说明:dat 为写数据参数 ;-*/ void LCD_write_data(uchar dat) delay_n10us(10); LCD_RS=1; /数据 LCD_RW=0; /写入 LCD_E=1; /允许 LCD_DB=dat; delay_n10us(10); LCD_E=0; delay_n10us(10); /*- ;模块名称: ;功

11、 能:显示一个字符 ;占用资源:- ;参数说明: ;-*/ void LCD_disp_char(uchar x,uchar y,uchar dat) uchar address; if(y=1) address=0x80+x; else address=0xc0+x; LCD_write_command(address); LCD_write_data(dat); /*- ;模块名称: ;功 能:显示一个字符串。 ;占用资源:- ;参数说明: ;-*/ void LCD_disp_str(uchar x,uchar y,uchar *str) uchar address; if(y=1) a

12、ddress=0x80+x; else address=0xc0+x; LCD_write_command(address); while(*str!=0) LCD_write_data(*str); str+; /*- ;模块名称:LCD_init(); ;功 能:初始化LCD1602 ;占用资源:- ;参数说明:- ;-*/ void LCD_init(void) delay_n10us(10); LCD_write_command(0x38);/设置8位格式,2行,5x7 delay_n10us(10); LCD_write_command(0x0c);/整体显示,关光标,不闪烁 del

13、ay_n10us(10); LCD_write_command(0x06);/设定输入方式,增量不移位 delay_n10us(10); LCD_write_command(0x01);/清除屏幕显示 delay_n10us(100); /延时清屏,延时函数,延时约n个10us void xianshi_1(uchar xx,wei) LCD_disp_char(xx,1,0x3a); LCD_disp_char(xx+2,1,duanmahcwei); LCD_disp_char(xx+1,1,duanmahcwei+1); void xianshi_2(uchar xx,wei) LCD_

14、disp_char(xx,2,0x3a); LCD_disp_char(xx+2,2,duanmahcwei); LCD_disp_char(xx+1,2,duanmahcwei+1); /*键盘扫描*/void Keybod() uchar fen,shi; /调试RTC时钟缓冲变量 fen=Fen; shi=Shi; sjcl(fen,2); sjcl(shi,4); LCD_write_command(0x01); Delay(1); LCD_disp_str(0,1,Time); xianshi_1(4,4); xianshi_1(7,2); LCD_disp_str(14,1,T);

15、/显示调试界面 Delay(500); while(1) /进入调试模式,进行键盘扫描 if(SJ=0) /小时调试 shi+; if(shi=24) shi=0; sjcl(shi,4); xianshi_1(4,4); Delay(250); SJ=1; if(FJ=0) /分钟调试 fen+; if(fen=60) fen=0; sjcl(fen,2); xianshi_1(7,2); Delay(250); FJ=1; if(KZ=0) /调试完毕返回待机界面 Fen=fen; Shi=shi; shi=To_BCD(shi); fen=To_BCD(fen); Miao=0x00;

16、Write1302 (WRITE_PROTECT,0X00); /禁止写保护 Write1302(WRITE_SECOND,Miao); Write1302(WRITE_MINUTE,fen); Write1302(WRITE_HOUR,shi); Write1302 (WRITE_PROTECT,0x80);/允许写保护 LCD_write_command(0x01); Delay(1); LCD_disp_str(0,1,Time); LCD_disp_str(0,2,clock);/第二行显示字符串 sjcl(Nshi,4); /清平之后的闹钟显示 sjcl(Nfen,2); xians

17、hi_2(5,4); xianshi_2(8,2); sjcl(Miao,0); sjcl(Fen,2); sjcl(Shi,4); xianshi_1(4,4); xianshi_1(7,2); xianshi_1(10,0); Delay(250); KZ=1; break; /*调闹钟键盘扫描函数 */ void Keybod_N() LCD_write_command(0x01); Delay(1); LCD_disp_str(0,2,clock);/显示闹钟调试界面 sjcl(Nshi,4); sjcl(Nfen,2); xianshi_2(5,4); xianshi_2(8,2);

18、 Delay(500); while(1) /进入调试模式按键扫描 if(SJ=0) /小时调试 Nshi+; if(Nshi=24) Nshi=0; sjcl(Nshi,4); xianshi_2(5,4); Delay(250); SJ=1; if(FJ=0) /分钟调试 Nfen+; if(Nfen=60) Nfen=0; sjcl(Nfen,2); xianshi_2(8,2); Delay(250); FJ=1; if(NKZ=0) /调试完毕返回主界面 LCD_write_command(0x01); Delay(1); LCD_disp_str(0,1,Time); LCD_di

19、sp_str(0,2,clock);/第二行显示字符串 sjcl(Nshi,4); /清平之后的闹钟显示 sjcl(Nfen,2); xianshi_2(5,4); xianshi_2(8,2); sjcl(Miao,0); sjcl(Fen,2); sjcl(Shi,4); xianshi_1(4,4); xianshi_1(7,2); xianshi_1(10,0); Delay(250); Nfen_1=Nfen; Nshi_1=Nshi; NKZ=1; break; /*RTC延时加热,停机函数*/void Y_shi(uchar shijian) /改变延时闹钟变量 Nfen_1=N

20、fen_1+shijian; /定义闹钟变量 if(Nfen_1=60) Nfen_1=Nfen_1-60; /如果超过60进位 Nshi_1=Nshi_1+1; if(Nshi_1=24) Nshi_1=0; /*主函数*/void main() uchar biaozhi; LCD_init(); LCD_disp_str(0,1,Time);/显示字符串 LCD_disp_str(0,2,clock);/第二行显示字符串 sjcl(Nshi,4); sjcl(Nfen,2); xianshi_2(5,4); xianshi_2(8,2); Nfen_1=Nfen; Nshi_1=Nshi

21、; ZK=1; MK=1; while(1) if(KZ=0) Keybod(); if(NKZ=0) Keybod_N(); Miao=Read1302(0x81); /读 时 分 秒 Fen= Read1302(0x83); Shi= Read1302(0x85); if(Fen=Nfen&Shi=Nshi&ZKB=1) /全功率加热 if(ZK=1) Y_shi(10); /全功率加热10分钟 ZK=0;/总开关 开 ZKB=0; MK=1;/模式控制为1 MKB=1; if(ZKB=0&Fen=Nfen_1&Shi=Nshi_1&MKB=1&BZW=0) /半功率熬粥 MK=0; MK

22、B=0; Y_shi(10);/半功率熬粥10分钟 BZW=1; if(ZKB=0&Fen=Nfen_1&Shi=Nshi_1&BZW=1) /全功率间歇停机(保温) MK=1; MKB=1; Y_shi(5);/停机时间 ZK=1;/总开关 关 ZKB=1; if(ZKB=1&Fen=Nfen_1&Shi=Nshi_1&BZW=1) /全功率间歇加热(保温) MK=1; MKB=1; Y_shi(2); /加热时间(保温) ZK=0;/总开关 开 ZKB=0; if(biaozhi!=Miao) /判断是否走时 sjcl(Miao,0); sjcl(Fen,2); sjcl(Shi,4); biaozhi=Miao; xianshi_1(4,4); xianshi_1(7,2); xianshi_1(10,0);

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1