📄 key_disp.c
字号:
tmp1(); // 读取温度
Temp = ((Temph&0x0F)<<4)|((Templ&0xF0)>>4);
UartSent(Temp/10); // 把接收到的十位上的数据发送到串口
UartSent(Temp%10); // 把接收到的个位上的数据发送到串口
UartSent(Offset); // 把接收到的数据发送到串口
write7279(DECODE1+1,Temp/10);// 在第2位显示键码高8位
write7279(DECODE1,Temp%10); // 在第1位显示键码低8位
}
else
{
write7279(DECODE1+1,0x0F); // 在第2位显示键码高8位
write7279(DECODE1,0x0F); // 在第1位显示键码低8位
}
// 第二个通道输入
if(ReadRom2() == 0x28) // 检测DS18B20存在
{
UartSent(0x29); // 发送DS18B20家族码
tmp2change(); // 开始温度转换
delay1ms(250); // 读取延时
tmp2(); // 读取温度
Temp = ((Temph&0x0F)<<4)|((Templ&0xF0)>>4);
UartSent(Temp/10); // 把接收到的十位上的数据发送到串口
UartSent(Temp%10); // 把接收到的个位上的数据发送到串口
UartSent(Offset); // 把接收到的数据发送到串口
write7279(DECODE1+1,Temp/10); // 在第2位显示键码高8位
write7279(DECODE1,Temp%10); // 在第1位显示键码低8位
}
else // 检测DS18B20不存在,显示0xFF
{
write7279(DECODE1+1,0x0F); // 在第2位显示键码高8位
write7279(DECODE1,0x0F); // 在第1位显示键码低8位
}
if (!key) break;
}
break;
case 13:
send_byte(CMD_RESET); //清除显示
break;
default :
//若出错,则显示"FF"
write7279(DECODE1+1,0x0F); // 在第2位显示键码高8位
write7279(DECODE1,0x0F); // 在第1位显示键码低8位
break;
}
}
void ini_uart(void)
{
SCON = 0x50; //串口方式1,允许接受
TMOD = 0x20; //定时器1,定时方式2
TH1 = 0xfd; //11.0592Hz,Baud Rate 9600
TL1 = 0xfd;
TI = 0;
RI = 0;
TR1 = 1; //启动定时器
}
//查询方式,向串口发送一个字符
void UartSent(uchar byte)
{
SBUF=byte;
while(TI==0);
TI=0;
}
void tm1reset (void) // 发送复位和初始化
{
unsigned int i;
DQ1 = 0;
i = 103;
while (i>0) i--; // 延时
DQ1 = 1;
i = 4;
while (i>0) i--;
}
void tm2reset (void) // 发送复位和初始化
{
unsigned int i;
DQ2 = 0;
i = 103;
while (i>0) i--; // 延时
DQ2 = 1;
i = 4;
while (i>0) i--;
}
bit tmp1read (void) // 读取数据的一位
{
unsigned int i;
bit dat;
DQ1 = 0; i++;
DQ1 = 1; i++; i++; //延时
dat = DQ1;
i = 8; while (i>0) i--; // 延时
return (dat);
}
bit tmp2read (void) // 读取数据的一位
{
unsigned int i;
bit dat;
DQ2 = 0; i++;
DQ2 = 1; i++; i++; //延时
dat = DQ2;
i = 8; while (i>0) i--; // 延时
return (dat);
}
unsigned char tmp1read2 (void) //读一个字节
{
unsigned char i,j,dat;
dat = 0;
for (i=1;i<=8;i++)
{
j = tmp1read ();
dat = (j << 7) | (dat >> 1);
}
return (dat);
}
unsigned char tmp2read2 (void) //读一个字节
{
unsigned char i,j,dat;
dat = 0;
for (i=1;i<=8;i++)
{
j = tmp2read ();
dat = (j << 7) | (dat >> 1);
}
return (dat);
}
void tmp1write (unsigned char dat) //写一个字节
{
unsigned int i;
unsigned char j;
bit testb;
for (j=1;j<=8;j++)
{
testb = dat & 0x01;
dat = dat >> 1;
if (testb)
{
DQ1 = 0; // 写0
i++; i++;
DQ1 = 1;
i = 8; while (i>0) i--;
}
else
{
DQ1 = 0; // 写0
i = 8; while (i>0) i--;
DQ1 = 1;
i++; i++;
}
}
}
void tmp2write (unsigned char dat) //写一个字节
{
unsigned int i;
unsigned char j;
bit testb;
for (j=1;j<=8;j++)
{
testb = dat & 0x01;
dat = dat >> 1;
if (testb)
{
DQ2 = 0; // 写0
i++; i++;
DQ2 = 1;
i = 8; while (i>0) i--;
}
else
{
DQ2 = 0; // 写0
i = 8; while (i>0) i--;
DQ2 = 1;
i++; i++;
}
}
}
void tmp1change(void) // ds1820 开始转换
{
tm1reset (); // 复位
delay1ms (1); // 延时
tmp1write (0xcc); // 跳过序列号命令
tmp1write (0x44); // 发转换命令 44H,
}
void tmp2change(void) // ds1820 开始转换
{
tm2reset (); // 复位
delay1ms (1); // 延时
tmp2write (0xcc); // 跳过序列号命令
tmp2write (0x44); // 发转换命令 44H,
}
void tmp1 (void) // 读取温度
{
unsigned int temp;
unsigned char Tl,Th;
tm1reset (); // 复位
delay1ms (1); // 延时
tmp1write (0xcc); // 跳过序列号命令
tmp1write (0xbe); // 发送读取命令
Tl = tmp1read2 (); // 读取低位温度
Th = tmp1read2 (); // 读取高位温度
Temph = Th;
if(flag)
{
Templ = ~Tl+1; // 如果为负温则去除其补码
Temph = ~Th;
}
else
{
Templ = Tl;
Temph = Th;
}
temp = Temph;
Offset = (unsigned int)((Templ&0x0F)*0.625);
}
void tmp2 (void) // 读取温度
{
unsigned char Tl,Th;
tm2reset (); // 复位
delay1ms (1); // 延时
tmp2write (0xcc); // 跳过序列号命令
tmp2write (0xbe); // 发送读取命令
Tl = tmp2read2 (); // 读取低位温度
Th = tmp2read2 (); // 读取高位温度
Temph = Th;
if(flag)
{
Templ = ~Tl+1; // 如果为负温则去除其补码
Temph = ~Th;
}
else
{
Templ = Tl;
Temph = Th;
}
Offset = (unsigned int)((Templ&0x0F)*0.625);
}
unsigned char ReadRom1() // 读取器件序列号子程序
{
tm1reset (); // 复位
delay1ms (1); // 延时
tmp1write(0x33); // 发送读序列号子程序
Family_Code = tmp1read2 (); // 读取DS18B20家族码
return Family_Code;
}
unsigned char ReadRom2() // 读取器件序列号子程序
{
tm2reset (); // 复位
delay1ms (1); // 延时
tmp2write(0x33); // 发送读序列号子程序
Family_Code = tmp2read2 (); // 读取DS18B20家族码
return Family_Code;
}
/*===========================================================================
End of files
===========================================================================*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -