找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 970|回复: 5
收起左侧

求助,关于数码管内容有误,单片机程序要如何修改?

[复制链接]
ID:755966 发表于 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
回复

使用道具 举报

ID:415064 发表于 2022-1-25 09:06 | 显示全部楼层
延时哪个地方多看下
回复

使用道具 举报

ID:878061 发表于 2022-1-25 12:16 | 显示全部楼层
你把74HC573和DAC0832都接P0口肯定会有冲突啊
回复

使用道具 举报

ID:276663 发表于 2022-1-25 14:36 | 显示全部楼层
去掉delay(8);下面一行的switch2 =1;这句代码
回复

使用道具 举报

ID:276663 发表于 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
回复

使用道具 举报

ID:625730 发表于 2022-1-25 19:09 | 显示全部楼层
IdeaMing 发表于 2022-1-25 14:38
程序就是多了那行代码

void display()

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

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表