找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3065|回復: 5
打印 上一主題 下一主題
收起左側(cè)

單片機數(shù)碼管顯示錯誤問題,偶數(shù)次循環(huán)出錯

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:476725 發(fā)表于 2019-4-21 17:42 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
我在練習數(shù)碼管循環(huán)顯示時,奇數(shù)次循環(huán)沒有問題如第一張圖,偶數(shù)次循環(huán)都會出現(xiàn)第二張圖的問題,反復看了代碼感覺沒有問題,還想請教各位我這里是出現(xiàn)了什么問題,謝謝

#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
uchar code tabledu[]={0x06,0x5b,0x4f,0x66,0x6d,0x7d};       //,0x07,0x6f,0x77,0x7c,0x58,0x5e,0x7b,0x71};
uchar code tablewe[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};          //,0xbf,0x7f};
sbit wela=P2^7;
sbit dula=P2^6;
uint a,num1,num2;
void init();
void main()
{
        init();
        while(1)
        {
                if(a==20)
                {
                        num1++;
                        num2--;
                        if(num1>5)
                        {
                                num1=0;
                                num2=5;
                        }
                        P0=tablewe[num1];
                        wela=1;
                        wela=0;
                        P0=tabledu[num2];
                        dula=1;
                        dula=0;
                        a=0;
                }
        }               
}

void init()
{
        TMOD=0x11;
        TH1=(65536-50000)/256;
        TL1=(65536-50000)%256;
        EA=1;
        ET1=1;
        TR1=1;
        num1=0;
        num2=5;
        wela=1;
        P0=tablewe[num1];
        wela=0;
        dula=1;
        P0=tabledu[num2];
        dula=0;        
}

void timer1() interrupt 3
{
        a++;        
        TH1=(65536-50000)/256;
        TL1=(65536-50000)%256;        
}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:434390 發(fā)表于 2019-4-22 08:06 | 只看該作者
timer1中斷里面提取段碼譯碼位選
回復

使用道具 舉報

板凳
ID:213173 發(fā)表于 2019-4-22 11:47 | 只看該作者
動態(tài)數(shù)碼管顯示需要1~5ms顯示1位,根據(jù)數(shù)碼管顯示位數(shù)掃描一輪不要超過20ms。改這樣試試。
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
uchar code tabledu[]={0x06,0x5b,0x4f,0x66,0x6d,0x7d};       //,0x07,0x6f,0x77,0x7c,0x58,0x5e,0x7b,0x71};
uchar code tablewe[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};          //,0xbf,0x7f};
sbit wela=P2^7;
sbit dula=P2^6;
uchar num1,num2;
uint b;
bit a;
void init();

void main()
{
        init();
        while(1)
        {
                if(a==1)
                {
                        a=0;
                        b++;
                        num1++;
                        if(num1>5)
                                num1=0;
                        if(b>=500)
                        {
                                b=0;
                                num2--;
                                if(num2>5)
                                        num2=5;
                        }
                        P0=tablewe[num1];
                        wela=1;
                        wela=0;
                        P0=tabledu[num2];
                        dula=1;
                        dula=0;
                }
        }
}

void init()
{
    TMOD=0x10;
    TH1=(65536-2000)/256;
    TL1=(65536-2000)%256;
    EA=1;
    ET1=1;
    TR1=1;
    num1=0;
    num2=5;
//    wela=1;
//    P0=tablewe[num1];
//    wela=0;
//    dula=1;
//    P0=tabledu[num2];
//    dula=0;        
}

void timer1() interrupt 3
{      
    TH1=(65536-2000)/256;
    TL1=(65536-2000)%256;        
    a=1;
}
回復

使用道具 舉報

地板
ID:462827 發(fā)表于 2019-4-22 14:04 | 只看該作者
你想要實現(xiàn)什么效果?這個不說清楚不行的
回復

使用道具 舉報

5#
ID:476725 發(fā)表于 2019-4-27 22:20 | 只看該作者
wulin 發(fā)表于 2019-4-22 11:47
動態(tài)數(shù)碼管顯示需要1~5ms顯示1位,根據(jù)數(shù)碼管顯示位數(shù)掃描一輪不要超過20ms。改這樣試試。
#include
#inc ...

感謝,問題已解決,我改成在打開段選和位選控制之前先給P0賦值就沒問題了。
回復

使用道具 舉報

6#
ID:476725 發(fā)表于 2019-4-27 22:20 | 只看該作者
snni00 發(fā)表于 2019-4-22 08:06
timer1中斷里面提取段碼譯碼位選

感謝,問題已解決,我改成在打開段選和位選控制之前先給P0賦值就沒問題了。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表