标题: 51单片机四位数码管计时显示程序求助 [打印本页]

作者: wzynb    时间: 2024-5-22 18:12
标题: 51单片机四位数码管计时显示程序求助
各位大佬主要看主函数就行
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;
                }
        }
作者: xiaobendan001    时间: 2024-5-22 18:56
电路图呢?这样的驱动方式还是挺新颖的,ifelse的意思是无效零消隐吗?
作者: lkc8210    时间: 2024-5-22 19:00
if(0<=n<10)这种写法不正确
应改为if(0<=n && n<10)
但n其实不会少于0
所以可以简化为if(n<10)
作者: xxxevery    时间: 2024-5-22 19:30
你的numberSize[]数组应该就是numberSize[10],你用大于9的n去取值不是越位了吗
作者: xiaobendan001    时间: 2024-5-23 07:19
lkc8210 发表于 2024-5-22 19:00
if(0

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




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