单片机如何同时控制四位数码管显示不同数字。

如题所述

第1个回答  2014-05-19
你的图不是很清楚,根据你图上的功能来看,器件应该是:
单片机(51系列) -> 8路缓冲器(74HC245) -> 数码管(四位)
1、由于单片机IO口的驱动能力有限,在单片机和数码管中间增加了缓冲器
这样可以有效的保护单片机,提高了驱动能力。
2、接法:四位数码管有四个选择端,保证统一时间只A-G字段,只对一个数码管有效。
3、点亮数码管,通过选取不同的选择端,选择好某一位数码管,通过A-G字段点亮。这个10K的上拉电阻,就针对单片机的,
因为单片机的P0口,内部是不带上拉电阻的,
10K,既能保证单片机有可靠的高电平输出,又能保证有一定的驱动本回答被网友采纳
第2个回答  2014-05-19
动态扫描,这是最基本的思路。追问

。能写下简单的程序嘛。就像第一个是1第二个显示2

追答

也不知道你的数码管是共阴还是共阳,就参考一下共阳的吧。
#include //
void delay(void) //延时函数
{
unsigned char i;
for(i=0;i<200;i++)
;
}

void main(void)
{
while(1) //无限循环
{
P1=0xfe; //P1.0引脚输出低电平,让第一个数码管点亮。也就是位选端。
P0=0xf9; //数字1的段码
delay();
P1=0xfd ; //P1.1引脚输出低电平,让第二个数码管点亮。
P0=0xa4; //数字2的段码
delay();

}
}
如果数码管闪烁明显,就把延时函数取更小些。比如 for(i=0;i<50;i++)

追问

我这delay不好使是怎么回事。

追答

你确定是delay的问题,现在显示的情况如何,没有描述清楚。

追问

。现在我也不知道是一起亮了。还是亮的太快过去了

。现在我也不知道是一起亮了。还是亮的太快过去了

应该是一起亮很短的时间

追答

你的意思是,亮一下就都不亮了是吧。

追问

现在好了。但是该怎么自动改变数字呢。并且那个还不灭

追答

主程序一直在循环执行,当然不会灭啊,想改变数字,就把P0的数据改成0到9的段码就行了.也可以写一个数组,那样会比较方便.

第3个回答  2014-05-19
模拟串口方式0:
#include"reg52.h"
#define uint unsigned int
#define uchar unsigned char
sbit P3_2=P3^2; //模拟接受
sbit P3_3=P3^3; //模拟发送
uchar code smg[11]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09,0xff};//数码管编码0~ 9
void display(uchar z);
main()
{
display(5);
display(0);
display(4);
while(1);
}

/************模拟串口显示**************/
void display(uchar z)
{
uchar i;
uchar temp;
temp = smg[z];
for(i=0;i<8;i++)
{
P3_3= 0;
if(temp & 0x01) P3_2=1;
else P3_2 = 0;
P3_3= 1;
temp = temp>>1 ;
}
}

串口}方式0:
void display()
{
SM0=0;
SM1=0; //方式0
for(i=0;i<3;i++)
{
SBUF=smg[snum[2-i]];
while(!TI) ;
TI=0;
delay(1000);
}
}

还有并行口方式 占用I/O不推荐 不过程序很简单

C51单片机如何让四位数码管分别显示四位不同的数字?
k4 = 0;\/\/打开第4位位选 P2 = table( temp%10 );\/\/假设P2口控制数码管 temp = temp \/ 10;\/\/temp = 123 delay( 5 );\/\/显示第3位 k1 = k2 = k3 = k4 = 1;\/\/关闭所有未选 k3 = 0;\/\/打开第3位位选 P2 = table( temp%10 );\/\/,假设P2口控制数码管 temp = temp...

单片机如何同时控制四位数码管显示不同数字。
1、由于单片机IO口的驱动能力有限,在单片机和数码管中间增加了缓冲器 这样可以有效的保护单片机,提高了驱动能力。2、接法:四位数码管有四个选择端,保证统一时间只A-G字段,只对一个数码管有效。3、点亮数码管,通过选取不同的选择端,选择好某一位数码管,通过A-G字段点亮。这个10K的上拉电阻,...

用51单片机控制4位一体数码管实现1234轮流显示的程序代码是什么,求!pro...
shiftOut(0x01); \/\/ 第1位 break;case 1:shiftOut(0x02); \/\/ 第2位 break;case 2:shiftOut(0x04); \/\/ 第3位 break;case 3:shiftOut(0x08); \/\/ 第4位 break;default:break;} \/\/ 数据锁存 RCLK = 1;delay(1);RCLK = 0;\/\/ 数码管刷新延时 delay(5);\/\/ 切换显示的位 ...

AT89C51单片机怎么用汇编语言让4个数码管同时显示1234?
1、首先我们先打开keil。2、接着,我们要定义好库函数,void main(){while(1)\/\/不断循环显示{dispaly();}}void dispaly(){P0=smg[1];\/\/选择显示数字几,P1=0x7f;\/\/控制是否点亮数码管。3、接着,我们加上一条循环语句。delay(5);\/\/显示5毫秒P0=0XFF;\/\/消影P0=smg[2];P1=0xbf;delay...

51单片机 四位数码管如何同时显示4位不同的数字?
有两种方式:一可以用类似595转转并芯片用静态显示法驱动数码管,二可以用动态扫描显示法显示数码管。

如何让单片机不同数码管同时显示不同数
然后关闭第三个数码管;………依次类推,到最后一个后返回到第一个重新显示。当显示的速度足够快的时候,你就看到所有的数码管都亮起来,显示了不同的数字。这个叫扫描显示。当你从头扫到尾的频率在25Hz之上的时候,看到的就都亮了,当然如果之后25Hz会感觉到抖动。至于能跑到多少Hz要看你单片机的...

用单片机控制4位LED数码管显示,先从左至右慢速动态扫描显示数字13572468...
主要程序如下:uchar table[8]={1,3,5,7,2,4,6,8};\/\/要显示的数字 uchar qiduan_tab[10]={...};\/\/七段码 while(1){ for(i=0;i<5;i++)\/\/先显示1357,第二次显示3572 第三次显示5724 { for(j=0;j<20;j++)\/\/刷新20次约0.4秒,推进一位 { wei1=0;P0= table[qiduan...

如何利用单片机让4位数码管显示
3.4.1 步骤一:PROTEUS电路设计,单片机控制四位共阴极数码管动态扫描显示的原理图如图5-17所示。图5-17 四位共阴极数码管动态扫描显示的原理图 1、选取元器件 ①单片机:AT89C52 ②带公共端的排阻:RESPACK-8 ③四位共阴极数码管:7SEG-MPX4-CC 2、放置元器件、放置电源和地、连线、元器件属性...

如何利用单片机让4位数码管显示?
程序如下(用的是STC89C52芯片):include<reg52.h>\/\/52系列单片机头文件 define uchar unsigned char define uint unsigned int uint x,y;uchar code table[]={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};\/\/共阴极数码管编码 void display...

51单片机4位数码管显示数字
1、静态显示:对于静态显示,可以直接利用IO口将对应的数字编码发送到数码管的段选引脚上。将P0口设置为0x3f,可以显示数字0。2、动态显示:对于动态显示,有两种常见的方法。一种是提高刷新频率,使得人眼无法分辨,产生显示的效果。另一种是利用锁存器件,先显示一个数字,锁定到一个数码管上,再显示...

相似回答