找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3362|回復(fù): 10
收起左側(cè)

為什么段選中加入delay運行會出錯?

[復(fù)制鏈接]
ID:111874 發(fā)表于 2016-6-30 01:08 | 顯示全部樓層 |閱讀模式
為什么段選中加入delay運行會出錯?求解惑在子函數(shù)void sanmiao(uchar bai,uchar shi,uchar ge)中加注釋的地方

#include <reg52.h>
#define uchar unsigned char
#define        uint unsigned int
uchar t = 0;
uchar bai,shi,ge;
sbit dula = P2^6;
sbit wela = P2^7;
void delay(uint z);
void sanmiao(uchar bai,uchar shi,uchar ge);
uchar code table[]={
                                        0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d,
                                        0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c,
                                        0x39, 0x5e, 0x79, 0x71
                                  };
void main(void)
{
        uchar temp = 0;
        wela = 0;
        dula = 0;
        TMOD = 0X01;
        TH0 = (65536-50000)/256;
        TL0 = (65536-50000)%256;
        TR0 = 1;
        ET0 = 1;
        EA = 1;
        while(1)
        {
                if(t == 20)
                {
                        t = 0;
                        temp++;
                        if (temp == 100)
                                temp = 0;  
                        bai = temp/100;
                        shi = temp%100/10;
                        ge = temp%10;
                }
                sanmiao(bai,shi,ge);       
        }
}
void delay(uint z)//延時程序
{
        uchar i,j;
        for(i=z;i>0;i--)
                for(j=110;j>0;j--);
}
//顯示動態(tài)掃描三個數(shù)碼管
void sanmiao(uchar bai,uchar shi,uchar ge)
{
       

        dula = 1;
        P0 = table[bai];
        dula = 0;
        //delay(1);        //段選加上延時函數(shù)后為什么會出錯??
        wela = 1;
        P0 = 0xfe;
        wela = 0;
        delay(5);

       

        dula = 1;
        P0 = table[shi];
        dula = 0;
        //delay(1);
        wela = 1;
        P0 = 0xfd;
        wela = 0;
        delay(5);

       

        dula = 1;
        P0 = table[ge];
        dula = 0;
        //delay(1);
        wela = 1;
        P0 = 0xfb;
        wela = 0;
        delay(5);
}
void timer0() interrupt 1
{
        TH0 = (65536-50000)/256;
        TL0 = (65536-50000)%256;
        t++;
}









回復(fù)

使用道具 舉報

ID:7485 發(fā)表于 2016-6-30 19:29 | 顯示全部樓層
不會出錯吧?

但是 Z和 i 的數(shù)據(jù)類型不一樣,雖說沒有報錯,但應(yīng)該是相同為好。
回復(fù)

使用道具 舉報

ID:111874 發(fā)表于 2016-6-30 20:32 | 顯示全部樓層
ahshmj 發(fā)表于 2016-6-30 19:29
不會出錯吧?

但是 Z和 i 的數(shù)據(jù)類型不一樣,雖說沒有報錯,但應(yīng)該是相同為好。

程序沒問題,燒進(jìn)單片機(jī)數(shù)碼管顯示成亂碼
回復(fù)

使用道具 舉報

ID:128761 發(fā)表于 2016-6-30 23:10 | 顯示全部樓層
不會出錯吧?
回復(fù)

使用道具 舉報

ID:111874 發(fā)表于 2016-7-1 09:27 | 顯示全部樓層

燒進(jìn)去亂碼
回復(fù)

使用道具 舉報

ID:71099 發(fā)表于 2016-7-1 11:31 | 顯示全部樓層
是亂成什么樣?發(fā)個圖上來并注明原本是什么,這樣比較好理解和修改
回復(fù)

使用道具 舉報

ID:115571 發(fā)表于 2016-7-1 14:04 | 顯示全部樓層
你把對t的處理放在中斷里處理試試看
回復(fù)

使用道具 舉報

ID:7485 發(fā)表于 2016-7-1 22:34 | 顯示全部樓層
數(shù)碼管的型號對否?
回復(fù)

使用道具 舉報

ID:111874 發(fā)表于 2016-7-2 11:13 | 顯示全部樓層
ahshmj 發(fā)表于 2016-7-1 22:34
數(shù)碼管的型號對否?

數(shù)碼管的型號是正確的,不加DELAY就可以正確顯示,加了就亂碼了
回復(fù)

使用道具 舉報

ID:7485 發(fā)表于 2016-7-2 20:04 | 顯示全部樓層
本帖最后由 ahshmj 于 2016-7-2 20:07 編輯

是鎖存器輸出吧?
因為你 位選 未關(guān)閉,也未改變,而你的段選數(shù)據(jù)已經(jīng)改變,......
回復(fù)

使用道具 舉報

ID:61390 發(fā)表于 2016-7-20 18:57 來自手機(jī) | 顯示全部樓層
如10樓說的共陽管,位碼高低電位反了!
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

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