标题: 求助,关于数码管内容有误,单片机程序要如何修改? [打印本页]

作者: wangliqi23    时间: 2022-1-24 22:06
标题: 求助,关于数码管内容有误,单片机程序要如何修改?
数码管只能显示0 1 3 5,但是不显示2和4,不知道自己程序哪里出了问题,希望大家帮忙看一下程序哪一步需要修改。

单片机源程序如下:
#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
uchar code table[]={~0xc0,~0xf9,~0xa4,~0xb0,~0x99,~0x92,~0x82,~0xf8,~0x80,~0x90};//数码管段选
uchar code wela[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};//数码管位选
sbit beep=P2^3;
sbit switch1=P2^6;//段选LE
sbit switch2=P2^7;//位选LE
uchar x;
void delay(uint z)//unit是宏定义
{
        uint x,y;
        for(x=z;x>0;x--)
                for(y=0;y<100;y++);
            
}
void display()
{
        uchar x;
        for(x=0;x<6;++x)
        { P0=0x00;
                switch1=1;
                switch1=0;
                switch2=1;
                P0=wela[x];
                switch2=0;
                switch1=1;
                P0=table[x];
                switch1=0;
                delay(8);
                switch2=1;
        }
}
void main()
{
        beep=0;
        while(1)
        {
                display();
        }
        
}

1.png (90.56 KB, 下载次数: 50)

1.png

作者: wojiaoguogai    时间: 2022-1-25 09:06
延时哪个地方多看下

作者: huashanhui20    时间: 2022-1-25 12:16
你把74HC573和DAC0832都接P0口肯定会有冲突啊
作者: IdeaMing    时间: 2022-1-25 14:36
去掉delay(8);下面一行的switch2 =1;这句代码
作者: IdeaMing    时间: 2022-1-25 14:38
程序就是多了那行代码

void display()
{
  uchar x;
  for(x=0;x<6;++x)
  {
    P0=0x00;
    switch1=1;
    switch1=0;

    switch2=1;
    P0=wela[x];
    switch2=0;

    switch1=1;
    P0=table[x];
    switch1=0;

    delay(8);
//  switch2=1;//删掉这行就行了
  }
}

51hei截图20220125143738.jpg (78.1 KB, 下载次数: 38)

51hei截图20220125143738.jpg

作者: TEC    时间: 2022-1-25 19:09
IdeaMing 发表于 2022-1-25 14:38
程序就是多了那行代码

void display()

看懂了。本来想着为啥只有2和4显示不了,其他可以显示,原来是因为这个程序的位选在for循环尾部可以重新赋值,在显示1和3的时候,P0端口的值刚好是2和4的位选不能起作用的值。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1