51单片机数码管显示小数代码
时间: 2023-05-30 11:05:44 浏览: 1118
这里提供一份51单片机数码管显示小数的代码,仅供参考:
```
#include <reg51.h>
// 数码管位选控制器
sbit LED_COM1 = P2^4;
sbit LED_COM2 = P2^5;
sbit LED_COM3 = P2^6;
sbit LED_COM4 = P2^7;
// 数码管段选控制器
sbit LED_A = P0^0;
sbit LED_B = P0^1;
sbit LED_C = P0^2;
sbit LED_D = P0^3;
sbit LED_E = P0^4;
sbit LED_F = P0^5;
sbit LED_G = P0^6;
sbit LED_DP = P0^7;
// 数码管显示的数值和小数点位置
unsigned char num = 123; // 设置显示的数值
unsigned char point = 2; // 设置小数点位置,例如显示1.23,则point=2
// 数码管显示函数
void LED_Display(unsigned char num, unsigned char point)
{
unsigned char temp = 0; // 临时变量,用于存储需要显示的数码管数值
// 将需要显示的数值转换为数码管对应的值
switch(num)
{
case 0: temp = 0xFC; break;
case 1: temp = 0x60; break;
case 2: temp = 0xDA; break;
case 3: temp = 0xF2; break;
case 4: temp = 0x66; break;
case 5: temp = 0xB6; break;
case 6: temp = 0xBE; break;
case 7: temp = 0xE0; break;
case 8: temp = 0xFE; break;
case 9: temp = 0xF6; break;
default: temp = 0x00; break;
}
// 判断小数点位置,为0则不显示,为1则显示第一位小数点,为2则显示第二位小数点
if(point == 1)
{
temp &= ~(1 << 7); // 将第一位小数点位置0,即显示小数点
}
else if(point == 2)
{
temp &= ~(1 << 3); // 将第二位小数点位置0,即显示小数点
}
// 数码管位选控制
LED_COM1 = 1;
LED_COM2 = 1;
LED_COM3 = 1;
LED_COM4 = 1;
// 数码管段选控制
P0 = temp; // 先将需要显示的数值输出到P0口
LED_DP = 1; // 先将小数点位置1,防止误显示
switch(point) // 根据小数点位置控制小数点显示
{
case 1: LED_DP = 0; LED_COM1 = 0; break;
case 2: LED_DP = 0; LED_COM2 = 0; break;
case 3: LED_DP = 0; LED_COM3 = 0; break;
case 4: LED_DP = 0; LED_COM4 = 0; break;
default: LED_DP = 1; break;
}
}
// 主函数
void main()
{
while(1)
{
// 显示数值和小数点位置
LED_Display(num, point);
}
}
```
这是一个基础的数码管显示程序,根据需要可以进行修改。其中,LED_Display函数用于控制数码管的位选和段选,将需要显示的数值和小数点位置转换为对应的数码管值,并输出到P0口控制数码管段选。程序中使用了switch语句来实现数值的转换和小数点位置的控制,也可以使用其他方法来实现。
阅读全文