您的位置:首页 > 其它

单片机练习 - 使用1602LCD显示DS18B20的温度值

2007-03-19 01:15 561 查看
关于DS18B20电子温度器件可查看单片机练习 - DS18B20温度转换与显示 .

本文主要讲述如何使用LCD. 具体过程解释可查看代码注释.

程序代码:

//1602液晶显示程序, TX-1B实验板上的1602LCD的R/W读写端接地, 即始终只写, 不读数据

2//使用1602LCD显示DS18B20转换的温度值

3#include <reg52.H>

4#include <intrins.H>

5#include <math.H>

6

7#define uchar unsigned char

8#define uint unsigned int

9sbit dula = P2^6;

10sbit wela = P2^7;

11

12sbit RS = P3^5;    //数据/命令选择端(H/L)

13sbit LCDEN = P3^4; //使能端

14

15void delayUs()

16

20void delayMs(uint a)

21

27//第一行开始地址为0x80, 第二行开始地址为0xc0;

28//写命令:RS=0, RW=0;

29void writeComm(uchar comm)

30

39//写数据:RS=1, RW=0;

40void writeData(uchar dat)

41

50//初始化

51//显示模式, 固定指令为00111000=0x38, 16*2显示, 5*7点阵,8位数据接口

52//显示开/关及光标设置

53//指令1: 00001DCB : D:开显示/关显示(H/L); C:显示光标/不显示(H/L), B:光标闪烁/不闪烁(H/L)

54//指令2: 000001NS :

55//N=1, 当读/写一个字符后地址指针加1, 且光标也加1; N=0则相反

56//S=1, 当写一个字符, 整屏显示左移(N=1)或右移(N=0), 但光标不移动; S=0, 整屏不移动

57void init()

58

67void writeString(uchar * str, uchar length)

68

76sbit ds = P2^2;

78//初始化DS18B20

79//让DS18B20一段相对长时间低电平, 然后一段相对非常短时间高电平, 即可启动

80void dsInit()

81

92void dsWait()

93

//向DS18B20读取一位数据

//读一位, 让DS18B20一小周期低电平, 然后两小周期高电平,

//之后DS18B20则会输出持续一段时间的一位数据

bit readBit()

//读取一字节数据, 通过调用readBit()来实现

unsigned char readByte()

//向DS18B20写入一字节数据

void writeByte(unsigned char dat)

//向DS18B20发送温度转换命令

void sendChangeCmd()

//向DS18B20发送读取数据命令

void sendReadCmd()

//获取当前温度值

int getTmpValue()

void display(int v)

void main()

{

uchar table[] = "Now Temperature:";

sendChangeCmd();

init();

writeComm(0x80);

writeString(table, 16);

while(1)

{

delayMs(1000); //温度转换时间需要750ms以上

writeComm(0xc0);

display(getTmpValue());

sendChangeCmd();

}

}


效果图1:



效果图2:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: