




已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
/*/* */* TX-51STAR单片机开发系统演示程序 - DS18B20-64位序列码读取程序 */* * LCD1602显示 * * 工作芯片:STC89C516 晶振频率:11.0592MHz * * 版本: V1.0 (2009/1/2) * 作者: 郭天祥 (Email: ) * 网站: (天祥电子) * 邮箱: * *【版权】Copyright(C)天祥电子 All Rights Reserved *【声明】此程序仅用于学习与参考,引用请注明版权和作者信息! * */*/*读取DS18B20的64位序列码并显示在1602液晶上,如果读取正确结果,则在液晶第一行显示DS18B20 OK,第二行显示序列码,如果读取失败,则在液晶上显示DS18B20 ERR0R PLEASE CHECK ,用户可通过更改18B20接口自己外接。 */#include #include #define uchar unsigned char#define uint unsigned intsbit DQ = P22; /定义DS18B20端口DQ sbit BEEP=P23 ; /蜂鸣器驱动线bit presence ;sbit LCD_RS = P35; /sbit LCD_RW = P21;sbit LCD_EN = P34;uchar code cdis1 = DS18B20 OK ;uchar code cdis2 = ;uchar code cdis3 = DS18B20 ERR0R ;uchar code cdis4 = PLEASE CHECK ;unsigned char data display2 = 0x00,0x00; unsigned char data RomCode8 = 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00;unsigned char Temp;unsigned char crc;void beep();#define delayNOP(); _nop_();_nop_();_nop_();_nop_();/*/void delay1(int ms) unsigned char y; while(ms-) for(y = 0; y250; y+) _nop_(); _nop_(); _nop_(); _nop_(); /*/* */*检查LCD忙状态 */*lcd_busy为1时,忙,等待。lcd-busy为0时,闲,可写指令与数据。 */* */*/ bit lcd_busy() bit result; LCD_RS = 0;/ LCD_RW = 1; LCD_EN = 1; delayNOP(); result = (bit)(P0&0x80); LCD_EN = 0; return(result); /*/* */*写指令数据到LCD */*RS=L,RW=L,E=高脉冲,D0-D7=指令码。 */* */*/void lcd_wcmd(uchar cmd) / while(lcd_busy(); LCD_RS = 0; / LCD_RW = 0; LCD_EN = 0; _nop_(); _nop_(); P0 = cmd; delayNOP(); LCD_EN = 1; delayNOP(); LCD_EN = 0; delay1(5);/*/* */*写显示数据到LCD */*RS=H,RW=L,E=高脉冲,D0-D7=数据。 */* */*/void lcd_wdat(uchar dat) / while(lcd_busy(); LCD_RS = 1;/ LCD_RW = 0; LCD_EN = 0; P0 = dat; delayNOP(); LCD_EN = 1; delayNOP(); LCD_EN = 0; delay1(5);/*/* */* LCD初始化设定 */* */*/void lcd_init() delay1(15); lcd_wcmd(0x01); /清除LCD的显示内容 lcd_wcmd(0x38); /16*2显示,5*7点阵,8位数据 delay1(5); lcd_wcmd(0x38); delay1(5); lcd_wcmd(0x38); delay1(5); lcd_wcmd(0x0c); /显示开,关光标 delay1(5); lcd_wcmd(0x06); /移动光标 delay1(5); lcd_wcmd(0x01); /清除LCD的显示内容 delay1(5);/*/* */* 设定显示位置 */* */*/void lcd_pos(uchar pos) lcd_wcmd(pos | 0x80); /数据指针=80+地址变量/*/* */*us级延时函数 */* */*/void Delay(unsigned int num) while( -num );/*/* */*初始化ds1820 */* */*/Init_DS18B20(void) DQ = 1; /DQ复位 Delay(8); /稍做延时 DQ = 0; /将DQ拉低 Delay(90); /精确延时 大于 480us DQ = 1; /拉高总线 Delay(8); presence = DQ; /读取存在信号 Delay(100); DQ = 1; return(presence); /返回信号,0=presence,1= no presence/*/* */* 读一位(bit) */* */*/uchar read_bit(void) unsigned char i;DQ = 0; /将DQ 拉低开始读时间隙DQ = 1; / then return highfor (i=0; i 0; i-)/ / read_bit();/ DQ = 0; / 给脉冲信号/ dat = 1;/ DQ = 1; / 给脉冲信号for (i=0;i8;i+) / 读取字节,每次读取一个字节if(read_bit() dat|=0x01 0; i-)/ for (i=0; ii; temp &= 0x01; write_bit(temp);/ dat=1; Delay(5);/*/* */* 读取64位序列码 */* */*/ Read_RomCord(void) unsigned char j; Init_DS18B20(); WriteOneChar(0x33); / 读序列码的操作 for (j = 0; j 8; j+) RomCodej = ReadOneChar() ; /*/* */*DS18B20的CRC8校验程序 */* */*/uchar CRC8() uchar i,x; uchar crcbuff; crc=0; for(x = 0; x 8; x+) crcbuff=RomCodex; for(i = 0; i = 1; else crc = 0x18; /CRC=X8+X5+X4+1 crc = 1; crc |= 0x80; crcbuff = 1; return crc;/*/* */* 数据转换与显示 */* */*/ Disp_RomCode() uchar j; uchar H_num=0x40; /LCD第二行初始位置 for(j=0;j4); if(display09) display0=display0+0x37; elsedisplay0=display0+0x30; lcd_pos(H_num); lcd_wdat(display0); /高位数显示 H_num+; display1=(Temp&0x0f); if(display19) display1=display1+0x37; else display1=display1+0x30; lcd_pos(H_num); lcd_wdat(display1); /低位数显示 H_num+; /*/* */* 蜂鸣器响一声 */* */*/void beep() unsigned char y; for (y=0;y100;y+) Delay(60); BEEP=!BEEP; /BEEP取反 BEEP=1; /关闭蜂鸣器Delay(40000); /*/* */* DS18B20 OK 显示菜单 */* */*/void Ok_Menu () uchar m; lcd_init(); /初始化LCD lcd_pos(0); /设置显示位置为第一行的第1个字符 m = 0; while(cdis1m != 0) /显示字符 lcd_wdat(cdis1m); m+; lcd_pos(0x40); /设置显示位置为第二行第1个字符 m = 0; while(cdis2m != 0) lcd_wdat(cdis2m); /显示字符 m+; /*/* */* DS18B20 ERROR 显示菜单 */* */*/void Error_Menu () uchar m; lcd_init(); /初始化LCD lcd_pos(0); /设置显示位置为第一行的第1个字符 m = 0; while(cdis3m != 0) /显示字符 lcd_wdat(cdis3m); m+; lcd_pos(0x40); /设置显示位置为第二行第1个字符 m = 0; while(cdis4m != 0) lcd_wdat(cdis4m); /显示字符 m+; /*/* */* 主函数 */* */*/void main() P0 = 0xff; P2 = 0xff; while(1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025黑龙江鹤岗市北三峡食品有限公司招聘模拟试卷及参考答案详解一套
- 2025广西壮族自治区卫生健康委员会机关服务中心招聘编外聘用人员3人模拟试卷及答案详解(名校卷)
- 2025广东东莞麻涌镇人力资源服务有限公司招聘7人模拟试卷附答案详解(考试直接用)
- 2025年春季中国诚通控股集团有限公司校园招聘49人考前自测高频考点模拟试题附答案详解(典型题)
- 2025湖南岳阳市平江县第四人民医院公开招聘临聘人员5人考前自测高频考点模拟试题及答案详解(名师系列)
- 2025贵州民族大学高层次人才引进85人考前自测高频考点模拟试题及答案详解(名校卷)
- 2025年河南省社会科学院招聘高层次人才考前自测高频考点模拟试题及答案详解(全优)
- 2025广西贵港市公安局覃塘分局招聘警务辅助人员80人考前自测高频考点模拟试题及答案详解(名师系列)
- 2025年温州永嘉县乌牛街道社区卫生服务中心招聘劳务派遣人员1人考前自测高频考点模拟试题及答案详解(考点梳理)
- 2025江苏淮安市淮阴区人民政府法律顾问选聘12人模拟试卷及答案详解(夺冠系列)
- 中学窗帘采购项目方案投标文件(技术文件)
- 渔政执法快艇管理办法
- 2025年中远海运集团招聘笔试备考题库(带答案详解)
- 2025至2030光纤电缆(光缆)行业发展趋势分析与未来投资战略咨询研究报告
- 高桩码头施工培训课件
- 2025年Bio-based+100+生物基材料创新应用案例
- 中通规章管理制度
- 城市地理学第二版第三章城市的产生与发展 第四章城市化原理课件
- 现代文献检索与利用3-文献检索技术
- 2025年(广东省协会 )房屋安全检测鉴定技术培训-机考历年真题考前冲刺题
- 汉服文化知识普及
评论
0/150
提交评论