找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 1293|回復(fù): 4
打印 上一主題 下一主題
收起左側(cè)

51單片機(jī)四位數(shù)碼管計(jì)時(shí)顯示程序求助

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:1121884 發(fā)表于 2024-5-22 18:12 來(lái)自手機(jī) | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
各位大佬主要看主函數(shù)就行
Nixietube_number這個(gè)函數(shù)就是在數(shù)碼管第幾位顯示數(shù)字幾
這個(gè)代碼運(yùn)行個(gè)位數(shù)的時(shí)候就沒(méi)有問(wèn)題,把if那段刪了只留else里面的運(yùn)行兩位數(shù)也沒(méi)問(wèn)題,但是使用ifelse的話并不能像我預(yù)想中那樣,一位數(shù)時(shí)只顯示第四個(gè)燈,當(dāng)需要顯示數(shù)字為兩位數(shù)時(shí)再顯示兩個(gè)燈
反而在顯示數(shù)字為9之后會(huì)短暫什么都不顯示,然后第四個(gè)燈就開(kāi)始亂閃
希望大佬能指點(diǎn)一下我為什么用了ifelse顯示就出問(wèn)題了

單片機(jī)源程序如下:
#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;
                }
        }
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:1109793 發(fā)表于 2024-5-22 18:56 | 只看該作者
電路圖呢?這樣的驅(qū)動(dòng)方式還是挺新穎的,ifelse的意思是無(wú)效零消隱嗎?
回復(fù)

使用道具 舉報(bào)

板凳
ID:161164 發(fā)表于 2024-5-22 19:00 | 只看該作者
if(0<=n<10)這種寫法不正確
應(yīng)改為if(0<=n && n<10)
但n其實(shí)不會(huì)少于0
所以可以簡(jiǎn)化為if(n<10)
回復(fù)

使用道具 舉報(bào)

地板
ID:59202 發(fā)表于 2024-5-22 19:30 | 只看該作者
你的numberSize[]數(shù)組應(yīng)該就是numberSize[10],你用大于9的n去取值不是越位了嗎
回復(fù)

使用道具 舉報(bào)

5#
ID:1109793 發(fā)表于 2024-5-23 07:19 | 只看該作者

對(duì)啊,可是看起來(lái)樓主是編譯通過(guò)了吧
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表