版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、该程序实现DS18B20 温度计在LCD上显示并通过按键设定温度上下限值 AT24C02存储设定值本例程还可实现直流电机的调速 驱动风扇根据温度实现不用的转速程序已通过验证,可完全复制使用。例程中E2PROM DS18B20 LCD的接口定义需要根据各位的硬件自己定义。 实物图片/ 主函数 /#include<reg52.h>#include"lcd.h"#include"18b20.h"#include"at24c02.h"sbit key_ok = P10;sbit key_up = P11;sbit key_do =
2、 P12;sbit speak = P13;sbit mot = P14;uint temp_value;uchar key_num,up_num,do_num;uchar mot_sel;/uchar flag;uchar rate;uchar rate_value;/void sys_init(void);void key_scan(void);void delays(uchar z);void compare(uint temp_com);void mot_pwm(uchar rate_value);void delays(uchar z)uchar x,y;for(x=0;x<z
3、;x+) for(y=0;y<50;y+);void main()LCD_init();I2c_init();key_num=0;/up_num=30;do_num=24;up_num = read_add_24c02(0);delays(50);do_num = read_add_24c02(1);delays(50);LCD_add(4); /初始化温度上限值LCD_dat(up_num/10+0x30);LCD_dat(up_num%10+0x30);delays(100);LCD_add(16); /初始化温度下限值LCD_dat(do_num/10+0x30);LCD_dat(
4、do_num%10+0x30);while(1)temp_value = readtemperature();display(temp_value);key_scan();compare(temp_value);mot_pwm(mot_sel);void key_scan(void)if(!key_ok)delays(10);if(!key_ok)key_num+;while(!key_ok);if(key_num=1)if(!key_up)delays(10);if(!key_up)up_num+;if(up_num>=99) up_num = 0;LCD_add(4);/LCD_co
5、m(0x0f);LCD_dat(up_num/10+0x30);LCD_dat(up_num%10+0x30);while(!key_up);if(!key_do)delays(10);if(!key_do)up_num-;if(do_num=0) up_num = 99;LCD_add(4);LCD_dat(up_num/10+0x30);LCD_dat(up_num%10+0x30);while(!key_do);if(key_num=2)if(!key_up)delays(10);if(!key_up)do_num+;if(do_num>=99) up_num = 0;LCD_ad
6、d(16);/LCD_com(0x0f);LCD_dat(do_num/10+0x30);LCD_dat(do_num%10+0x30);while(!key_up);if(!key_do)delays(10);if(!key_do)do_num-;if(do_num=0) do_num = 99;LCD_add(16);/LCD_com(0x0f);LCD_dat(do_num/10+0x30);LCD_dat(do_num%10+0x30);while(!key_do);if(key_num=3)LCD_com(0x0c);key_num = 0;write_add_24c02(0,up_
7、num);delays(50);write_add_24c02(1,do_num);delays(50);void compare(uint temp_com)uchar temp_z;/temp_x;uchar temp_h,temp_l; /*温度转换*/temp_h = (uchar)(temp_com>>8)&0x00ff);temp_l = (uchar)(temp_com&0x00f0);temp_z = (temp_h<<4)|(temp_l>>4);/temp_x = (uchar)(temp&0x0000f)*0.6
8、25*10; /-/if(temp_z<do_num)|(temp_z>up_num)speak = 0;else speak = 1;if(temp_z<=27) mot_sel = 180;else if(28>=temp_z>27) mot_sel = 170;else if(29>=temp_z>28) mot_sel = 160;else mot_sel = 0;void mot_pwm(uchar rate_value)if(rate+) > 200) rate-;if(rate-)=0) rate+;if(rate<rate_
9、value) mot = 0;else mot = 1;/ LCD 驱动函数部分 /#include"lcd.h"uchar i,s,g;uchar code table1="T_H: C T_L: C"uchar code table2="temperature: "uchar data temp0="0x00,0x00,0x00,0x00,0x00,0x00"void delayms(uint x)while(x-);/*LCD 写指令*/void LCD_com(uchar com)LCDRS = 0;del
10、ayms(100);P0 = com;delayms(100);LCDEN = 1;delayms(100);LCDEN = 0;delayms(100);/*LCD 写数据*/void LCD_dat(uchar dat)LCDRS = 1;delayms(100);P0 = dat;delayms(100);LCDEN = 1;delayms(100);LCDEN = 0;delayms(100);/*LCD地址*/void LCD_add(uchar add)LCD_com(add|0x80) ; /*LCD初始化*/void LCD_init()uchar i;LCDRS = 0;LC
11、DRW = 0;LCDEN = 0;LCD_com(0x38);LCD_com(0x38);LCD_com(0x38);LCD_com(0x0c);LCD_com(0x06);LCD_com(0x01);LCD_add(0x00);for(i=0;i<20;i+)LCD_dat(table1i);delayms(50);LCD_add(0x40);for(i=0;i<20;i+)LCD_dat(table2i);delayms(50);void display(uint temp)uchar temp_z,temp_x;uchar temp_h,temp_l; /*温度转换*/te
12、mp_h = (uchar)(temp>>8)&0x00ff);temp_l = (uchar)(temp&0x00f0);temp_z = (temp_h<<4)|(temp_l>>4);temp_x = (uchar)(temp&0x0000f)*0.625*10; /-/s = temp_z/10;g = temp_z%10;temp00 = s+0x30;temp01 = g+0x30;LCD_add(0x4c);for(i=0;i<2;i+) /写入温度整数位LCD_dat(temp0i);delayms(1000);
13、LCD_add(0x4e);LCD_dat(0x2e);/写入小数点LCD_add(0x4f);LCD_dat(temp_x/10+0x30);/写入温度小数位LCD_add(0x40+16); /在LCD第二行第16位置写入“口”LCD_dat(0xdf);LCD_add(0x40+17); /在LCD第二行第17位置写入“C”LCD_dat(0x43);/ DS18B20 驱动部分 /#include"18b20.h"uchar a,b;void delay_18b20(uchar z)while(z-);uchar init_18b20(void)uchar n;DQ
14、 = 1;delay_18b20(8); / 59usDQ = 0;delay_18b20(80); /491usDQ=1;delay_18b20(4);n = DQ; delay_18b20(15);return n;/返回值,判断是否有器件,n=1,有器件,n=0,没有器件/*DS18B20 的读写字节 都是从低位开始的*/void write_byte_18b20(uchar dat)uchar i;for(i=0;i<8;i+)DQ=0;DQ=dat&0x01;delay_18b20(4);DQ=1;/总线拉高,为下一次数据做准备dat>>=1;delay_1
15、8b20(4);uchar read_byte_18b20(void)uchar i,value;DQ = 1;for(i=0;i<8;i+)DQ=0;value>>=1;DQ=1;if(DQ=1)value|=0x80;delay_18b20(20);DQ = 1;return value;uint readtemperature(void)uchar flag;uint temp;flag = init_18b20();init_18b20();write_byte_18b20(0xcc);/跳过ROMwrite_byte_18b20(0x44);/启动温度测量delay
16、_18b20(50);/等待总线稳定init_18b20();write_byte_18b20(0xcc);write_byte_18b20(0xbe);a=read_byte_18b20();/读温度的低八位b=read_byte_18b20();/读温度的高八位if(flag) /检测是否有DS18B20,a = 0x00;b = 0x00;/*temp = (b<<4)|(a>>4);/整数部分temp_xs = (a&0x0f)*0.625*10;*/temp = (b<<8)|a;return temp;/ E2PROM 驱动部分 /#in
17、clude"at24c02.h"void delayus_24c02()_nop_();_nop_();_nop_();_nop_();_nop_();/*void delay_24c02(uchar z)uchar x,y;for(x=0;x<z;x+) for(y=0;y<100;y+); */void I2c_init(void)sda = 1;scl = 1;void start(void)sda = 1;scl = 1;delayus_24c02();sda = 0;delayus_24c02();scl = 0;delayus_24c02();voi
18、d stop(void)sda = 0;scl = 1;delayus_24c02();sda = 1;delayus_24c02();/*应答信号:在SCL由"0"变为"1"的期间,SDA=0;或者在数据读取完成后一定时间SDA没有变为"1" 这个过程被视为应答*/void ack(void)uchar i;scl=1; delayus_24c02();if(sda=1) && (i<250) i+;scl=0;delayus_24c02();void no_ack(void)sda = 1;delayus_24c02();scl = 1;delayus_24c02();scl = 0;delayus_24c02();void write_byte_24c02(uchar date)uchar i;scl = 0;delayus_24c02();for(i=0;i<8;i+)if(date&0x80) sda = 1;else sda = 0;date <<= 1;delayus_24c02();scl = 1;delayus
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年二手住房贷款合同2篇
- 2024年度建筑工程品质保障合同书版B版
- 2024版债权转让与债务豁免合同3篇
- 2024年建筑施工环境保护协议2篇
- 2024版虚拟现实游戏内容开发与授权使用合同3篇
- 住房公积金贷款合同三篇
- 平面设计服务合同三篇
- 2024年农药及肥料批发协议格式一
- 2024版环保技术与设备采购合同3篇
- 2024年二手车交易协议样本
- 公务员考试经验分享培训课件
- 红河学院《运动营养学》2022-2023学年第一学期期末试卷
- 新概念英语第二册单词表(含音标)
- 住建局条文解读新规JGJT46-2024《施工现场临时用电安全技术标准》
- 科教融汇背景下铁道车辆技术专业群课程改与革实践
- 2024安全员知识考试题(全优)
- 2024年3D打印加工合作合同
- 国家开放大学《当代中国政治制度》期末复习题
- 中学生标准学术能力诊断性测试2024-2025学年高三上学期10月月考试题 英语 含答案
- 北京市海淀区2023-2024学年五年级上学期数学期末试卷
- 走近大诗人学习通超星期末考试答案章节答案2024年
评论
0/150
提交评论