找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1371|回复: 4
收起左侧

51单片机四位数码管计时显示程序求助

[复制链接]
ID:1121884 发表于 2024-5-22 18:12 来自触屏版 | 显示全部楼层 |阅读模式
各位大佬主要看主函数就行
Nixietube_number这个函数就是在数码管第几位显示数字几
这个代码运行个位数的时候就没有问题,把if那段删了只留else里面的运行两位数也没问题,但是使用ifelse的话并不能像我预想中那样,一位数时只显示第四个灯,当需要显示数字为两位数时再显示两个灯
反而在显示数字为9之后会短暂什么都不显示,然后第四个灯就开始乱闪
希望大佬能指点一下我为什么用了ifelse显示就出问题了

单片机源程序如下:
#include <REGX52.H>
void Nixietube_number(int position,int number);
void Delay(long xms);
sbit led1=P1^0;
sbit led2=P1^1;
sbit led3=P1^2;
sbit led4=P1^3;
int n=0;
int i=0;
void main()
{
        TMOD=0x01;
        TH0=(65535-20000)/256;
        TL0=(65535-20000)%256;
        EA=1;ET0=1;
        TR0=1;
        while(1)
        {
                if(0<=n<10)
                {
                        Nixietube_number(4,n);
                }
                 else
                 {
                        Nixietube_number(4,n%10);
                        Nixietube_number(3,n/10);
               
        }
                 
        }
}

void Delay(long xms)   
{
    unsigned char i, j;

    while(xms--)
    {
    i = 2;
    j = 239;
    do
    {
        while (--j);
    } while (--i);
    }
}


void Nixietube_number(int position,int number)
{
    unsigned char numberSize[]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09};
    switch(position)
    {
        case 1:
            led1=1;led2=0;led3=0;led4=0;break;
        case 2:
            led1=0;led2=1;led3=0;led4=0;break;
        case 3:
            led1=0;led2=0;led3=1;led4=0;break;
        case 4:
            led1=0;led2=0;led3=0;led4=1;break;
    }
    P2=numberSize[number];
    Delay(5);
               
     }

        void tiemr0() interrupt 1
        {
                TH0=(65535-20000)/256;
        TL0=(65535-20000)%256;
                i++;
                if(i==50)
                {
                        i=0;
                        n=n+1;
                }
        }
回复

使用道具 举报

ID:1109793 发表于 2024-5-22 18:56 | 显示全部楼层
电路图呢?这样的驱动方式还是挺新颖的,ifelse的意思是无效零消隐吗?
回复

使用道具 举报

ID:161164 发表于 2024-5-22 19:00 | 显示全部楼层
if(0<=n<10)这种写法不正确
应改为if(0<=n && n<10)
但n其实不会少于0
所以可以简化为if(n<10)
回复

使用道具 举报

ID:59202 发表于 2024-5-22 19:30 | 显示全部楼层
你的numberSize[]数组应该就是numberSize[10],你用大于9的n去取值不是越位了吗
回复

使用道具 举报

ID:1109793 发表于 2024-5-23 07:19 | 显示全部楼层

对啊,可是看起来楼主是编译通过了吧
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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