一、数码管显示作用
单片机控制数码管显示,是嵌入式系统中最经典、最基础的人机交互方式,其核心作用是将单片机内部晦涩的二进制数据转化为人类直观可读的数字与字符。
具体而言,它的作用主要体现在三个方面:一是数据可视化,如实时显示温度、电压、转速等测量值;二是状态指示,通过显示"Err"、"H"或"C"等代码,直观反映设备的故障或运行模式;三是参数设置与计时,配合按键完成目标数值的修改,或作为时钟、倒计时的显示终端。
二、静态的数码管显示
静态显示20260412
#include <REGX52.H>
unsigned char code NixieTable[] = {
0x3F, 0x06, 0x5B, 0x4F, 0x66,
0x6D, 0x7D, 0x07, 0x7F, 0x6F
};
void Delay(unsigned char xms) //@11.0592MHz
{
unsigned char data i, j;
_nop_();
_nop_();
while(xms--){
i = 2;
j = 15;
do
{
while (--j);
} while (--i);
}
}
void Nixie(unsigned char Location, unsigned char Number) {
// 位选
switch(Location) {
case 1: P2_4=1; P2_3=1; P2_2=1; break;
case 2: P2_4=1; P2_3=1; P2_2=0; break;
case 3: P2_4=1; P2_3=0; P2_2=1; break;
case 4: P2_4=1; P2_3=0; P2_2=0; break;
case 5: P2_4=0; P2_3=1; P2_2=1; break;
case 6: P2_4=0; P2_3=1; P2_2=0; break;
case 7: P2_4=0; P2_3=0; P2_2=1; break;
case 8: P2_4=0; P2_3=0; P2_2=0; break;
}
// 段选
P0 = NixieTable[Number];
Delay(1);
// 消隐(防止鬼影)
P0 = 0x00;
}
void main() {
while(1) {
Nixie(1, 2);
Nixie(2, 0);
Nixie(3, 2);
Nixie(4, 6);
Nixie(5, 0);
Nixie(6, 4);
Nixie(7, 1);
Nixie(8, 2);
}
}
三、动态展示
动态轮询显示20260412
#include <REGX52.H>
// 共阴极数码管段码表 (0~9)
unsigned char code NixieTable[] = {
0x3F, 0x06, 0x5B, 0x4F, 0x66,
0x6D, 0x7D, 0x07, 0x7F, 0x6F
};
// 【保留你提供的函数】
void Nixie(unsigned char Location, unsigned char Number) {
switch(Location)
{
case 1: P2_4=1; P2_3=1; P2_2=1; break;
case 2: P2_4=1; P2_3=1; P2_2=0; break;
case 3: P2_4=1; P2_3=0; P2_2=1; break;
case 4: P2_4=1; P2_3=0; P2_2=0; break;
case 5: P2_4=0; P2_3=1; P2_2=1; break;
case 6: P2_4=0; P2_3=1; P2_2=0; break;
case 7: P2_4=0; P2_3=0; P2_2=1; break;
case 8: P2_4=0; P2_3=0; P2_2=0; break;
}
P0=NixieTable[Number];
}
// 使用你之前提到的延时函数 (假设它是一个有效的延时函数)
void Delay(unsigned char xms) //@11.0592MHz
{
unsigned char data i, j;
_nop_();
_nop_();
while(xms--){
i = 2;
j = 15;
do
{
while (--j);
} while (--i);
}
}
void main() {
unsigned char i;
unsigned char numbers[] = {2, 0, 2, 6, 0, 4, 1, 2}; // 要显示的数字数组
while(1) {
// 循环显示,从第1位到第8位
for(i = 0; i < 8; i++) {
// 清空数码管 (显示全灭)
P2 = 0xFF;
P0 = 0x00;
// 显示当前位
Nixie(i + 1, numbers[i]);
// 延时,让数字稳定显示一会儿
Delay(2500); // 延时2500ms,你可以调整这个值
}
}
}