




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、主程序:#mcludeHMdefine umt unsigned mtdefine uchai unsigned charuchai ajiiiao.slu.fenjiyueaiiaiijveekflag.keylnjemp:define vh 0 x80 Jdefine er 0 x80+0 x40/液晶屏的与C51之间的引脚连接定义sbit rs=P2A0;sbit en=P2A2;sbit nP2Al;面的rw=0 了sbit led=P2A6;/DS1302时钟芯片与C51之间的引脚连接定义sbit IO=P1A1;sbit SCLK=P1AO;sbit RST=P1A2;sbitAC
2、C0=ACCA0;sbitACC7=ACCA7;/校时按键与C51的引脚连接定义sbit kevl=Pr 5;sbit kev2=Pr 6;sbit key3=PlA7;sbit buzzei-=PlA3;电平响如果硬件上rw接地,就不用写这句和后/LCD背光开关设置键加键/减键蜂鸣器,通过三极管9012驱动,端II低J*/uchai code tabl=(H20 - uchai code tab2=(H : : ”;/延时函数,后面经常调用void delay(uint xms)uiiit x,y;fbi (x=xms ;x0 ;x)for(y=110;y0;y-);年显示的固定字符时间显示
3、的固定字符/延时函数,有参函数/*液晶写入指令函数与写入数据函数,以后可调用*/wnte_1602com(uchar com)/*液晶写入指令函数*rs=O;rw=O;PO=com;delay(l);en=l;拉高使能端,为制造有效的下降沿做准数据/指令选择置为指令读写选择置为写送入数据delay ;en=O;/en由高变低,产生下降沿,液晶执行命write_l 602dat(uchar dat)rs=l;rw=O;PO=dat;delay(l); en=l;delay(l); en=O;令lcd_init()write_l 602com(0 x3 8);5*7点阵,8位数据write_l 6
4、02com(0 x0c);write_l 602com(0 x06);write_l 602com(0 x01);602com(yh+l);置之后开始显示 fbr(a=0;a14;a-H-) fwnte_1602dat(tabl a); /delay(3);wiite_l 602com(ei+2);个位置后开始显示 fbr(a=0;a0;a)jIO=ACCO;SCLK=0:SCLK=1;ACC=ACC1;uchai read_byteQRST=1;fbi(a=8;a0;a)jACC7=IO;SCLK=1;SCLK=0:ACC=ACC1;return (ACC);/void wiite_1302
5、(uchai- addjichar dat) 址,数据读一个字节向1302芯片写函数,指定写入地RST=0;SCLK=0;RST=1;wiite_byte(add);从1302读数据函数,指定读取数/BCD码转十进制函数,输入BCD,返回wiite_byte(dat);SCLK=1;RST=O;uchar read_1302(uchar add)据来源地址uchar temp;RST=O;SCLK=O;RST=1;wiite_byte(add);temp=read_byte();SCLK=1;RST=O;retuin(temp);uchar BCD_Deciiiial(uchai bed)十进
6、制uchar Decimal;Deciiiial=bcd4;return(Deciiiial=Decmial* 10+(bcd&=OxOF);void dsl3O2_init() (2010-01-07,12:00:00,week4) RST=0;SCLK=0;write_l 302(0 x8e,0 x00);write_l 302(0 x80,0 x00); 数据00write_l 302(0 x82,0 x00);数据00write_l 302(0 x84,0 x12);小时数据12write_l 302(0 x8a,0 x04);数据4write_1302(0 x86,0 x07);口期
7、数据07write_1302(0 x88,0 x01);月份数据01/1302芯片初始化子函数/允许写,禁止写保护向DS1302内写秒寄存器80H写入初始秒向DS1302内写分寄存器82H写入初始分向DS1302内写小时寄存器84H写入初始向DS1302内写周寄存器SaH写入初始周向DS1302内写口期寄存器86H写入初始向DS1302内写月份寄存器88H写入初始向DS1302内写年份寄存器8cH写入初始打开写保护write_1302(0 x8c ,0 x 10);年份数据10write_l 302(0 x8e,0 x80);温度显示子函数向LCD写温度数据,并指定显示位置void wiite
8、-temp(uchar add.uchar dat)取得个位数字/取得十位数字/er是头文件规定的值0 x80+0 x40数字+30得到该数字的LCD 1602显示码/数字+30得到该数字的LCD 1602显示码 显小温度的小圆圈符号,Oxdf是液晶屏字显示”C”符号,0 x43是液晶屏字符库里大uchar gw.sw;gw=dat%10;sw=dat/10;write_l 602com(er+add);wnte_l 602dat(0 x30+sw);write_l 602dat(0 x30+gw);write_1602dat(0 xdf);符库的该符号地址码wnte_l 602dat(0 x
9、43);写C的地址码/时分秒显示子函数向LCD写时分秒,有显示位置加、现示数据,void wiite_sfm(uchai- add,uchar dat)两个参数uchar gw.sw;取得个位数字/取得十位数字/er是头文件规定的值0 x80+0 x40数字+30得到该数字的LCD 1602显示码数字+30得到该数字的LCD1602显示码gw=dat%10;sw=dat/10;write_l 602com(er+add);wnte_l 602dat(0 x30+sw);write_l 602dat(0 x30+gw);年月口显示子函数向LCD写年月口,有显示位置加数、显示数void write
10、_nyr(uchar add,uchar dat)据,两个参数uchar gw.sw;取得个位数字取得十位数字/设定显示位置为第一个位置+add数字+30得到该数字的LCD 1602显示码数字+30得到该数字的LCD 1602显示码gw=dat%10;sw=dat/10;write_l 602com(yh+add);wnte_l 602dat(0 x30+sw);write_l 602dat(0 x30+gw);写星期函数星期字符的显示位置星期数为1时,显示/星期数据为2时显示星期数据为3时显示星期数据为4是显示星期数据为5时显示星期数据为6时显示星期数据为7时显示void wiite_wee
11、k(uchar week)write_l 602com(yh-r0 x0c);switch(week)case 1: write_l 602dat(M,); wnte_1602datCO,); write602dat(N); break;case 2:write_1602dat(*T,); wnte_1602dat(rU,); wnte_1602dat(rE,); break;case 3:write_l602dat(rW,); wnte_1602dat(rE,); wnte_1602dat(T),); break;case 4:wnte_1602dat(T,);write602dat(H);
12、 wnte_1602dat(rU,); break;case 5:wiite_1602dat(,F,); write_1602dat(R); wnte_1602dat(fr); break;case 6:write_l602dat(,S,); wnte_1602dat(T,); wnte_1602dat(fA,); break;case 7:write_l602dat(,S,); wnte_1602dat(rU,); write602dat(N); break:*#*健盘扫描有关函数 * *void keyscan() if(keyl=O)j/keyl为功能键(设置键)delay(9);延时,
13、用于消抖动if(keyl=O) j延时后再次确认按键按下buzzei-0;delay(20);buzzei-1;while(!keyl);keyln+;if(keyln=9)蜂鸣器短响一次keyln=l;返回,8个功能循环 switch(keyln) j设置按键共有秒、分、时、星期、日、月、case 1: TR0=0;/TR1=O;关闭定时器write602com(er+0 x09);/设置按键按动一次,秒位置显示光标write_l 602com(0 x0f);设置光标为闪烁temp=(nuao)/10*16+(imao)% 10;/秒数据写入 DS1302write_l 302(0 x8e,
14、0 x00);write302(0 x80.0 x80 temp)/miao write.l 302(0 x8e.0 x80);break;case 2: write602com(er+6);/write_l 602com(0 x0f); break;/按2次fen位置显示光标case 3: vrite_l602com(ei+3);/write_l 602com(0 x0f); break;按动3次,shicase 4: write_l602com(yh-H)x0e);/write_l 602com(0 x0f); break;按动4次,weekcase 5: write_l602com(yh
15、-H)x0a);/write_l 602com(0 x0f); break;/按动5次,n年、case 6: write_1602com(ylrH)x07);/wnte_l 602com(0 x0f); break;case 7: write_1602com(ylrH)x04);/wnte_l 602com(0 x0f);break;case 8:按动6次,yue按动7次,manwnte_l 602com(0 x0c);TRO=1;/Z打开定时器temp=(niiao)/10* 16+(nuao)%10;write_l 302(0 x8e,0 x00);write_l302(0 x80,OxO
16、O|teinp);/niiao 数据写入 DS 1302 write_l 302(0 x8e,0 x80);break;按动到第8次,设置光标不闪烁)/加键 key2if(keyln!=0)当keyl按下以下。再按以下键才有效(按键次数不等于零)if(key2=0)delay(lO);if(key2=0)buzzei-0;delay(20);buzzei-1;while(!key2);switch(keyln)case 1:niiao+;上调键蜂鸣器短响一次设置键按动1次,调秒iRmiao=60)niiao=0;write_sfm(0 x08 jiuao);temp=(nuao)/ 10*16
17、+(nuao)% 10;write302(0 x8e,0 x00);wnte_l 302(0 x80Jemp);write302(0 x8e,0 x80);write_l 602com(er+0 x09);/wnte_l 602com(0 x0b);break;case 2:fen+;if(fen=60)fen=O;write_sfm(OxO5 ,fen);temp=(fen)/10*16+(fen)% 10;write_l 302(0 x8e,0 x00);write_l 302(0 x82,temp);write302(0 x8e.0 x80);write_l 602com(ei4-6);
18、break;case 3:shi+;if(shi=24)shi=0;write_sfin(2,shi);temp=(shi)/10*16+(shi)% 10;write_l 302(0 x8e,0 x00);wiite_l 302(0 x84jemp);write302(0 x8e.0 x80);write_l 602com(er+3); break;case 4:week+;if(veek=8)week=l;write_l 602coni(yh+0 x0C);write_week(week);temp=(week)/10* 16+(week)% 10;write_l 302(0 x8e,0
19、x00);write302(0 x8a,temp);write302(0 x8e.0 x80);write_l 602com(yh+0 x0e);break;case 5:ri+;iRn=32)ri=l;write_nyi(9,ii);temp=(ii)/10*l 6+(ri)% 10;write_l 302(0 x8e,0 x00);write_l 302(0 x86jemp);write302(0 x8e.0 x80);write_l 602com(yh+10);break;case 6:yue+;iRyue=13)yue=l;write_nyi(6,yue);temp=(yue)/10*
20、l 6+(yue)% 10;write_l 302(0 x8e,0 x00);wnte_l 302(0 x88jemp);wnte_l 302(0 x8e.0 x80);write_l 602com(yh+7);break;case 7:iiian-H-;if(nian=100)nian=0;write_nyi(3 aiian);temp=(niaii)/10*16+(nian)% 10;write_l 302(0 x8e,0 x00);write302(0 x8c,temp);wnte_l 302(0 x8e.0 x80);write602com(yh+4);break;H减键key3,各句
21、功能参照,加键,注释-if(key3=0)delay(lO);/调延时,消抖动if(key3=0)buzzei-0;蜂鸣器短响一次delay(20);buzzei-1;while(!key3);switch(keyln)case l:niiao-;if(niiao=-l)niiao=59;writers fin(0 x0 8 .miao);temp=(miao)/ 10*16+(imao)% 10;write302(0 x8e,0 x00);write302(0 x80,temp);write302(0 x8e,0 x80);write_l 602com(er-H)x09);/wiite.l
22、602com(0 x0b);break;case 2:fen;if(fen=-l)fen=59;wiite_sfin(5,fen);temp=(fen)/10* 16+(企 n)% 10;write302(0 x8e,0 x00);wiite_l 302(0 x82,temp);write302(0 x8e,0 x80);write602com(er+6);break;case 3:shi;iRshi=l)shi=23;write_sfm(2,shi);temp=(slii)/10*l 6+(slii)% 10;write_l 302(0 x8e,0 x00);write302(0 x84,忙
23、 mp);write302(0 x8e.0 x80)write_l 602com(er+3);break;case 4:week-;if(week=0)week=7;write_l 602coni(yh+0 x0C);write_week(week);temp=(week)/ 10*16+(week)% 10;write_l 302(0 x8e,0 x00);write302(0 x8a,temp);write_l 302(0 x8e,0 x80);602com(yh+0 x0e);break;case 5:ri;if(n=0)ri=31;write_nyr(9qi);temp=(ri)/l0
24、* 16+(n)% 10;/十进制转换成 DS1302 要求的 DCB 码write302(0 x8e.0 x00);/允许写,禁止写保护write_1302(0 x86,忙mp);向DS1302内写口期寄存器86H写入调整后的口期数 据BCD码write.l 302(0 x8e,0 x80)y/ 打开写保护wnte_1602com(yh+10);/因为设置液晶的模式是写入数据后,指针自动加一, 所以需要光标回位break;case 6:yue;if(yue=O)yue=12;write_nyr(6,yue);temp=(yue)/l0* 16+(yue)% 10;/十进制转换成 DS1302
25、 要求的 DCB 码write.l 302(0 x8e,0 x00)y/允许写,禁止写保护wnte_1302(0 x88.temp)y/向DS1302内写月份寄存器88H写入调整后的月份数 据BCD码write302(0 x8。,0 x80);/ 打开写保护wnte_1602com(yh+7)y/因为设置液晶的模式是写入数据后,指针自动加一,所 以需要光标回位break;case 7:nian;if(nian=-l)nian=99;write_nyr (3 aiian);temp=(man)/l0* 16+(man)%l0;/十进制转换成 DS1302 要求的 DCB 码wnte_l302(0
26、 x8e.0 x00)y/允许写,禁ll:写保护wnte_1302(0 x8c,temp)/向DS1302内写年份寄存器8cH写入调整后的年份数 据BCD码wnte_l 302(0 x8e.0 x80)y/打开写保护wnte_1602com(yh+4)y/因为设置液晶的模式是写入数据后,指针自动加一,所 以需要光标回位break;void initQ定时器、计数器设置函数TMOD=Oxll;指定定时/计数器的工作方式为3TH0=0;定时器TO的高四位=0TL0=0;EA=1;ET0=l;TR0=l;定时器TO的低四位=0 系统允许有开放的中断 允许T0中断开启中断,启动定时器*左* * *:$:* *主函数 * *:$:* void main()lcd
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 游戏代运营服务合作协议
- 2025年保险数字化理赔服务智能理赔服务平台构建与运营报告
- 2025年农村电商服务站农村电商金融服务创新报告
- 小学六年级体育课时安排计划
- 2025年装配式建筑部品部件标准化设计在装配式建筑中的经济效益分析报告
- 2025年零售行业可持续发展目标实施策略研究报告
- 2025年高校创新创业教育课程体系改革与创新教育理念研究报告
- 2025年春季学期小学阅读推广工作计划
- 2025商业步行街改造初步设计评估与历史文化资源保护研究报告
- 2025年免疫治疗技术在自身免疫性糖尿病治疗中的应用突破报告
- 2025越南语等级考试AG级试卷:词汇辨析与语法应用
- 2024年济南长清产业发展投资控股集团有限公司招聘笔试真题
- 2025护理团体标准解读
- 风电场输变电设备典型故障及异常处理手册
- 四川省(蓉城名校联盟)新高考2022级高三适应性考试语文试题答案
- 人类面临的主要环境问题第一课时课件高一下学期地理湘教版(2019)必修二
- 四川助康新材料有限公司四川助康新材料有限公司年产3.5万吨环保型抗菌新材料生产线项目环评报告
- 企业抖音陪跑服务课件
- 2025-2030中国采耳行业市场深度调研及竞争格局与投资前景研究报告
- 生物制剂的应用及护理
- 《智能网联汽车智能座舱技术》考试复习题库(含答案)
评论
0/150
提交评论