


版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、51单片机C程序XT«IIzct1 , 4 莎EF旳帝酣Fl, FijiPJ.dlT®HJ1yrN.-iTtPMp|TWTnr軌甘必11:熔他址A B c D#in clude<reg51.h>#in clude< intrin s.h>#defi ne uchar un sig ned charsbit RS=P3A5。/定义LCD端口sbit RW=P3A6。sbit E=P3A7。sbit DQ=P3A4。/定义单总线端口uchar LCD_3, LCD_2, LCD_1 丄 CD_0 。uchar ds18b20_romA8=0x8e,0x0
2、0,0x00,0x00,0xb8,0xc5,0x30,0x28。/四个DS18B20的64位 ROM地址uchar ds18b20_romB8=0x52,0x00,0x00,0x00,0xb8,0xc5,0x34,0x28。uchar ds18b20_romC8=0x65,0x00,0x00,0x00,0xb8,0xc5,0x35,0x28。uchar ds18b20_romD8=0x3c,0x00,0x00,0x00,0xb8,0xc5,0x36,0x28。uchar code LCDData ="0123456789"。uchar code dot_tab ="
3、;78899"。uchar first_line16="A:000.0 B:000.0"。/LCD 第一行显示缓存数组uchar second_line16="C:000.0 D:000.0"。/LCD第二行显示缓存数组/*/延时程序/*void delay (un sig ned int N>unsigned int i。for(i=0。 i<N。i+>。*/LCD1602 测忙/*void check_busy(voidwhile(1P1=0xff 。E=0。_nop_(。RS=0。_nop_(。_nop_(。RW=1。_
4、nop_(。_nop_(。E=1。_nop_(。_nop_(。_nop_(。_nop_(。 if(P1&0x80=0break。E=0。/*/LCD1602 写命令/* void write_command(uchar tempdata E=0。_nop_(。_nop_(。RS=0。_nop_(。_nop_(。RW=0。P1=tempdata。_nop_(。_nop_(。E=1。_nop_(。_nop_(。E=0。_nop_(。 check_busy( 。/*/LCD1602 写数据/* void write_data(uchar tempdata E=0。_nop_(。_nop_(。
5、RS=1。_nop_(。_nop_(。RW=0。 P1=tempdata。 _nop_(。_nop_(。E=1。_nop_(。_nop_(。E=0。_nop_(。 check_busy( 。/*/初始化 LCD1602*void init_lcd1602( write_command(0x01 。/清除屏幕 write_command(0x38 。/功能设定 8位, 2行, 5*7点阵式) write_command(0x0c 。显示器ON,光标OFF,闪烁OFFwrite_command(0x06 。 /地址加 1/*/初始化 ds18b20*bit resetpulse(voidDQ=0。
6、 delay(40> 。/延时 500usDQ=1。delay(4> 。/延时 60us return(DQ> 。/读取P1.0的状态void ds18b20_i ni t(void>while(1>if(!resetpulse(>>收到ds18b20的应答信号DQ=1 。 delay(40> 。/延时 240usbreak。elseresetpulse(>。 /否则再发复位信号/*/ 读 ds18b20 一位/*uchar read_bit(void>DQ=0 。_nop_(>。_nop_(>。DQ=1 。delay(2
7、> 。 return(DQ> 。/*/读ds18b20 一个字节/*uchar read_byte(void>uchar i,m,receive_data 。 m=1。receive_data=0。for(i=0 。 i<8。 i+>if(read_bit(>>receive_data=receive_data+(m<<i> 。 delay(7> 。 return(receive_data> 。*/ 向 ds18b20 写一位/* void write_bit(uchar bitval>DQ=0 。if(bitval
8、=1>DQ=1 。delay(5> 。DQ=1 。/*/向 DS18B20 写一个字节命令/*void write_byte(uchar val>uchar i,temp 。 for(i=0 。 i<8 。 i+> temp=val>>i 。 temp=temp&0x01 。 write_bit(temp> 。d elay(5> 。/*/64位的 ROM 序列号匹配/*bit match_rom(uchar *rom>uchar i 。ds18b20_init(> 。 write_byte(0x55> 。 for(
9、i=8 。 i>0。 i-> write_byte(*(rom+i-1>>return 1 。/*从ds18b20中读出64位序列号*/*uchar * read_rom(void>uchar rom8,i 。 ds18b20_init(> 。 write_byte(0x33> 。for(i=8 。 i>0 。 i-> romi-1=read_byte(> 。return &rom0 。*/* /将64位序列号显示在 LCD 上显示出来/* /*void print_char(uchar a>if(a>=0&
10、;&a<=9>write_data(a+0x30> 。 else if(a>=0x0a &&a<= 0x0f> write_data(a+0x37> 。*/*温度转换,将从ds18b20中读出来的温度值/转化成十进制的温度值 ,并存放显示缓存*void convert_T(uchar temp_data_h,uchar temp_data_l> uchar temp 。if(temp_data_h&0xf0>=0xf0> /如果温度寄存器里的高位为1,/负温度将补码转成二进制/则温度为负temp_dat
11、a_l=temp_data_l 。if(temp_data_l=0xff>elseelse/温度为正/取反再加 1temp_data_l=temp_data_l+0x01 。temp_data_h=temp_data_h。temp_data_h=temp_data_h+0x01 。temp_data_l=temp_data_l+0x01 。temp_data_h=temp_data_h。LCD_0=dot_tabtemp_data_l&0x0f 。 /查表得小数位的值 temp=(temp_data_l&0xf0>>>4>|(temp_data_h
12、&0x0f><<4> 。 LCD_3='-' 。 LCD_2=LCDData(temp%100>/10 。 LCD_1=LCDData(temp%100>%10 。/显示 "-" 号/查表得负温度温度十位 /查表得负温度个位LCD_0=dot_tabtemp_data_l&0x0f 。 temp=(temp_data_l&0xf0>>>4>|(temp_data_h&0x0f><<4> 。LCD_3=LCDDatatemp/100 。/查表得温
13、度百位LCD_2=LCDData(temp%100>/10 。 /查表得温度十位LCD_1=LCDData(temp%100>%10 。 /查表得温度个位/查表得小数位的值void display(void>uchar i 。 write_command(0x80> 。for(i=0 。 i<16 。 i+> write_data(first_linei> 。 write_command(0xc0> 。for(i=0 。 i<16 。 i+> write_data(second_linei> 。void main(void>
14、;uchar temp_data_l,temp_data_h 。/读序列号/温度低 8位/温度高 8位/*uchar *ds18b20_rom 。 */init_lcd1602(> 。/*while(1>uchar i 。ds18b20_rom=read_rom(> 。write_command(0x80> 。for(i=0 。 i<8。 i+>ds18b20_romAi=*ds18b20_rom 。 ds18b20_rom+ 。write_command(0x80> 。for(i=0 。 i<8。 i+>/显示序列号print_char(
15、ds18b20_romAi/16> 。 print_char(ds18b20_romAi%16> 。*/while(1>ds18b20_init(> 。write_byte(0xcc> 。write_byte(0x44> 。/启动温度转换delay(700> 。 match_rom(ds18b20_romA> 。/匹配第一路write_byte(0xbe> 。/读温度temp_data_l= read_byte(> 。temp_data_h = read_byte(> 。 convert_T(temp_data_h,temp_d
16、ata_l> 。 first_line2=LCD_3 。/温度转换后的各位first_line3=LCD_2 。/分别存入显示缓存数组中 first_line4=LCD_1 。 first_line6=LCD_0 。 match_rom(ds18b20_romB> 。/匹配第二路write_byte(0xbe> 。/读温度temp_data_l= read_byte(> 。 temp_data_h = read_byte(> 。convert_T(temp_data_h,temp_data_l> 。 first_line10=LCD_3 。/温度转换后的各位
17、first_line11=LCD_2 。/分别存入显示缓存数组中first_line12=LCD_1 。first_line14=LCD_0 。 display(> 。 match_rom(ds18b20_romC> 。/匹配第三路write_byte(0xbe> 。/读温度temp_data_l= read_byte(> 。 temp_data_h = read_byte(> 。convert_T(temp_data_h,temp_data_l> 。 second_line2=LCD_3 。/温度转换后的各位second_line3=LCD_2 。 /分别存入显示缓存数组中second_line4=LCD_1 。second_line6=LCD_0 。 match_rom(ds18b20_romD> 。/匹配第四路write_byte(0x
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 神奇的大树250字14篇
- 我学会了责任400字11篇
- 早餐专业知识培训班课件
- 爱看书的女孩200字9篇
- 叫我第一名观后感650字(13篇)
- 早期孕妇保健知识培训课件
- 早教老师礼仪知识培训课件
- 纪念白求恩app课件
- 假如我是一条蚯蚓作文800字(11篇)
- 纪念抗美援朝课件
- 胆总管结石伴急性胆管炎
- 找对英语学习方法的第一本书
- 制度编写书写规范
- 安徽涵丰科技有限公司年产6000吨磷酸酯阻燃剂DOPO、4800吨磷酸酯阻燃剂DOPO衍生品、12000吨副产品盐酸、38000吨聚合氯化铝、20000吨固化剂项目环境影响报告书
- 制造业业务流程
- 《诺丁山》经典台词
- 对铁路机车乘务员规章培训的探讨与实践
- 临床医学实验室 仪器设备一览表格模板
- 2016风行菱智m5原厂维修手册及电路图-14
- 《绿色建筑》绿色建筑与建筑节能课件
- 二级生物安全实验室备案登记申请表(模板)
评论
0/150
提交评论