完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
#include "reg52.h" #include "INTRINS.H" #include "1602.c" #define uchar unsigned char #define uint unsigned int //#define CLEARSCREEN LCD_en_command(0x01) 1602清屏 /////////////低层驱动子程序/////////// void Init18B20(void); //初始化 void Write18B20(uchar ch);//写数据 unsigned char Read18B20(void);//读数据 void Delay15(uchar n); void Delay10ms(uint delay_num); void Display(void); ///////////////////////////////////// code uchar decimalH[]={00,06,12,18,25,31,37,43,50,56,62,68,75,81,87,93}; code uchar decimalL[]={00,25,50,75,00,25,50,75,00,25,50,75,00,25,50,75}; uint ResultTemperatureH ,ResultTemperatureLH,ResultTemperatureLL;//整数,小数高位,小数低位 uint ResultSignal;//符号位 main() { uint TemH,TemL,delay,k=0; for(; ; ) { Init18B20(); Write18B20(0xCC);//跳过ROM _nop_(); //Write18B20(0x4E);//写EEPROM // Write18B20(0x00);//Th //Write18B20(0x00);//Tl Write18B20(0x7f);//12 bits温度分辨率 Init18B20(); Write18B20(0xCC);//跳过ROM _nop_(); Write18B20(0x44);//发送温度转换指令 Delay10ms(25); Delay10ms(25); Delay10ms(25); Delay10ms(25);//等待1s转换 Init18B20(); Write18B20(0xcc);//跳过ROM Write18B20(0xbe);//发送温度转换指令 TemL="Read18B20"[];//读低位温度值 TemH="Read18B20"[];//读高位温度值 Delay10ms(2); TemH=(TemH<<4)|(TemL>>4); TemL="TemL"&0x0f; //取低4位 if(TemH&0x80) { TemH=~TemH; TemL=~TemL+1; ResultSignal="1"; //负 } else ResultSignal="0"; //正 ResultTemperatureLH="decimalH"[TemL]; ResultTemperatureLL="decimalL"[TemL]; ResultTemperatureH="TemH"; Display(); for(delay=0;delay<60000;delay++); for(delay=0;delay<20000;delay++); } } void Display(void) { uint i,j,q; LCD_init(); CLEARSCREEN; LCD_en_command(0x01); delay_nms(2); q="ResultTemperatureH/100"; i=(ResultTemperatureH%100)/10; j="ResultTemperatureH-"(i*10+q*100); LCD_write_string(0,LINE1," Jaq1217 18B20 "); if(ResultSignal) { LCD_write_string(0,LINE2," T is:- . "); } else {LCD_write_string(0,LINE2," T is:+ . ");} LCD_write_char(0x07,LINE2,q|0x30); LCD_write_char(0x08,LINE2,i|0x30); LCD_write_char(0x09,LINE2,j|0x30); LCD_write_char(0x0b,LINE2,(ResultTemperatureLH/10)|0x30); LCD_write_char(0x0c,LINE2,(ResultTemperatureLH%10)|0x30); LCD_write_char(0x0d,LINE2,(ResultTemperatureLL/10)|0x30); LCD_write_char(0x0e,LINE2,(ResultTemperatureLL%10)|0x30); } unsigned char Read18B20(void) { unsigned char ch; unsigned char q ; for(q=0;q<8;q++) {ch=ch>>1; DQ="0"; _nop_(); DQ="1"; _nop_();_nop_();_nop_();_nop_(); if(DQ==1) {ch="ch|0x80";} else {ch="ch"&0x7f;} Delay15(3); DQ="1"; } return (ch); } void Write18B20(uchar ch) { uchar i; for(i=0;i<8;i++) { DQ="0"; Delay15(1); DQ="ch"&0x01; Delay15(3); DQ="1"; ch="ch">>1; _nop_(); } } void Init18B20(void) { DQ="0"; Delay15(33);//至少延时480us DQ="1"; Delay15(10);//至少延时100us /*if(DQ==1) return 0; //初始化失败 else return 1; DQ=1; Delay15(18); */ } void Delay15(uchar n) { do{ _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); n--; }while(n); } void Delay10ms(uint delay_num) { uchar i; while(delay_num--) { for(i=0;i<125;i++) {;} } } |
|
相关推荐
1个回答
|
|
新手啥都不会,,,,
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-LCD显示图片编程示例之介绍mmap
551 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》第二章 常用的C语言知识点
910 浏览 0 评论
【RA-Eco-RA2E1-48PIN-V1.0开发板试用】(第三篇)ADC采集+PWM输出
575 浏览 0 评论
《DNK210使用指南 -CanMV版 V1.0》第四十五章 人脸识别实验
572 浏览 0 评论
1221 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11769 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-23 21:13 , Processed in 0.666446 second(s), Total 74, Slave 55 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号