LM016L的显示程序_第1页
LM016L的显示程序_第2页
LM016L的显示程序_第3页
LM016L的显示程序_第4页
LM016L的显示程序_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、#include < reg51.h >#include < intrins.h >#define uchar unsigned char#define uint   unsigned intsbit DQ = P27 ;                      /定义DS18B20端口DQ  void reset(); 

2、                        /DS18B20复位函数  void write_byte(uchar val);           /DS18B20写命令函数  uchar read_byte(void);  

3、              /DS18B20读1字节函数  void read_temp();                     /温度读取函数   void work_temp();    &

4、#160;                /温度数据处理函数    sbit BEEP=P25 ;                      /蜂鸣器驱动线  bit presence &#

5、160; ;sbit LCD_RS = P35 ;             sbit LCD_RW = P36 ;sbit LCD_EN = P37 ;uchar code   cdis1 = "   SETTEMP:  50.C   " ;uchar code   cdis2 = "   TESTTEMP:  

6、60;  .   C " ;uchar code   cdis3 = " DS18B20   ERR0R " ;uchar code   cdis4 = "   PLEASE CHECK  " ;unsigned char data   temp_data2 = 0x00,0x00 ;unsigned char data   display5 =    0x

7、00,0x00,0x00,0x00,0x00 ;unsigned char code   ditab16 =     0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09 ;void beep() ; unsigned char code   mytab8 = 0x0C,0x12,0x12,0x0C,0x00,0x00,0x00,0x00 ;#define delayNOP() ; _nop_() ;_nop_() ;_

8、nop_() ;_nop_() ; ;/*/void delay1(int ms)unsigned char y ;   while(ms-)   for(y = 0 ; y<250 ; y+)       _nop_() ;    _nop_() ;    _nop_() ;    _nop_() ;   /*/*检查LCD忙状态     

9、                                               */*lcd_busy为1时,忙,等待。lcd

10、-busy为0时,闲,可写指令与数据。    */*/ bit lcd_busy()                               bit result ;     LCD_RS = 0 ;   

11、  LCD_RW = 1 ;     LCD_EN = 1 ;     delayNOP() ;     result = (bit)(P1&0x80) ;     LCD_EN = 0 ;     return(result) ; /*写指令数据到LCD          

12、60;                                        */*RS=L,RW=L,E=高脉冲,D0-D7=指令码。     

13、60;     */*/void lcd_wcmd(uchar cmd)                              while(lcd_busy() ;     LCD_RS = 0 ;   &

14、#160; LCD_RW = 0 ;     LCD_EN = 0 ;     _nop_() ;     _nop_() ;      P1 = cmd ;     delayNOP() ;     LCD_EN = 1 ;     delayNOP() ;     LCD_E

15、N = 0 ;  /*/*写显示数据到LCD                             */*RS=H,RW=L,E=高脉冲,D0-D7=数据。        */*/void lcd_wdat(uchar dat) 

16、;                             while(lcd_busy() ;     LCD_RS = 1 ;     LCD_RW = 0 ;     LCD_EN = 0 ; 

17、    P1 = dat ;     delayNOP() ;     LCD_EN = 1 ;     delayNOP() ;     LCD_EN = 0 ; /*   LCD初始化设定                

18、60;                                  */*/void lcd_init()      delay1(15) ;        lcd

19、_wcmd(0x01) ;       /清除LCD的显示内容                  lcd_wcmd(0x38) ;       /16*2显示,5*7点阵,8位数据       delay1(5) ;     lc

20、d_wcmd(0x38) ;              delay1(5) ;     lcd_wcmd(0x38) ;              delay1(5) ;     lcd_wcmd(0x0c) ;     

21、0; /显示开,关光标       delay1(5) ;     lcd_wcmd(0x06) ;       /移动光标       delay1(5) ;     lcd_wcmd(0x01) ;       /清除LCD的显示内容      

22、  delay1(5) ;/*   设定显示位置                                     */*/void lcd_pos(uchar pos)   

23、;                          lcd_wcmd(pos | 0x80) ;   /数据指针=80+地址变量   /*自定义字符写入CGRAM             

24、                       */*/void   writetab()         unsigned char i ;     lcd_wcmd(0x40) ;      

25、60;      /写CGRAM       for (i = 0 ; i< 8 ; i+)            lcd_wdat(mytab i ) ;        /*us级延时函数           &

26、#160;                             */*/void Delay(unsigned int num)   while( -num ) ;/*初始化ds1820         &

27、#160;                             */*/Init_DS18B20(void)        DQ = 1 ;       /DQ复位   

28、60;   Delay(8) ;     /稍做延时        DQ = 0 ;       /单片机将DQ拉低         Delay(90) ;    /精确延时 大于 480us         DQ = 1 ;  

29、      /拉高总线        Delay(8) ;      presence = DQ ;     /如果=0则初始化成功 =1则初始化失败            Delay(100) ;      DQ = 1 ;   

30、;         return(presence) ; /返回信号,0=presence,1= no presence  /* 读一个字节                      */*/ReadOneChar(void)unsigned char i = 0 ;unsigned char dat = 0

31、 ;for (i = 8 ; i > 0 ; i-)        DQ = 0 ; / 给脉冲信号       dat >>= 1 ;     DQ = 1 ; / 给脉冲信号       if(DQ)      dat |= 0x80 ;     Delay(4) ; 

32、0;      return (dat) ;/* 写一个字节                                          */*

33、/WriteOneChar(unsigned char dat)   unsigned char i = 0 ;   for (i = 8 ; i > 0 ; i-)        DQ = 0 ;     DQ = dat&0x01 ;     Delay(5) ;     DQ = 1 ;     dat>>

34、=1 ;   /* 读取温度                             */*/Read_Temperature(void)      Init_DS18B20() ;      

35、60; WriteOneChar(0xCC) ;   / 跳过读序号列号的操作          WriteOneChar(0x44) ;   / 启动温度转换        Init_DS18B20() ;      WriteOneChar(0xCC) ;   /跳过读序号列号的操作      

36、    WriteOneChar(0xBE) ;   /读取温度寄存器         temp_data0 = ReadOneChar() ;    /温度低8位        temp_data1 = ReadOneChar() ;    /温度高8位  /* 数据转换与温度显示     

37、60;                                         */*/Disp_Temperature()   display4=temp_data0&a

38、mp;0x0f ;   display0=ditabdisplay4+0x30 ;      /查表得小数位的值          display4=(temp_data0&0xf0)>>4)|(temp_data1&0x0f)<<4) ;   display3=display4/100+0x30 ;   display1=display4%100 ;  

39、display2=display1/10+0x30 ;   display1=display1%10+0x30 ;     if(display3=0x30)         /高位为0,不显示            display3=0x20 ;          &

40、#160;         if(display2=0x30)       /次高位为0,不显示        display2=0x20 ;          lcd_pos(0x48) ;           

41、60;       lcd_wdat(display3) ;         /百位数显示        lcd_pos(0x49) ;                   lcd_wdat(display2) ;  &

42、#160;      /十位数显示     lcd_pos(0x4a) ;                   lcd_wdat(display1) ;         /个位数显示     lcd_pos(0x4c) ; 

43、60;                 lcd_wdat(display0) ;         /小数位数显示     /*/* 蜂鸣器响一声                &#

44、160; */*/void beep()        unsigned char y ;     for (y=0 ;y<100 ;y+)            Delay(60) ;       BEEP=!BEEP ;         &

45、#160;       /BEEP取反           BEEP=1 ;                       /关闭蜂鸣器  Delay(40000) ;   /* DS18B20 OK 显示菜单&

46、#160;                                             */*/void   Ok_Menu (

47、)      uchar   m ;     lcd_init() ;                 /初始化LCD                   lcd_pos(0) ;

48、                 /设置显示位置为第一行的第1个字符            m = 0 ;     while(cdis1m != '0')           

49、60;                    /显示字符          lcd_wdat(cdis1m) ;        m+ ;           lcd_po

50、s(0x40) ;              /设置显示位置为第二行的第1个字符            m = 0 ;     while(cdis2m != '0')             

51、 lcd_wdat(cdis2m) ;       /显示字符          m+ ;            writetab() ;                /自定义字符写入CGRAM &

52、#160;        delay1(5) ;      lcd_pos(0x4d) ;      lcd_wdat(0x00) ;           /显示自定义字符   /* DS18B20 ERROR 显示菜单                              */*/void   Error_Menu ()     

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论