一、案例要求
4位共阳极数码管同时显示数字1234,也即是第一位数码管显示1,第二位数码管显示2,以此类推。
二、案例分析
本案例需要用到的主要器件是7段4位共阳极数码管,可采用动态显示方式扫描数码管,利用人眼的视觉暂留效应,实现4位不同数字的同时显示。用P0口控制数字字形(段选),用P2口选择数码管(位选)。
三、案例代码
代码一:
#include <reg51.h> // 引入头文件
unsigned char num_code[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};// 数码管显示0~9的编码表(共阳极数码管字形码)
void delay(unsigned int k)
{
while(k--);
}
void main() {
unsigned int i = 0; // 定义计数器变量i
while (1) { // 进入死循环
P0 = 0xff; // 将P0口全部置高电平
P2 = 0x01; // 选择第一位数码管
P0 = num_code[1]; // 在第一位数码管上显示数字1
delay(500); // 延时
P0 = 0xff; // 将P0口全部置高电平
P2 = 0x02; // 选择第二位数码管
P0 = num_code[2]; // 在第二位数码管上显示数字2
delay(500); // 延时
P0 = 0xff; // 将P0口全部置高电平
P2 = 0x04; // 选择第三位数码管
P0 = num_code[3]; // 在第三位数码管上显示数字3
delay(500); // 延时
P0 = 0xff; // 将P0口全部置高电平
P2 = 0x08; // 选择第四位数码管
P0 = num_code[4]; // 在第四位数码管上显示数字4
delay(500); // 延时
}
}
代码二:
#include <reg51.h> // 引入头文件
unsigned char num_code[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};// 数码管显示0~9的编码表(共阳极数码管字形码)
void delay(unsigned int k)
{
while(k--);
}
void main()
{
unsigned int i=0,j;
while(1)
{
for(j=0;j<4;j++)
{
P0=num_code[j+1]; //依次显示数字1234
P2=0x01<<j; //依次选择第1、2、3、4个数码管进行显示
delay(500); //短暂延时,满足人眼视觉暂留效应,实现四位数码管同时显示的效果
P0=0xff; //每次扫描后再关一次数码管,消除拖影
}
}
}