微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 单片机数码管显示问题

单片机数码管显示问题

时间:10-02 整理:3721RD 点击:
求大神解答!
       小人最近刚起步学单片机,基本是个小白。用的是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);        
}
把这个烧进去试试

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top