- 1、本文档被系统程序自动判定探测到侵权嫌疑,本站暂时做下架处理。
- 2、如果您确认为侵权,可联系本站左侧在线QQ客服请求删除。我们会保证在24小时内做出处理,应急电话:400-050-0827。
- 3、此文档由网友上传,因疑似侵权的原因,本站不提供该文档下载,只提供部分内容试读。如果您是出版社/作者,看到后可认领文档,您也可以联系本站进行批量认领。
查看更多
#includereg51.h
#includeintrins.h
#includemath.h
#define uint unsigned int
#define uchar unsigned char
//ADC数据输入口
#define adcn P1
//显示数组定义
uchar code table[] = TEMP IS: C;
uchar code table1[] = Vo: V P: H;
uchar flag = 0,flag1 = 0,val=0;
uint count = 0;
int num1 = 0;
// 温度值低位、高位字节
uchar tplsb,tpmsb;
uint temp;
//LCD1602位申明
sbit RS = P3^0;
sbit E = P3^1;
//ADC0804位申明
sbit ADCS = P3^3;
sbit ADRD = P3^4;
sbit ADWR = P3^6;
sbit int0 = P3^2;
//DAC0808位申明
//ds18b20位申明
sbit ds = P3^7;
/****************子函数定义*****************/
/*****延时函数*****/
void delayUs()
{
_nop_();
}
void delayMs(uint a)
{
uint i, j;
for(i = a; i 0; i--)
for(j = 110; j 0; j--);
}
/****1602部分****/
//1602写命令
void write1602_com(uint com)
{
RS = 0;
P0 = com;
//delayMs(5);
E=1;
delayUs( );
E = 0;
delayMs(1);
}
//1602写数据
void write1602_date(uchar date)
{
RS = 1;
P0=date;
//delayMs(5);
E = 1;
delayUs( );
E = 0;
delayMs(1);
}
//1602初始化
void init1602( )
{
write1602_com(0x38);
write1602_com(0x0c);
write1602_com(0x06);
write1602_com(0x01);
}
//1602写字符串
void writeString(uchar * str, uchar length)
{
uchar i;
for(i = 0; i length; i++)
{
write1602_date(str[i]);
}
}
/****ds18b20部分****/
//初始化ds18b20
void reset(void)
{
uint i;
ds = 0;
i = 100;
while(i--);
ds = 1;// 产生上升沿
i = 4;
while(i--);
}
//等待应答脉冲
void wait(void)
{
uint i;
while(ds);
while(~ds); // 检测到应答脉冲
i = 4;
while(i--);
}
bit readbit(void)
{
uint i;
bit b;
ds = 0;
i++;
ds = 1;
i++;i++;// 延时15us以上,读时隙下降沿后15us,DS18B20输出数据才有效
b = ds;
i = 10;
while(i--);
return (b);
}
//读取数据一个字节
uchar readbyte(void)
{
uchar i,j,b;
b=0;
for(i = 0;i8;i++)
{
j = readbit();
b = (j7)|(b1);
}
return(b);
}
//写数据一个字节
void writebyte(uchar b)
{
uint i;
uchar j;
bit btmp;
for(j = 0;j8;j++)
{
btmp = b0x01;
b=b1; // 取下一位(由低位向高位)
if(btmp)
{
ds = 0;
i++;i++;
ds = 1;
i=10;
while(i--);// 整个写1时隙不低于60us
}
else
{
文档评论(0)