使用51单片机共阴数码管和热电偶显示代码
时间: 2024-05-07 15:18:30 浏览: 100
以下是使用51单片机连接共阴数码管和热电偶进行温度显示的代码:
```c
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit DIO=P2^0; //74HC595串行数据输入端
sbit RCLK=P2^1; //74HC595锁存器时钟线
sbit SCLK=P2^2; //74HC595串行数据时钟线
uchar code num_tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共阴数码管显示0-9的编码表
//将数码管显示数值函数
void display(uint num)
{
uchar i;
for(i=0;i<8;i++)
{
RCLK=0;
SCLK=0;
DIO=num&(0x80>>i);
SCLK=1;
}
RCLK=1;
}
//从热电偶读取温度函数
uint get_temperature()
{
uchar low,high;
uint temp;
//初始化DS18B20
DQ=1; //总线空闲状态
delay_us(1);
DQ=0; //发送复位信号
delay_us(500);
DQ=1;
delay_us(60);
if(DQ==0) //判断DS18B20是否存在
{
delay_us(400);
DQ=1; //复位完成
}
delay_us(1);
DQ=0; //发送读取温度命令
delay_us(60);
DQ=1;
delay_us(10);
if(DQ==0) //等待DS18B20准备数据
{
delay_us(60);
low=ReadOneChar(); //读取温度的低8位
high=ReadOneChar(); //读取温度的高8位
temp=high;
temp=(temp<<8)|low;
}
return temp; //返回温度值
}
//主函数
void main()
{
uint temperature;
while(1)
{
temperature=get_temperature(); //读取温度值
temperature=(temperature>>4)*625+(temperature&0x0f)*625/16; //将温度值转换为实际温度
display(num_tab[temperature/100]); //在数码管上显示百位数码
delay_ms(5);
display(num_tab[temperature%100/10]); //在数码管上显示十位数码
delay_ms(5);
display(num_tab[temperature%10]); //在数码管上显示个位数码
delay_ms(5);
}
}
```
需要注意的是,上述代码中的 `ReadOneChar()` 函数需要根据具体的硬件和驱动方式进行编写。此外,还需要将温度值从 DS18B20 读取出来后,进行实际温度的转换,具体的转换方式需要根据 DS18B20 的数据手册进行计算。
阅读全文