我这有一段基于MSP430单片机和DS18B20的程序,但是我还想加入一个显示功能,用LCD1602显示。

可是我不知道怎么写这程序。用的是MSP430F4xx,下面是我的程序,我希望懂的人能加入数据显示的程序,用LCD1602显示。谢谢了。#include"common.h"... 可是我不知道怎么写这程序。用的是MSP430F4xx,下面是我的程序,我希望懂的人能加入数据显示的程序,用LCD1602显示。谢谢了。
#include "common.h"
#include "ds18b20.h"

// ROM Operation
#define CMD_READ_ROM 0x33
#define CMD_MATCH_ROM 0x55
#define CMD_SKIP_ROM 0xCC
#define CMD_SEARCH_ROM 0xF0
#define CMD_ALARM_SEARCH_ROM 0xEC

// RAM Operation
#define CMD_WRITE_RAM 0x4E
#define CMD_READ_RAM 0xBE
#define CMD_COPY_RAM 0x48
#define CMD_CONVERT_TEMP 0x44
#define CMD_EECALL_EEPROM 0xB8
#define CMD_READ_POWER_SUPPLY 0xB4

#define DQ_SET_1() P4OUT |= DS18B20_DQ
#define DQ_SET_0() P4OUT &= ~DS18B20_DQ

#define DQ_READ_BEGIN() P4DIR &= ~DS18B20_DQ
#define DQ_READ_END() P4DIR |= DS18B20_DQ
#define DQ_READ() (P4IN & DS18B20_DQ)

static unsigned char ds18b20_reset(void) {
unsigned char rc = 1;

DQ_SET_1(); // DQ 复位
delay_us(50);

DQ_SET_0(); // 拉低 DQ
delay_us(600); // 保持 480us

DQ_SET_1(); // 释放 DQ
delay_us(80); // 等待 60us

DQ_READ_BEGIN();
rc = DQ_READ(); // 0 == success, 1 == error
DQ_READ_END();

DQ_SET_1(); // 释放 DQ
delay_us(100);

return rc;
}

static unsigned char ds18b20_read_byte(void) {
unsigned char i = 0;
unsigned char dat = 0;

for (i = 0; i < 8; i++) {
DQ_SET_0();
delay_us(2);

DQ_SET_1();
delay_us(2);

DQ_READ_BEGIN();
dat >>= 1;
if (DQ_READ()) {
dat |= 0x80;
}
DQ_READ_END();

delay_us(60);
}

DQ_SET_1(); // 释放 DQ

return dat;
}

static void ds18b20_write_byte(unsigned char dat) {
unsigned char i = 0;

for (i = 0; i < 8; i++) {
DQ_SET_0();
delay_us(2);

if (dat & 0x01) {
DQ_SET_1();
} else {
DQ_SET_0();
}
dat >>= 1;
delay_us(60);

DQ_SET_1();
delay_us(2);
}
}

float ds18b20_read_temp(void) {
int temp = 0;

P4DIR |= DS18B20_DQ;

ds18b20_reset();
ds18b20_write_byte(CMD_SKIP_ROM); // 跳过读序号列号的操作
ds18b20_write_byte(CMD_CONVERT_TEMP); // 启动温度转换

ds18b20_reset();
ds18b20_write_byte(CMD_SKIP_ROM); // 跳过读序号列号的操作
ds18b20_write_byte(CMD_READ_RAM); // 读取温度寄存器

temp |= ds18b20_read_byte(); // 温度低8位
temp |= ds18b20_read_byte() << 8; // 温度高8位

return (temp * 0.0625f);
}
展开
 我来答
dfgeoff
2012-05-15 · TA获得超过416个赞
知道小有建树答主
回答量:470
采纳率:50%
帮助的人:431万
展开全部
LCD1602在百度文库里就有对应的C语言例程,我就不复制过来了,你自己找一下。
更多追问追答
追问
说实话,上面的程序也不是我的。我算是个C语言白痴,即使有LCD1602C语言例程我也不知道和我的这个程序结合起来
追答
那你还是从基础开始学吧。
sunshine_45678
2012-05-16 · 超过11用户采纳过TA的回答
知道答主
回答量:49
采纳率:0%
帮助的人:30.6万
展开全部
我的1602单独显示就能用,一点毛病都没有,一放到其他函数里调用就显示不出来了,我就晕了……
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
防弹内裤2
2012-05-16
知道答主
回答量:26
采纳率:0%
帮助的人:26.6万
展开全部
LCD显示的例程贴到程序中,将你需要显示的变量传递到显示函数中就好了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式