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

 我来答
匿名用户
2014-05-19
展开全部
你的图不是很清楚,根据你图上的功能来看,器件应该是:
单片机(51系列) -> 8路缓冲器(74HC245) -> 数码管(四位)
1、由于单片机IO口的驱动能力有限,在单片机和数码管中间增加了缓冲器
这样可以有效的保护单片机,提高了驱动能力。
2、接法:四位数码管有四个选择端,保证统一时间只A-G字段,只对一个数码管有效。
3、点亮数码管,通过选取不同的选择端,选择好某一位数码管,通过A-G字段点亮。这个10K的上拉电阻,就针对单片机的,
因为单片机的P0口,内部是不带上拉电阻的,
10K,既能保证单片机有可靠的高电平输出,又能保证有一定的驱动
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wjfhsym
2014-05-19 · TA获得超过946个赞
知道小有建树答主
回答量:475
采纳率:85%
帮助的人:305万
展开全部
动态扫描,这是最基本的思路。
更多追问追答
追问
。能写下简单的程序嘛。就像第一个是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++)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
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不推荐 不过程序很简单
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式