




已阅读5页,还剩7页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
#include#include#include #define uchar unsigned char#define uint unsigned intuchar code table=-Figo;/uchar code table1=WWW.TXMCU.COM;sbit lcden=P34;sbit lcdrs=P35;sbit dula=P26;sbit wela=P27; sbit ds=P17;sbit key1=P10; sbit key2=P11; sbit key3=P12; sbit key4=P13; int tempValue; int s_1=1000;unsigned char FunKeyFlag=6,keypress; #define key_vaule1 0x01 #define key_vaule2 0x02 #define key_vaule3 0x03 #define key_vaule4 0x04uchar num;int ms_10=10;int flag=0;int s_1_1=1000;uint sec=55;uint min=9;uint hour=22;uint nian=2014;uint yue=8;uint ri=20;uint xingqi=3;/延时函数, 对于11.0592MHz时钟, 例i=10,则大概延时10ms.void delay_wendu(unsigned int i) unsigned int j; while(i-) for(j = 0; j 0) i-; ds = 1; /产生一个上升沿, 进入等待应答状态 i = 4; while(i0) i-;void dsWait() unsigned int i; while(ds); while(ds);/检测到应答脉冲 i = 4; while(i 0) i-;/向DS18B20读取一位数据/读一位, 让DS18B20一小周期低电平, 然后两小周期高电平,/之后DS18B20则会输出持续一段时间的一位数据bit readBit() unsigned int i; bit b; ds = 0; i+;/延时约8us, 符合协议要求至少保持1us ds = 1; i+; i+;/延时约16us, 符合协议要求的至少延时15us以上 b = ds; i = 8; while(i0) i-; /延时约64us, 符合读时隙不低于60us要求 return b;/读取一字节数据, 通过调用readBit()来实现unsigned char readByte() unsigned int i; unsigned char j, dat; dat = 0; for(i=0; i8; i+) j = readBit(); /最先读出的是最低位数据 dat = (j 1); return dat;/向DS18B20写入一字节数据void writeByte(unsigned char dat)unsigned int i;unsigned char j;bit b; for(j = 0; j = 1; /写1, 将DQ拉低15us后, 在15us60us内将DQ拉高, 即完成写1 if(b) ds = 0; i+; i+; /拉低约16us, 符号要求1560us内 ds = 1; i = 8; while(i0) i-; /延时约64us, 符合写时隙不低于60us要求 else /写0, 将DQ拉低60us120us ds = 0; i = 8; while(i0) i-;/拉低约64us, 符号要求 ds = 1; i+; i+;/整个写0时隙过程已经超过60us, 这里就不用像写1那样, 再延时64us了 /向DS18B20发送温度转换命令void sendChangeCmd() dsInit(); /初始化DS18B20, 无论什么命令, 首先都要发起初始化 dsWait(); /等待DS18B20应答 delay_wendu(1); /延时1ms, 因为DS18B20会拉低DQ 60240us作为应答信号 writeByte(0xcc); /写入跳过序列号命令字 Skip Rom writeByte(0x44); /写入温度转换命令字 Convert T/向DS18B20发送读取数据命令void sendReadCmd() dsInit(); dsWait(); delay_wendu(1); writeByte(0xcc); /写入跳过序列号命令字 Skip Rom writeByte(0xbe); /写入读取数据令字 Read Scratchpad/获取当前温度值int getTmpValue() unsigned int tmpvalue; int value; /存放温度数值 float t; unsigned char low, high; sendReadCmd(); /连续读取两个字节数据low = readByte();high = readByte(); /将高低两个字节合成一个整形变量 /计算机中对于负数是利用补码来表示的 /若是负值, 读取出来的数值是用补码表示的, 可直接赋值给int型的value tmpvalue = high; tmpvalue 0 ? 0.5 : -0.5); /大于0加0.5, 小于0减0.5 return value;void HandleKeyPress(); void KeyScan() /按键扫描 static unsigned char state=0;unsigned char temp; if (key1=0) temp=key_vaule1; else if (key2=0) temp=key_vaule2; else if (key3=0) temp=key_vaule3; else if (key4=0) temp=key_vaule4; else temp=0; switch (state) case 0: if(temp!=0) state=1;break;case 1: state=2; break;case 2: if(temp!=0) state=3;keypress=temp; else state=0; break;case 3: if(temp=0) HandleKeyPress();state=0; break; void HandleKeyPress() /按键功能的设置 if (keypress=key_vaule1) /功能键的设置 FunKeyFlag=(FunKeyFlag+1)%7; else if (keypress=key_vaule2) /第二个按键的设置 switch (FunKeyFlag) case 0:hour+;if(hour23)hour=0;break; case 1:min+;if(min59)min=0;break; case 2:sec+;if(sec59)min=0;break; case 3:ri+;xingqi+;if(ri30)ri=1;if(xingqi7)xingqi=1;break; case 4:yue+;if(yue12)yue=1;break; case 5:nian+;break; else if (keypress=key_vaule3) /第三个按键的设置 switch (FunKeyFlag) case 0:hour-;if(hour0)hour=23;break; case 1:min-;if(min0)min=59;break; case 2:sec-;if(sec0)sec=59;break; case 3:ri-;xingqi-;if(ri1)ri=31;if(xingqi1)xingqi=1;break; case 4:yue-;if(yue0;x-)for(y=110;y0;y-);void write_com(uchar com)lcdrs=0;P0=com;delay(5);lcden=1;delay(5);lcden=0;void write_data(uchar date)lcdrs=1;P0=date;flag=1;delay(5);lcden=1;delay(5);lcden=0;shijian_show(uchar wei,shijian ) uchar shi,ge;shi=shijian/10;ge=shijian%10;write_com(0x80+0x40+wei);write_data(0x30+shi);write_data(0x30+ge); rili_show(uchar wei,rili ) uchar shi,ge;shi=rili/10;ge=rili%10;write_com(0x80+wei);write_data(0x30+shi);write_data(0x30+ge); nian_show(uchar wei,shijian ) uchar shi,ge,qian,bai;qian=shijian/1000;bai=shijian%1000/100;shi=shijian%100/10;ge=shijian%10;write_com(0x80+wei);write_data(0x30+qian);write_data(0x30+bai);write_data(0x30+shi);write_data(0x30+ge); wendu_show(uchar wei,int wendu ) uchar shi,ge,qian,bai,xiao;qian=wendu/10000;bai=wendu%10000/1000;shi=wendu%1000/100;ge=wendu%100/10; xiao=wendu%10;write_com(0x80+0x40+wei);write_data(0x30+qian);write_data(0x30+bai);write_data(0x30+shi);/write_com(0x80+0x40+wei+1); write_data(0xdf);write_data(0x30+ge); write_data(0x30+xiao);void init() P0=0;dula=0;wela=0;lcden=0;write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);void week_show() /星期的显示 write_com(0x80+12); switch (xingqi) case 1: write_data(M); write_data(o); write_data(n); break;case 2: write_data(T);write_data(u);write_data(e); break;case 3: write_data(W); write_data(e); write_data(d); break; case 4: write_data(T); write_data(h); write_data(u); break; case 5: write_data(F); write_data(r); write_data(i); break;case 6: write_data(S); write_data(a); write_data(t); break; case 7: write_data(S); write_data(u); write_data(n); break; void main() TMOD = 0x01;TH0 = (65536-1000)/256;TL0 = (65536-1000)%256;EA = 1;ET0 = 1;TR0 = 1;init();while(1) nian_show(1,nian); rili_show(6,yue); rili_show(9,ri); shijian_show(0,hour); shijian_show(3,min); shijian_show(6,sec); write_com(0x80+5); write_data(0x2d); write_com(0x80+8); write_data(0x2d); write_com(0x80+0x40+2); write_data(0x3A); write_com(0x80+0x40+5); write_data(0x3A); week_show();wendu_show(10,tempValue); void time() interrupt 1 TH0 = (65536-1000)/256;TL0 = (65536-1000)%256;ms_10-;s_1_1-; if(s_1_1=0) s_1_1=1000; sendChangeCmd(); /显示5次 tempValue = getTmpValue(); /计算温度 if(ms_10=0) /按键扫描 ms_10=10; KeyScan(); s_1-; if(s_159) sec=0; min+; if(min59) min=0; hour+; if(hour23) hour=0; ri+; xingqi+; if(xingqi7) xingqi=1; if(yue=1|yue=3|yue=5|yue=7|yue=8|yue=10|yue
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025国家农业农村部食物与营养发展研究所综合办公室助理招聘4人模拟试卷及完整答案详解1套
- 2025河南信阳市人民医院招聘合同制人员2人模拟试卷及1套参考答案详解
- 2025贵州省第三人民医院第十三届贵州人才博览会引才12人考前自测高频考点模拟试题有答案详解
- 2025贵州省农业科学院引进高层次人才16人模拟试卷及参考答案详解一套
- 2025北京市房山区燕山教育委员会所属事业单位第一批招聘教师30人模拟试卷有答案详解
- 2025年沙市区招商公司公开招聘职员6人考前自测高频考点模拟试题及答案详解(易错题)
- 2025年河北保定市公安局招聘警务辅助人员32人模拟试卷附答案详解(突破训练)
- 2025辽宁抚顺新抚钢有限责任公司招聘拟聘用人员考前自测高频考点模拟试题及答案详解(历年真题)
- 2025包头市东河区机关所属事业单位春季引进人才51人考前自测高频考点模拟试题有完整答案详解
- 2025昆明市盘龙区滇源街道中心卫生院第二次招聘(2人)模拟试卷及答案详解(必刷)
- 2025年汽车驾驶员(高级)理论考试试题及答案
- 2025年及未来5年中国锂电池叠片机行业市场深度分析及发展趋势预测报告
- 2025年幼儿园保健医考核试题及答案
- 乌兹别克语自学课件
- 《“盛世华诞”国庆主题》课件
- 2025年江苏卫生健康职业学院单招《语文》检测卷
- 物流客服培训课件
- 川教版四年级上册《生命.生态.安全》全册教案(及计划)
- 华为技术有限公司企业简称2023环境、社会与公司治理报告:高科技行业ESG绩效与NGO监督
- 县级医疗重点专科建设项目申请书范文
- 穿心莲栽培技术
评论
0/150
提交评论