X
首页
技术
模拟电子
单片机
半导体
电源管理
嵌入式
传感器
最能打国产芯
应用
汽车电子
工业控制
家用电子
手机便携
安防电子
医疗电子
网络通信
测试测量
物联网
最能打国产芯
大学堂
首页
直播
专题
TI 培训
论坛
汽车电子
国产芯片
电机驱动控制
电源技术
单片机
模拟电子
PCB设计
电子竞赛
DIY/开源
嵌入式系统
医疗电子
颁奖专区
【厂商专区】
【电子技术】
【创意与实践】
【行业应用】
【休息一下】
最能打国产芯
活动中心
直播
发现活动
颁奖区
电子头条
参考设计
下载中心
分类资源
文集
排行榜
电路图
Datasheet
最能打国产芯
嵌入式系统
单片机实现DS18B20程序在12232液晶上的显示
daicheng
2008-11-30 16:11
楼主
18b20.rar
(1.29 KB)
(下载次数: 86, 2008-11-30 16:11 上传)
#include
#include
#include
#include
#include
#define LCD P1
sbit DQ =P2^0; /* 定义端口 */
typedef unsigned char byte;
typedef unsigned int word;
/* input pin */
sbit EN=P2^5;
sbit RW=P2^6;
sbit RS=P2^7;
static unsigned int coun=0; /*定时器计数器*/
unsigned char data i;
static unsigned char data timer[]={'0','0',0xa1,0xe6};
//延时
void delay(word useconds)
{
for(;useconds>0;useconds--);
}
//复位
byte ow_reset(void)
{
byte presence;
DQ = 0; // DQ 低电平
delay(29); // 480us
DQ = 1; // DQ 高电平
delay(3); // 等待
presence = DQ; // presence 信号
delay(25);
return(presence);
} // 0允许, 1 = 禁止t
//从1-wire 总线上读取一个字节
byte read_byte(void)
{
byte i;
byte value = 0;
for (i=8;i>0;i--)
{
value>>=1;
DQ = 0;
DQ = 1;
delay(1);
if(DQ)value|=0x80;
delay(6);
}
return(value);
}
//向 1-WIRE 总线上写一个字节
void write_byte(char val)
{
byte i;
for (i=8; i>0; i--) // 一次写一字节
{
DQ = 0;
DQ = val&0x01;
delay(5);
DQ = 1;
val=val/2;
}
delay(5);
}
//读取温度
char Read_Temperature(void)
{
union{
byte c[2];
int x;
}temp;
ow_reset();
write_byte(0xCC); // 跳过 ROM 0xcc
write_byte(0x44); // 开始 数据转换 将温度转换为数据(芯片内部进行)
ow_reset();
write_byte(0xCC); // 跳过 ROM 0xcc
write_byte(0xBE); // 读温度指令0xbe
temp.c[1]=read_byte();
temp.c[0]=read_byte();
return temp.x/2;
}
void delay(void) /*延时程序*/
{
int i=0;
while(i<200)i++; /*这个时间很关键100时不行*/
}
void sendin(unsigned char i_data) /* 指令发送子程序,i_data为指令代码(8位) */
{
P2=0x20;
LCD=i_data;
EN=0;
delay();
}
void sendda(unsigned char i_data) /* 数据发送子程序 ,i_data为数据内容(8位)*/
{
P2=0xa0;
LCD=i_data;
EN=0;
delay();
}
void initialize(void) /*12232液晶初始化*/
{
unsigned char a;
a=0x38; /* 8比特;2行;5*7字形 */
sendin(a);
a=0x08; /* 关闭显示屏 */
sendin(a);
a=0x01; /* 清屏 */
sendin(a);
a=0x0c; /*开启显示屏;游标;闪烁 */
sendin(a);
a=0x06; /*设定AC+1 */
sendin(a);
}
void wr_string(unsigned char c,unsigned char *d) /*写字符子程序;参数为:c:字符数量*/
{ /*d:字符地址*/
unsigned char i,j; /*<255*/
for(i=0;i
{
j=*d;
sendda(j);
d++;
}
}
void zf(void) /*字符显示子程序*//*作用:写入zifu[]中的字符串*/
{
/*对应ASCII码表,当大于表中数字时,进入汉字*/
/*显示状态 汉字编码可在汉字表中查到 */
unsigned char code zifu[]={0xcf,0xd6,0xd4,0xda,0xce,0xc2,0xb6,0xc8,0x3a}; /*xian zai wen du:*/
unsigned char a0,*p,counter;
a0=0x80; /*写入显存*/
sendin(a0);
p=zifu; /*写入字符的地址*******************************/
counter=sizeof(zifu); /*写入字符的数量此处为自动计算得到的**********************/
wr_string(counter,p);
}
void xianshi(void) /*显示timer*/
{
unsigned char c0=4,a3,*p=timer; /*c0:写入字符数量;p写入字符的地址*/
a3=0x90; /*写入显存,设为第二行显示*/
sendin(a3);
wr_string(c0,p);
}
main()
{
char i;
initialize(); /*液晶初始化*/
zf(); /*写字符, 现在温度: 第一行 */
while(1)
{
i=Read_Temperature();
timer[0]=0x30+i/10; /*取十位,个位*/
timer[1]=0x30+i%10;
xianshi(); /*显示温度,第二行 */
}
}
[
本帖最后由 daicheng 于 2008-11-30 16:14 编辑
]
处处留心皆学问!
点赞
回复评论 (7)
沙发
flyhouse
怎么老是不能下载?
点赞
2008-12-11 17:00
板凳
daicheng
Re: [下载] 单片机实现DS18B20程序在12232液晶上的显示
你的芯币不够了
我给你加上了点,以后多多发帖啊,就会有的!
处处留心皆学问!
点赞
2008-12-11 17:05
4楼
siasca
我的积分也不够啊。。。
点赞
2009-10-6 02:52
5楼
海风2007400
路过看看 学习
点赞
2009-10-27 23:26
6楼
shgdd520com
xuexi le
点赞
2009-12-8 14:17
7楼
wang_l0650
谢谢,看看
点赞
2010-4-8 06:47
8楼
clearhlj
点赞
2012-3-31 23:24
最新活动
报名直播赢【双肩包、京东卡、水杯】| 高可靠性IGBT的新选择——安世半导体650V IGBT
30套RV1106 Linux开发板(带摄像头),邀您动手挑战边缘AI~
安世半导体理想二极管与负载开关,保障物联网应用的稳健高效运行
免费申请 | 上百份MPS MIE模块,免费试用还有礼!
PI 电源小课堂|无 DC-DC 变换实现多路高精度输出反激电源
2024 瑞萨电子MCU/MPU工业技术研讨会——深圳、上海站, 火热报名中
随便看看
Max32630(二)——串口+RTC+MX25
关于6N137光耦输出的问题
PIC单片机与MCS-51系列单片机的区别
BQ24095焊接
中断的处理与解析
wince嵌入式开发如何入门
急,如何用开关稳压器做开关电源
蓝牙空中捕获
各位前辈,zigbee串口给PC的15字节怎么修改可以在TI的sensor monitor显示两个信号
有没有满足以下要求的Zigbee模块?
【求助】关于DS1302工作不正常
pic 单片机教程
PC104花屏
一位牛人对模拟电路的理解
请教下googleman,CE6问题
ZIGBEE report机制分析
诸位高手. 问个问题.uclinux-elf-gcc 编译的程序如何减少
ADS7841 应用电路设计指南--个人理解
2020-4-14-验证版主建议结果
请教C语言程序输入时大括号的输入方法.
电子工程世界版权所有
京B2-20211791
京ICP备10001474号-1
京公网安备 11010802033920号
回复
写回复
收藏
回复