写一个51单片机驱动ds18b20并显示在共阳数码管的程序
时间: 2023-04-09 16:01:35 浏览: 220
温度传感器DS18B2051单片机驱动程序
好的,以下是驱动ds18b20并显示在共阳数码管的51单片机程序:
```
#include <reg51.h>
sbit DQ = P1^0; // ds18b20数据线连接到P1.0
sbit DIG1 = P2^0; // 数码管第一位连接到P2.0
sbit DIG2 = P2^1; // 数码管第二位连接到P2.1
sbit DIG3 = P2^2; // 数码管第三位连接到P2.2
sbit DIG4 = P2^3; // 数码管第四位连接到P2.3
sbit A = P2^4; // 数码管A段连接到P2.4
sbit B = P2^5; // 数码管B段连接到P2.5
sbit C = P2^6; // 数码管C段连接到P2.6
sbit D = P2^7; // 数码管D段连接到P2.7
void delay_us(unsigned int us) // 延时函数,单位为微秒
{
while(us--)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
void delay_ms(unsigned int ms) // 延时函数,单位为毫秒
{
while(ms--)
{
delay_us(1000);
}
}
void ds18b20_reset() // ds18b20复位函数
{
DQ = 0; // 将数据线拉低
delay_us(480); // 延时480微秒
DQ = 1; // 将数据线拉高
delay_us(60); // 延时60微秒
}
void ds18b20_write(unsigned char dat) // ds18b20写数据函数
{
unsigned char i;
for(i=0; i<8; i++)
{
DQ = 0; // 将数据线拉低
_nop_();
_nop_();
DQ = dat & 0x01; // 将数据写入数据线
delay_us(60); // 延时60微秒
DQ = 1; // 将数据线拉高
dat >>= 1;
}
}
unsigned char ds18b20_read() // ds18b20读数据函数
{
unsigned char i, dat = 0;
for(i=0; i<8; i++)
{
DQ = 0; // 将数据线拉低
_nop_();
_nop_();
dat >>= 1;
if(DQ) dat |= 0x80; // 读取数据线上的数据
delay_us(60); // 延时60微秒
DQ = 1; // 将数据线拉高
}
return dat;
}
void display(unsigned char dat) // 数码管显示函数
{
switch(dat)
{
case 0: A=0; B=0; C=0; D=0; break;
case 1: A=1; B=0; C=0; D=0; break;
case 2: A=0; B=1; C=0; D=0; break;
case 3: A=1; B=1; C=0; D=0; break;
case 4: A=0; B=0; C=1; D=0; break;
case 5: A=1; B=0; C=1; D=0; break;
case 6: A=0;
阅读全文