为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

lm016l的显示程序

2017-09-26 18页 doc 41KB 130阅读

用户头像

is_215732

暂无简介

举报
lm016l的显示程序lm016l的显示程序 精品文档 --------------------------精品文档,可以编辑修改,等待你的下载,管理,教育文档---------------------- ------------------------------------------------------------------------------------------------------------------------------------------ ------------ #include #includ...
lm016l的显示程序
lm016l的显示程序 精品文档 --------------------------精品文档,可以编辑修改,等待你的下载,管理,教育文档---------------------- ------------------------------------------------------------------------------------------------------------------------------------------ ------------ #include < reg51.h > #include < intrins.h > #define uchar unsigned char #define uint unsigned int sbit DQ = P2^7 ; //定义DS18B20端口DQ void reset(); //DS18B20复位函数 void write_byte(uchar val); //DS18B20写命令函数 uchar read_byte(void); //DS18B20读1字节函数 void read_temp(); //温度读取函数 void work_temp(); //温度数据处理函数 sbit BEEP=P2^5 ; //蜂鸣器驱动线 bit presence ; sbit LCD_RS = P3^5 ; sbit LCD_RW = P3^6 ; sbit LCD_EN = P3^7 ; uchar code cdis1[ ] = {" SETTEMP: 50.C "} ; uchar code cdis2[ ] = {" TESTTEMP: . C "} ; uchar code cdis3[ ] = {" DS18B20 ERR0R "} ; uchar code cdis4[ ] = {" PLEASE CHECK "} ; unsigned char data temp_data[2] = {0x00,0x00} ; unsigned char data display[5] = {0x00,0x00,0x00,0x00,0x00} ; unsigned char code ditab[16] = {0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09} ; void beep() ; unsigned char code mytab[8] = {0x0C,0x12,0x12,0x0C,0x00,0x00,0x00,0x00} ; #define delayNOP() ; {_nop_() ;_nop_() ;_nop_() ;_nop_() ;} ; /*******************************************************************/ void delay1(int ms) { unsigned char y ; while(ms--) { for(y = 0 ; y<250 ; 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)(P1&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_() ; P1 = cmd ; delayNOP() ; LCD_EN = 1 ; delayNOP() ; LCD_EN = 0 ; } /*******************************************************************/ /*写显示数据到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 ; P1 = dat ; delayNOP() ; LCD_EN = 1 ; delayNOP() ; LCD_EN = 0 ; } /* 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+地址变量 } /*自定义字符写入CGRAM */ /*******************************************************************/ void writetab() { unsigned char i ; lcd_wcmd(0x40) ; //写CGRAM for (i = 0 ; i< 8 ; i++) lcd_wdat(mytab[ i ]) ; } /*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 ; //如果=0则初始化成功 =1则初始化失败 Delay(100) ; DQ = 1 ; return(presence) ; //返回信号,0=presence,1= no presence } /* 读一个字节 */ /*******************************************************************/ ReadOneChar(void) 精品文档 --------------------------精品文档,可以编辑修改,等待你的下载,管理,教育文档---------------------- ------------------------------------------------------------------------------------------------------------------------------------------ ------------ 精品文档 --------------------------精品文档,可以编辑修改,等待你的下载,管理,教育文档---------------------- ------------------------------------------------------------------------------------------------------------------------------------------ ------------ { unsigned char i = 0 ; unsigned char dat = 0 ; for (i = 8 ; i > 0 ; i--) { DQ = 0 ; // 给脉冲信号 dat >>= 1 ; DQ = 1 ; // 给脉冲信号 if(DQ) dat |= 0x80 ; Delay(4) ; } return (dat) ; } /* 写一个字节 */ /*******************************************************************/ WriteOneChar(unsigned char dat) { unsigned char i = 0 ; for (i = 8 ; i > 0 ; i--) { DQ = 0 ; DQ = dat&0x01 ; Delay(5) ; DQ = 1 ; dat>>=1 ; } } /* 读取温度 */ /*******************************************************************/ Read_Temperature(void) { Init_DS18B20() ; WriteOneChar(0xCC) ; // 跳过读序号列号的操作 WriteOneChar(0x44) ; // 启动温度转换 精品文档 --------------------------精品文档,可以编辑修改,等待你的下载,管理,教育文档---------------------- ------------------------------------------------------------------------------------------------------------------------------------------ ------------ 精品文档 --------------------------精品文档,可以编辑修改,等待你的下载,管理,教育文档---------------------- ------------------------------------------------------------------------------------------------------------------------------------------ ------------ Init_DS18B20() ; WriteOneChar(0xCC) ; //跳过读序号列号的操作 WriteOneChar(0xBE) ; //读取温度寄存器 temp_data[0] = ReadOneChar() ; //温度低8位 temp_data[1] = ReadOneChar() ; //温度高8位 } /* 数据转换与温度显示 */ /*******************************************************************/ Disp_Temperature() { display[4]=temp_data[0]&0x0f ; display[0]=ditab[display[4]]+0x30 ; //查表得小数位的值 display[4]=((temp_data[0]&0xf0)>>4)|((temp_data[1]&0x0f)<<4) ; display[3]=display[4]/100+0x30 ; display[1]=display[4]%100 ; display[2]=display[1]/10+0x30 ; display[1]=display[1]%10+0x30 ; if(display[3]==0x30) //高位为0,不显示 { display[3]=0x20 ; if(display[2]==0x30) //次高位为0,不显示 display[2]=0x20 ; } lcd_pos(0x48) ; lcd_wdat(display[3]) ; //百位数显示 lcd_pos(0x49) ; lcd_wdat(display[2]) ; //十位数显示 lcd_pos(0x4a) ; lcd_wdat(display[1]) ; //个位数显示 lcd_pos(0x4c) ; lcd_wdat(display[0]) ; //小数位数显示 } /*******************************************************************/ /* 蜂鸣器响一声 */ /*******************************************************************/ void beep() { 精品文档 --------------------------精品文档,可以编辑修改,等待你的下载,管理,教育文档---------------------- ------------------------------------------------------------------------------------------------------------------------------------------ ------------ 精品文档 --------------------------精品文档,可以编辑修改,等待你的下载,管理,教育文档---------------------- ------------------------------------------------------------------------------------------------------------------------------------------ ------------ unsigned char y ; for (y=0 ;y<100 ;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(cdis1[m] != '\0') { //显示字符 lcd_wdat(cdis1[m]) ; m++ ; } lcd_pos(0x40) ; //设置显示位置为第二行的第1个字符 m = 0 ; while(cdis2[m] != '\0') { lcd_wdat(cdis2[m]) ; //显示字符 m++ ; } writetab() ; //自定义字符写入CGRAM delay1(5) ; lcd_pos(0x4d) ; lcd_wdat(0x00) ; //显示自定义字符 } /* DS18B20 ERROR 显示菜单 */ /*******************************************************************/ void Error_Menu () 精品文档 --------------------------精品文档,可以编辑修改,等待你的下载,管理,教育文档---------------------- ------------------------------------------------------------------------------------------------------------------------------------------ ------------ 精品文档 --------------------------精品文档,可以编辑修改,等待你的下载,管理,教育文档---------------------- ------------------------------------------------------------------------------------------------------------------------------------------ ------------ { uchar m ; lcd_init() ; //初始化LCD lcd_pos(0) ; //设置显示位置为第一行的第1个字符 m = 0 ; while(cdis3[m] != '\0') { //显示字符 lcd_wdat(cdis3[m]) ; m++ ; } lcd_pos(0x40) ; //设置显示位置为第二行的第1个字符 m = 0 ; while(cdis4[m] != '\0') { lcd_wdat(cdis4[m]) ; //显示字符 m++ ; } } /* 主函数 */ /************************************/ void main() { Ok_Menu () ; do { Read_Temperature() ; Disp_Temperature() ; } while(!presence) ; Error_Menu () ; do { Init_DS18B20() ; beep() ; } while(presence) ; } 精品文档 --------------------------精品文档,可以编辑修改,等待你的下载,管理,教育文档---------------------- ------------------------------------------------------------------------------------------------------------------------------------------ ------------ 精品文档 --------------------------精品文档,可以编辑修改,等待你的下载,管理,教育文档---------------------- ------------------------------------------------------------------------------------------------------------------------------------------ ------------ 精品文档 --------------------------精品文档,可以编辑修改,等待你的下载,管理,教育文档---------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------
/
本文档为【lm016l的显示程序】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索