[求助] 51单片机数码管不用锁存器显示时程序怎么写

小连翘   2011-11-27 18:29 楼主
我的程序:
#include <reg52.h>
unsigned int ms;
unsigned char shumaguan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
//sbit wei1=P2^4;
sbit wei2=P2^5;
sbit wei3=P2^6;
sbit wei4=P2^7;
void delay (unsigned int ms)
{
unsigned int i;
unsigned char j;
    for(i=0;i<ms;i++)
    {
        for(j=0;j<200;j++);
        for(j=0;j<102;j++);
    }
}
void main()
{
   //P0=0xfe;wei1=1;P0=shumaguan[0];delay(5);wei2=0;delay(5);
  P0=0xfd;wei2=1;P0=shumaguan[1];delay(5);wei2=1;//delay(5);
  P0=0xfb;wei3=1;P0=shumaguan[2];delay(5);wei3=1;//delay(5);
P0=0xf7;wei4=1;P0=shumaguan[3];delay(5);wei4=1;//delay(5);
}

因为P2^4是接继电器的,所以用这个引脚会出问题,可是如果要用的数码管较多的话,还是要用这个脚的。
主要是这个程序显示的数字位置不对,为什么呢?请大侠赐教

回复评论 (8)

回复 楼主 小连翘 的帖子

程序不对,数码管动态扫描是先送数据,开这一位数码管,延时一段时间关断,再同样方法扫描其它位。扫描周期>20H就好了
点赞  2011-11-27 18:53

回复 沙发 15075039ZQ 的帖子

你说的是一个问题,但是他要干嘛?我还是没有看懂啊。。。。。我建议有问题就要带个图来啊。。。要不然我比较笨。。。。不理解。。。。
点赞  2011-11-27 19:43
51单片机数码管不用锁存器显示时程序怎么写
[url=http://www.51great.org/]嵌入式培训[/url
点赞  2011-11-28 09:22
wei1 wei2 wei3 wei4是接啥的?
点赞  2011-11-28 11:41

程序不对

P0=0xfd;wei2=1;P0=shumaguan[1];delay(5);wei2=1;//delay(5);
  P0=0xfb;wei3=1;P0=shumaguan[2];delay(5);wei3=1;//delay(5);
P0=0xf7;wei4=1;P0=shumaguan[3];delay(5);wei4=1;//delay(5);

你是不是先移位再送数?
点赞  2011-11-29 16:12

有个大概的说明或图好了

http://shop34182318.taobao.com/ https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
点赞  2011-11-29 19:57
直接接,用个上拉电阻就行了,不用锁存器!
点赞  2011-12-1 14:31
动态扫描不用锁存器的话    步骤(消影-----送选通位--------送数据--------延时(低于20ms))有N位数码管要动态显示步骤就循环N次,例如   
P0=oxff    //消影
P2=(P2|&0x0f)|0x70   //假设P2^0---P2^3为选通位   选通P2^0  
P0=0xee  //显示1  (共阳级数码管)
delay-ms(10);//调用延时函数

(如此循环4次,其他时间在去做其他任务。)如果I/O紧张选通位较多,可以接译码器扩展选通位如74HC138
敢爱敢做勇敢闯一闯
点赞  2011-12-1 19:56
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复