首 页 行业热点 新车 试驾评测 养车用车 车型库

帮忙看一下,51单片机的4位数码管动态显示

发布网友

我来回答

3个回答

热心网友

你的现象应该是那两位数码管在
16 以前显示的是 0 和 一个数,如15 时显示的是 0 和 F、14 时显示的是 0 和 e。。。
16 时显示的是 1 和 0 ,17 时显示的是 1 和 1

disbuf[0]=(((firstdat&0xf0)>>4)&0x0f);
disbuf[1]=firstdat&0x0f;
disbuf[2]=(((seconddat&0xf0)>>4)&0x0f);
disbuf[3]=seconddat&0x0f;
这里不用这么麻烦吧,直接
disbuf[0]=firstdat>>4; 右移时,低四位被移出,高四位移入0,就是你要的结果了
disbuf[1]=firstdat&0x0f;
disbuf[2]=seconddat>>4;
disbuf[3]=seconddat&0x0f;
或者
disbuf[0]=firstdat/16; 除以16 得到 16 进制的十位
disbuf[1]=firstdat%16; 对16取余得到 16进制的个位
disbuf[2]=seconddat/16;
disbuf[3]=seconddat%16;
就行了吧
我想应该不会出现没消影的,不知道你说的消影是指什么现象

热心网友

参考一下这个仿真实例的8位数码管的动态显示,试试

热心网友

#include <reg51.h>

void delay(unsigned int i);

unsigned char code Disp_Tab[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
unsigned char code dispbit[4]={0x7f,0xbf,0xcf,0xef}; // 高4位进行段选择,每次选择一个数码管
unsigned char disbuf[4];

void delayms(unsigned int ms)
{
unsigned int a,b,c;
for(a=2;a>0;a--)
for(b=46;b>0;b--)
for(c=ms;c>0;c--);
}

void Led_Disp()
{
unsigned char i;
for(i=0;i<4;i++)
{
P2 = dispbit[i];
P3 = Disp_Tab[disbuf[i]];
delayms(1);
P3 = 0xff;//关闭显示
}
}

main()
{
int firstdat=17;
int seconddat=1;
while(1)
{
disbuf[0]=((firstdat&0xf0)>>4)&0x0f;//
disbuf[1]=firstdat&0x0f; //
disbuf[2]=((seconddat&0xf0)>>4;//
disbuf[3]=seconddat&0x0f;//
Led_Disp();
/*
P2 = 0x0f;
P0 = 0x06;
delay(600);

P2 = 0xf0;
P0 = 0x07;

delay(600);

*/
}

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com