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

QQ登錄

只需一步,快速開始

搜索

求大神調(diào)試單片機(jī)數(shù)碼管問題

查看數(shù): 2803 | 評(píng)論數(shù): 7 | 收藏 0
關(guān)燈 | 提示:支持鍵盤翻頁<-左 右->
    組圖打開中,請(qǐng)稍候......
發(fā)布時(shí)間: 2018-5-21 10:01

正文摘要:

為什么單片機(jī)上程序效果不好使  我想要數(shù)碼管顯示這個(gè)數(shù) #include<reg51.h> #define DataPort P0 sbit duso=P2^1; sbit weso=P2^2; unsigned char code dofly_DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66 ...

回復(fù)

ID:213173 發(fā)表于 2018-5-22 10:57
1sdaw123 發(fā)表于 2018-5-21 22:32
這是最后效果 我直接復(fù)制的代碼

軟件是建立在硬件的基礎(chǔ)上的,首先要了解硬件電路,才能編寫與其相適應(yīng)的軟件。沒有包打天下的自適應(yīng)軟件。
ID:164602 發(fā)表于 2018-5-22 07:16
1sdaw123 發(fā)表于 2018-5-21 22:32
這是最后效果 我直接復(fù)制的代碼

自己要改程序了,看到你的板子,才知道不是我的板子。但原理差不多。
好像你的573控制口和我的不一樣哦。
ID:164602 發(fā)表于 2018-5-21 16:07
好像我有你這板子,所以我有現(xiàn)成的程序。
看看我寫的(呵呵——得意的笑——新手的表現(xiàn))
#include<reg51.h>

#define SMG P0//數(shù)碼管

sbit DUAN=P2^6;
sbit WEI1=P2^7;

unsigned char code ZF[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77
,0x7c,0x39,0x5e,0x79,0x71,0x00};//標(biāo)準(zhǔn)0~F數(shù)碼管顯示碼
unsigned char code WEI[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//控制哪一位數(shù)碼管顯示
                                //一次一位,對(duì)應(yīng)最左位→最右位
unsigned char DisplayData[8];//用來存放要顯示的8位數(shù)的值,一個(gè)管分配一位數(shù)組,叫顯示緩存

void DigDisplay()//數(shù)碼管動(dòng)態(tài)顯示函數(shù)
{
        unsigned char i,j;
        for(i=0;i<8;i++)//只有8個(gè)數(shù)碼管
        {
                switch(i)         //位選,選擇點(diǎn)亮的數(shù)碼管,并賦值顯示內(nèi)容
                {
                        case(0):
                                SMG=WEI[i];//先選位0(最左邊),后選段
                                WEI1=1;
                                WEI1=0;
                                SMG=DisplayData[i];//發(fā)送段碼
                                DUAN=1;
                                DUAN=0;
                                break;
                        case(1):
                                SMG=WEI[i];
                                WEI1=1;
                                WEI1=0;
                                SMG=DisplayData[i];
                                DUAN=1;
                                DUAN=0;
                                break;
                        case(2):
                                SMG=WEI[i];
                                WEI1=1;
                                WEI1=0;
                                SMG=DisplayData[i];
                                DUAN=1;
                                DUAN=0;
                                break;
                        case(3):
                                SMG=WEI[i];
                                WEI1=1;
                                WEI1=0;
                                SMG=DisplayData[i];
                                DUAN=1;
                                DUAN=0;
                                break;
                        case(4):
                                SMG=WEI[i];
                                WEI1=1;
                                WEI1=0;
                                SMG=DisplayData[i];
                                DUAN=1;
                                DUAN=0;
                                break;
                        case(5):
                                SMG=WEI[i];
                                WEI1=1;
                                WEI1=0;
                                SMG=DisplayData[i];
                                DUAN=1;
                                DUAN=0;
                                break;
                        case(6):
                                SMG=WEI[i];
                                WEI1=1;
                                WEI1=0;
                                SMG=DisplayData[i];
                                DUAN=1;
                                DUAN=0;
                                break;
                        case(7):
                                SMG=WEI[i];
                                WEI1=1;
                                WEI1=0;
                                SMG=DisplayData[i];
                                DUAN=1;
                                DUAN=0;
                                break;
                }
                j=20;//顯示一段時(shí)間,再消隱,可以得到穩(wěn)定的顯示
                while(j--);       
                SMG=0xff;
                WEI1=1;
                WEI1=0;
                SMG=0x00;//消隱
                DUAN=1;
                DUAN=0;//關(guān)閉段碼
        }
}

void XSHCFZ (unsigned long j)//顯示緩存賦值
{
        DisplayData[0]=ZF[j/10000000];//將十進(jìn)制數(shù)換算為可顯示字符
        DisplayData[1]=ZF[(j%10000000)/1000000];
        DisplayData[2]=ZF[(j%1000000)/100000];
        DisplayData[3]=ZF[(j%100000)/10000];
        DisplayData[4]=ZF[(j%10000)/1000];
        DisplayData[5]=ZF[(j%1000)/100];
        DisplayData[6]=ZF[(j%100)/10];
        DisplayData[7]=ZF[(j%10)/1];
}

void main(void)
{
        DUAN=0;WEI1=0;
        XSHCFZ(76543210);
        while(1)
        {
                DigDisplay();//顯示
        }                               
}

好像和你的板子有點(diǎn)區(qū)別:兩個(gè)鎖存器的控制端接的口 不一樣,你自己改一下試試。
ID:213173 發(fā)表于 2018-5-21 15:14
想要數(shù)碼管顯示count=116788;要定義變量count為 long 類型,分解這么大的數(shù)在12MHz時(shí)鐘條件下需要耗時(shí)約3ms,這會(huì)造成數(shù)碼管閃爍。給你改主循環(huán)一次分解一位,顯示一位。
#include<reg51.h>
#define DataPort P0
sbit duso=P2^1;
sbit weso=P2^2;
unsigned char code dofly_DuanMa[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 顯示段碼值0~9
unsigned char code dofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分別對(duì)應(yīng)相應(yīng)的數(shù)碼管點(diǎn)亮,即位碼
unsigned char count_Data[6];//定義count的全局變量

void main()
{
        unsigned char i=0;
        unsigned long count=116788;
        while(1)
        {
                switch(i)
                {
                        case 0: count_Data[0]=dofly_DuanMa[count/100000]; break;
                        case 1: count_Data[1]=dofly_DuanMa[count%100000/10000]; break;
                        case 2: count_Data[2]=dofly_DuanMa[count%10000/1000]; break;
                        case 3: count_Data[3]=dofly_DuanMa[count%1000/100]; break;
                        case 4: count_Data[4]=dofly_DuanMa[count%100/10]; break;
                        case 5: count_Data[5]=dofly_DuanMa[count%10]; break;
                }
                DataPort=0;   //清空數(shù)據(jù),防止有交替重影
                duso=1;     //段鎖存
                duso=0;               
                DataPort=dofly_WeiMa[i+2]; //取位碼
                weso=1;     //位鎖存
                weso=0;               
                DataPort=count_Data[i]; //取顯示數(shù)據(jù),段碼
                duso=1;     //段鎖存
                duso=0;
                i++;
                if(i>=6)
                i=0;
        }
}
ID:334868 發(fā)表于 2018-5-21 14:54
主函數(shù)中沒有發(fā)現(xiàn)怎么以調(diào)用顯示函數(shù)呀~~顯示似乎沒有執(zhí)行吧??

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

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

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