单片机数码管显示问题
小人最近刚起步学单片机,基本是个小白。用的是KT800型号的板子,单片机型号Atmel89S52。在数码管显示的时候,P2用来位选点亮哪个数码管。P0控制数码管显示字形。都是共阳极的。我准备先让数码管显示“1”,再显示“2”。但小人用下面的代码,得到的显示结果竟然是一个“1”和“2”的组合字形。
#include<reg52.h>
void delay10ms(void)
{
unsigned char i,j;
for(i=20;i>0;i--);
for(j=100;j>0;j--);
}
void main()
{
P2=0x7f;
P0=0xf9;
delay10ms();
P2=0x7f;
P0=0xa4;
delay10ms();
}
看了郭天祥的视频,他那个有锁存器,可以使用锁存器保持,然后用delay函数保持。再次使锁存器直通,赋第二个值显示第二个数字,再用锁存器保持,然后再用delay函数保持。
本人疑问:怎么实现一个数码管先后显示不同的数字?多个数码管呢?(每个数码管在同一时间显示不同的数字)?KT800的板子有没有类似郭天祥TX-1C板子锁存器类似的功能?
求大神解答!谢谢啦啦!
P2口赋值不对,P2口从开始到结束没有变化啊!所以显示12的。
小编知不知道数码管显示有静态显示和动态显示两种,用动态显示可以在同时让不同数码管显示不同的数字
P2口是用来选择点亮的数码管。因为我想两次都点亮的是同一个数码管所以P2没有变化啊。请指教
啊,受教了。静态正在学,动态还没看呢。大神,能不能帮我解决下我这个问题,背景就是我帖子里说的,怎么实现在同一数码管先亮“1”,再亮“2”。请赐教!
你已经实现了你需求的功能了,只是你的延时太短,只有10毫秒,人眼的延迟会使数码管看起来显示组合字形,你如果把延时加大些,比如1秒,就会交替显示1,2两个数字了
延时10ms太短,延长一下时间就应该可以了。
mobai ...dashen
显示完1以后还有余晖啊,这之间的延时过短,或者是中间的时候送个0,还有小编怎么没有大循环?我也不是什么高手,这只是我的拙见
用定时器应该可以吧
个人感觉时间太短了
延时时间是个问题,另外小编最好有一个while(1)大循环,规范问题
弱弱地问一下延时时间有什么问题?while(1)我感觉在我这个程序里面没有用,因为我现在遇到的问题是同一个数码管让它先亮“1”保持一段时间,然后再亮“2”保持一段时间。不知能否赐教?
我把延时改为1秒,还是没有解决问题。高手,能不能给解决下!不然影响我后续的学习进展,谢谢了
大神,我这个板子是KT800单片机型号是AT89s52。也不知怎么搞的,我把延时设为1秒还是不行。请再赐教,帮菜鸟解决下问题,不胜感激!
我是菜鸟,以后还得跟着论坛的大神混
余晖,这个问题我已经试过好多次了,应该不是。延时时间改过了也不行,中间何止送个0,给送空数什么也不显示也不行啊,大循环跟我这没关系吧,但我还是试了一下,还不行!这个问题快半个月了,已经影响到我的学习进度了!求办法
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
void delay10ms(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void main()
{
P2=0x7f;
P0=0xf9;
delay10ms(5);
P0=0xff;
delay10ms(500);
delay10ms(500);
P2=0x7f;
P0=0xa4;
delay10ms(5);
}
把这个烧进去试试