c51单片机实现数码管显示温度
时间: 2023-07-03 08:19:26 浏览: 128
数码管的动态显示主函数-C51单片机03(数码管)课件
要实现c51单片机实现数码管显示温度,需要先采集温度信号,然后将其转换为数字信号,并最终将数字信号显示在数码管上。
以下是一个简单的c51单片机实现数码管显示温度的示例代码:
```c
#include <reg52.h>
sbit D1 = P0^0; // 数码管位选端口定义
sbit D2 = P0^1;
sbit D3 = P0^2;
sbit D4 = P0^3;
sbit A = P2^0; // 数码管段选端口定义
sbit B = P2^1;
sbit C = P2^2;
sbit D = P2^3;
sbit E = P2^4;
sbit F = P2^5;
sbit G = P2^6;
void delay(unsigned int x) // 延时函数
{
unsigned int i, j;
for(i = x; i > 0; i--)
for(j = 110; j > 0; j--);
}
void display(unsigned char num) // 数码管显示函数
{
switch(num) {
case 0: A = B = C = D = E = F = 1; G = 0; break;
case 1: A = B = 1; C = D = E = F = G = 0; break;
case 2: A = B = G = E = D = 1; C = F = 0; break;
case 3: A = B = C = D = G = 1; E = F = 0; break;
case 4: B = C = F = G = 1; A = D = E = 0; break;
case 5: A = C = D = F = G = 1; B = E = 0; break;
case 6: A = C = D = E = F = G = 1; B = 0; break;
case 7: A = B = C = 1; D = E = F = G = 0; break;
case 8: A = B = C = D = E = F = G = 1; break;
case 9: A = B = C = D = F = G = 1; E = 0; break;
default: A = B = C = D = E = F = G = 0; break;
}
}
void main()
{
unsigned char tempH, tempL, temp; // 温度变量
while(1) {
// 温度采集过程
// ...
// 温度转换成数字信号
temp = tempH * 10 + tempL;
// 数码管显示
D1 = D2 = D3 = D4 = 0; // 开始位选
display(temp / 1000); // 选择对应的数字
delay(5); // 延时
D1 = 1; D2 = D3 = D4 = 0; // 位选变化
display(temp % 1000 / 100);
delay(5);
D2 = 1; D1 = D3 = D4 = 0;
display(temp % 100 / 10);
delay(5);
D3 = 1; D1 = D2 = D4 = 0;
display(temp % 10);
delay(5);
D4 = 1; D1 = D2 = D3 = 0;
}
}
```
这段代码中,我们首先定义了数码管的位选端口和段选端口,然后实现了一个简单的延时函数和一个数码管显示函数,最后在`main()`函数中,实现了温度采集、数字转换和数码管显示的功能。具体来说,我们先将温度信号转换成数字信号`temp`,然后将`temp`的千位、百位、十位和个位数分别显示在四个数码管上,实现了温度的显示。
阅读全文