- 12
- 0
- 约3.07千字
- 约 5页
- 2018-04-03 发布于河南
- 举报
基于LCD12864的温度传感器DS18b20的显示程序
/*由于DS18B20对延时的要求很高,所以要根据采用的晶振来确定延迟时间,以下程序待对时间都有明确标注,根据你选用的晶振来调节即可*/
#include reg52.h //
#include intrins.h
#define uchar unsigned char
#define uint unsigned int
#define LCD_data P0 //显示屏输出数据口
/*液晶控制端口*/
sbit LCD_RST = P1^4; //液晶复位端口
sbit LCD_RS = P1^5; //寄存器选择输入
sbit LCD_RW = P1^6; //液晶读/写控制
sbit LCD_EN = P1^7; //液晶使能控制
sbit DQ=P1^0;
uint a,b,i;
uchar str[16]={--温度:000.0 M--}; //定义数组
uchar k,m;
float temp;
//延时子函数1
void delay5us(uchar z)
{uchar i;
for(i=0;iz;i++);
}
void delayNOP()
{_nop_();_nop_();_nop_();_nop_();}
void delay(uint z) //延时子函数1 ms
{
uint x,y;
for(x=z;x0;x--)
for(y=200;y0;y--);
}
bit lcd_busy() //检测液晶忙碌?
{
bit result;
LCD_RS = 0;
LCD_RW = 1;
LCD_EN = 1;
delayNOP();
result = (bit)(P00x80);
LCD_EN = 0;
return (result);
}
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;
}
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;
}
void lcd_init() //液晶初始化
{
LCD_RST = 0; //液晶复位
delay(3);
LCD_RST = 1;
delay(3);
lcd_wcmd(0x34); //扩充指令操作
delay(5);
lcd_wcmd(0x30); //基本指令操作
delay(5);
lcd_wcmd(0x0C); //显示开,关光标
delay(5);
lcd_wcmd(0x01); //清除LCD的显示内容
delay(5);
}
uchar ds18_init()
{
uchar i;
DQ = 0;//总线拉低
delay5us(100);//500us
DQ = 1;//总线拉高
delay5us(20);//延时100us
i=DQ;
delay5us(100);//500us
return i;
}
void write_18(uchar value)
{
uchar i,v1=0;
v1 = value;
for (i =0 ;i8;i++)
{
DQ = 0;//总线拉低
delay5us(2);//延时10us
if(v10x01)
DQ = 1;
原创力文档

文档评论(0)