标题:
51单片机读取ds18b20序列码的程序源码 LCD12864显示
[打印本页]
作者:
无敌猴纸
时间:
2019-1-8 08:45
标题:
51单片机读取ds18b20序列码的程序源码 LCD12864显示
读取ds18b20序列码
单片机源程序如下:
//读取序列码 用12864以16进制的形式显示64位序列码
#include "reg52.h"
#include "intrins.h"
#define focs 11059200UL
typedef unsigned char uc ;
typedef unsigned int ui ;
sbit ds = P2^2;
sbit ds1 = P2^1;
sbit we = P2^7;
sbit du = P2^6;
sbit RW = P3^6;
sbit EN = P3^4;
sbit RSB = P3^7;
sbit RS = P3^5;
#define ui unsigned int
#define uc unsigned char
uc code data2[] = {"序列码:"};
uc data4[] = {"0000000000000000"};
void delay(ui i) //毫秒级延时
{
ui x,y;
for(x = i;x > 0;x--)
for(y = 120;y > 0;y--);
}
void write_cmd12864(uc m)//12864写指令
{
RS = 0;
RW = 0;
EN = 0;
P0 = m;
delay(5);
EN = 1;
delay(5);
EN = 0;
}
void write_data12864(uc m)//121864写数据
{
RS = 1;
RW = 0;
EN = 0;
P0 = m;
delay(5);
EN = 1;
delay(5);
EN = 0;
}
void init_12864()//12864初始化
{
we = 0;
du = 0;
RSB = 1;
write_cmd12864(0x30);
delay(6);
write_cmd12864(0x0c);
delay(6);
write_cmd12864(0x01);
delay(6);
}
void delayus(uc i)// 微妙级延时
{
while(i--);
}
void init() //ds18b20初始化
{
ds = 1;
_nop_();
ds = 0;
delayus(75);
ds = 1;
delayus(4);//延时56us
delayus(20); //延时164us
ds = 1;
delayus(30);//延时250us
}
void write(uc data1) //ds18b20写数据
{
uc i;
for(i = 0;i < 8;i++)
{
delayus(0);
ds = 0;
delayus(0);
ds = data1&0x01;
data1 = data1>>1;
delayus(10);
ds = 1;
_nop_();
}
ds = 1;
_nop_();
}
uc read_byte() //ds18b20读数据
{
uc i,j = 0,data2,data3;
for(i = 0;i < 8;i++)
{
ds = 0;
_nop_();
ds = 1;
_nop_();
data3 = ds;
delayus(10);
ds = 1;
_nop_();
data2 = (data3<<7)|(data2>>1);
}
return data2;
}
void ds18b20_main(ui sum[])
{
ui i;
init();
write(0x33);
for(i = 0; i < 8;i++)
{
sum[i] =read_byte();
}
}
void main()
{
ui i,j,sum1[8];
delay(100);
// while(1)
// {
ds18b20_main(sum1);
for(i = 0;i < 16;i = i+2) // 用16进制显示序列码
{
if(sum1[j]/16>9)
data4[i] = 48+7+sum1[j]/16;
else
data4[i] = 48+sum1[j]/16;
if(sum1[j]%16>9)
data4[i+1] = 48+7+sum1[j]%16;
else
data4[i+1] = 48+sum1[j]%16;
j++;
}
init_12864();
delay(5);
write_cmd12864(0x80);
delay(5);
i = 0;
while(data2[i]!='\0')
{
write_data12864(data2[i]);
i++;
}
i = 0;
write_cmd12864(0x90);
delay(5);
while(data4[i]!='\0')
{
write_data12864(data4[i]);
i++;
}
while(1);
// }
}
复制代码
所有资料51hei提供下载:
ds18b20读取序列码.rar
(28.9 KB, 下载次数: 31)
2019-1-8 08:44 上传
点击文件名下载附件
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1