1、在此前有关数码管显示的例子中,单片机必须要发送段码才能够让数码管显示正确的数字。
本例使用7段数码管显示译码器4511,单片机可以直接输出BCD码,4511能够自动将BCD码转换为数码管的段码。
2、在keil c51中新建工程ex66,编写如下程序代码,编译并生成ex66.hex文件
//使用BCD码译码器控制数码管显示
#include <reg51.h>
#include <reg51.h>
//位码表
unsigned char code bit_buff[] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
//需要显示的数字
unsigned char code bcd_buff[] = {2,0,1,0,10,2,10,9};
unsigned char code bit_buff[] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
//需要显示的数字
unsigned char code bcd_buff[] = {2,0,1,0,10,2,10,9};
//延时函数
void delayms(unsigned int x)
{
unsigned char i;
while(x--)
{
for(i = 0;i < 120;i++);
}
}
void delayms(unsigned int x)
{
unsigned char i;
while(x--)
{
for(i = 0;i < 120;i++);
}
}
void main(void)
{
unsigned char i;
while(1)
{
for(i = 0;i < 8;i++) //显示8位
{
P2 = bit_buff[i]; // 位码
P1 = bcd_buff[i]; //需要显示的数字,这里的数字不再是段码,而是BCD码
{
unsigned char i;
while(1)
{
for(i = 0;i < 8;i++) //显示8位
{
P2 = bit_buff[i]; // 位码
P1 = bcd_buff[i]; //需要显示的数字,这里的数字不再是段码,而是BCD码
3、在proteus中新建仿真文件ex66.dsn,电路原理图如下所示
4、将ex66.hex文件载入at89c51中,启动仿真,按动拨码开关,观察运行结果。下图是某一时刻程序运行结果