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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

本文(基于AT89C+1602+DS1302+DS18B20的电子时钟带按键调整Word文档下载推荐.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

基于AT89C+1602+DS1302+DS18B20的电子时钟带按键调整Word文档下载推荐.docx

1、 /DS1302片选sbit DIO=P31; /DS1302数据信号sbit SCLK=P30; /DS1302时钟信号sbit key0=P32; /功能键sbit key1=P33; /增大键sbit key2=P34; /减小键 sbit beep=P10; /蜂鸣器sbit ACC7=ACC7;sbit ACC0=ACC0; unsigned char READ_1302(unsigned char addr);char hour,minute,second,week,day,month,year,tem;unsigned char num,flag,count,wendu;unsi

2、gned char str1= 20 - - ;unsigned char str2= :void delay(unsigned char z);void INITIAL_1302();void WRITE_1302(unsigned char addr,unsigned char date);void LCD_WRITE_COM(unsigned char com);void LCD_WRITE_DATA(unsigned char date);void LCD_WRITE_SFM(unsigned char addr,unsigned char date);void LCD_WRITE_N

3、YR(unsigned char addr,unsigned char date);void LCD_WRITE_WEEK(unsigned char week);void LCD_INITIAL();void keyscan();void INITIAL_TEMER0();void w1602c(uchar com);void w1602d(uchar data01);void write_temp(uchar add,uchar date);void main() LCD_INITIAL(); /液晶初始化 INITIAL_1302(); /DS1302初始化 INITIAL_TEMER0

4、(); /定时器初始化 beep=0;/蜂鸣器长响一次 delay(1000); beep=1; while(1) keyscan(); /按键扫描 if(flag=0) /当标志位为0,允许读取DS1302数据,将数据送入液晶显示 second=READ_1302(0x81); LCD_WRITE_SFM(8,second); minute=READ_1302(0x83); LCD_WRITE_SFM(5,minute); hour=READ_1302(0x85); LCD_WRITE_SFM(2,hour); week=READ_1302(0x8b); LCD_WRITE_WEEK(wee

5、k); day=READ_1302(0x87); LCD_WRITE_NYR(9,day); month=READ_1302(0x89); LCD_WRITE_NYR(6,month); year=READ_1302(0x8d); LCD_WRITE_NYR(3,year); wendu=ReadTemperature();/将18b2头文件运行返回的函数结果送到变量wendu中,用于显示 write_temp(11,wendu);/显示温度,从第二行第12个字符后开始显示 /*1602部份*/void delay(unsigned char z) /1602de延时函数 unsigned c

6、har x,y; for(x=z;x0;x-) for(y=110;yy-);void LCD_WRITE_COM(unsigned char com)/1602四线控制,将数据高四位和低四位分两次写入 LCD_RS=0; LCD_E=1; delay(1); P1=(P1&0x0f)|(com&0xf0);/将com的高四位送到P1的高四位,并保持P1的低四位不变 delay(2); LCD_E=0; delay(5); com=4;/将com的原低四位移到高四位,准备送到P1的高四位void LCD_WRITE_DATA(unsigned char date) LCD_RS=1;0x0f)

7、|(date& datevoid LCD_WRITE_SFM(unsigned char addr,unsigned char date) unsigned char shi,ge; shi=date/10; ge=date%10; LCD_WRITE_COM(0x80+0x40+addr); LCD_WRITE_DATA(0x30+shi); LCD_WRITE_DATA(0x30+ge); void LCD_WRITE_NYR(unsigned char addr,unsigned char date) char shi,ge; LCD_WRITE_COM(0x80+addr);void

8、LCD_WRITE_WEEK(unsigned char week) LCD_WRITE_COM(0x80+12); switch(week) case 1: LCD_WRITE_DATA(M);delay(5);O LCD_WRITE_DATA(N1break; case 2:TUE2 case 3:WD3 case 4:H4 case 5:FRI5 case 6:SA6 case 7:7void LCD_INITIAL() unsigned char i; LCD_WRITE_COM(0x28);/0x28=0010 1000,将液晶设置为16*2显示,5*7点阵,4位数据口 /显示方式设

9、置 LCD_WRITE_COM(0x0c); /设置开显示,不显光标 LCD_WRITE_COM(0x06); /默认(0x06)写入新数据后光标右移 屏幕不移动 LCD_WRITE_COM(0x01); /显示清0,数据指针清0 LCD_WRITE_COM(0x80); for(i=0;ii-) SCLK=0; ACC=addr; DIO=ACC0; addr=1; SCLK=1; ACC=date; dateunsigned char READ_1302(unsigned char addr) unsigned char i,date1,date2; ACC7=DIO; ACC date1

10、=ACC; date2=date1/16; date1=date1%16; date1=date1+date2*10; return(date1) ;void INITIAL_1302() WRITE_1302(WRITE_SECOND,READ_1302(READ_SECOND)&0x7f); /启动DS1302/*键盘扫描部分*/void keyscan() if(key0=0)/确认功能键按下 delay(20); if(key0=0)/去抖 beep=0; delay(200); while(!key0);/释放 num+; switch(num) flag=1; /修改时间,禁止从D

11、S1302读数据 TR0=0; /定时器关 LCD_WRITE_COM(0x0f); /光标开始闪烁 LCD_WRITE_COM(0x80+3);/第一次按下,光标定位到年位置 break; case 2: LCD_WRITE_COM(0x80+6);/第二次按下,光标定位到月位置 break; case 3: LCD_WRITE_COM(0x80+9);/第三次按下,光标定位到日位置 case 4:/第四次按下,光标定位到星期位置 case 5: LCD_WRITE_COM(0x80+0x40+2);/第五次按下,光标定位到时位置 case 6: LCD_WRITE_COM(0x80+0x4

12、0+5);/第六次按下,光标定位到分位置 case 7: LCD_WRITE_COM(0x80+0x40+8);/第七次按下,光标定位到秒位置 break; case 8: num=0;/第八次按下,记录清零 LCD_WRITE_COM(0x0c);/不显示光标 WRITE_1302(WRITE_PROTECT,0x00); /允许写操作 WRITE_1302(0x80,(second/10*16)+second%10);/将调节后的秒写入DS1302 WRITE_1302(0x82,(minute/10*16)+minute%10);/将调节后的分写入DS1302 WRITE_1302(0x

13、84,(hour/10*16)+hour%10);/将调节后的时写入DS1302 WRITE_1302(0x8a,(week/10*16)+week%10);/将调节后的星期写入DS1302 WRITE_1302(0x86,(day/10*16)+day%10);/将调节后的日写入DS1302 WRITE_1302(0x88,(month/10*16)+month%10);/将调节后的月写入DS1302 WRITE_1302(0x8c,(year/10*16)+year%10);/将调节后的年写入DS1302 WRITE_1302(WRITE_PROTECT,0x80); /开写保护 flag

14、=0; /时间修改完毕,允许液晶从DS1302读数据 TR0=1; if(num!=0) if(key1=0)/确认增大键按下 if(key1=0)/增大键确实按下 beep=0; while(!key1); switch(num) case 1: year+;/调节年 if(year=100)year=0; LCD_WRITE_NYR(3,year);/将调节后的年送入液晶显示 LCD_WRITE_COM(0x80+3);/光标回到指定处 break; case 2: month+;/调节月 if(month=13)month=0; LCD_WRITE_NYR(6,month);/将调节后的

15、月送入液晶显示 LCD_WRITE_COM(0x80+6); case 3: day+;/调节日 if(day=32)day=0; LCD_WRITE_NYR(9,day);/将调节后的日送入液晶显示 LCD_WRITE_COM(0x80+9); case 4: week+; if(week=8)week=0; LCD_WRITE_WEEK(week);/将调节后的星期送入液晶显示 LCD_WRITE_COM(0x80+12); case 5: hour+; if(hour=24)hour=0; LCD_WRITE_SFM(2,hour);/将调节后的小时送入液晶显示 LCD_WRITE_CO

16、M(0x80+0x40+2); case 6: minute+; if(minute=60)minute=0; LCD_WRITE_SFM(5,minute);/将调节后的分送入液晶显示 LCD_WRITE_COM(0x80+0x40+5); case 7: second+; if(second=60)second=0; LCD_WRITE_SFM(8,second);/将调节后的秒送入液晶显示 LCD_WRITE_COM(0x80+0x40+8); default: if(key2=0)/确认减小键按下 if(key2=0)/减小键确实按下key2); year-; if(year=-1)y

17、ear=99; LCD_WRITE_NYR(3,year); LCD_WRITE_COM(0x80+3); month-; if(month=-1)month=12; LCD_WRITE_NYR(6,month); LCD_WRITE_COM(0x80+6); day-; if(day=-1)day=31; LCD_WRITE_NYR(9,day); LCD_WRITE_COM(0x80+9); week-;/调节星期 if(week=0)week=7; LCD_WRITE_WEEK(week); LCD_WRITE_COM(0x80+12); hour-;/调节时 if(hour=-1)hour=23; LCD_WRITE_SFM(2,hour); LCD_WRITE_COM(0x80+0x40+2); minute-;/调节分 if(minute=-1)minute=59; LCD_WRITE_SFM(5,minute); LCD_WRITE_COM(0x80+0x40+5); second-;/调节秒 if(second=-1)second=59; LCD_WRITE_SFM(8,second); LCD_WRITE_COM(0x80+0x40+8); default: /*

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

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