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

QQ登錄

只需一步,快速開始

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

關(guān)于單片機(jī)的I/O口輸出問題

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
在keil中生成HEX文件后,用proteus仿真時(shí),
P1=0xfe;可以正常輸出;

j=0;
if(j==0)
{
   P1=0xfe;
}
卻不能正常輸出????

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

使用道具 舉報(bào)

沙發(fā)
ID:330198 發(fā)表于 2019-5-25 15:17 | 只看該作者
這要結(jié)合完整程序來看
回復(fù)

使用道具 舉報(bào)

板凳
ID:511890 發(fā)表于 2019-5-25 15:39 | 只看該作者
有可能是變量類型問題。。你試試把變量改成int型;蛘吒某桑簀=0x00;if(0x00==j){ P1=0xfe;}。當(dāng)然,有用到P1,include單片機(jī)頭文件。
回復(fù)

使用道具 舉報(bào)

地板
ID:541189 發(fā)表于 2019-5-25 16:19 來自手機(jī) | 只看該作者
f是不是溢出了
回復(fù)

使用道具 舉報(bào)

5#
ID:393193 發(fā)表于 2019-5-25 16:29 | 只看該作者
zhanghyg 發(fā)表于 2019-5-25 15:17
這要結(jié)合完整程序來看

這是源程序:
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
uchar code KEY_TABLE[]={0x11,0x21,0x12,0x22};
uchar code a[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
uchar code b[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
uchar code c[]={0xfe,0xfd,0xfb,0xf7,0xef};
       
void delay5ms(uint x)
{
        uchar t,ms;
        ms=25*x;
        while(ms--)
                for(t=0;t<120;t++);
}

void delays()
{
        uint s=10000;while(s--);
}

void main()
{
        uchar n,x,temp,key,num,i,j;
        n=0;
        x=5;
        j=0;
        for(;;)
        {
                if(j==0)
                {
                        P1=a[n];
                }
                P0=c[x-1];
                delay5ms(x);
                n=n+1;
                if(n==8)
                        n=0;
                P3=0xf0;
                if(P3!=0xf0)
                {
                        delays();P3=0xf0;
                        if(P3!=0xf0)
                        {
                                temp=P3;
                                P3=0x0f;
                                key=temp|P3;
                                key=0xff-key;
                                for(i=0;i<4;i++)
                                {
                                        if(key==KEY_TABLE)
                                        {
                                                num=i;
                                break;
                                        }
                                }
                                if(num==0)
                                        j=0;
                                if(num==1)
                                        j=n;
                                if(num==2)
                                        x=x-1;
                                if(num==3)
                                        x=x+1;
                        }
                }
        }
}
為什么這時(shí)的P1不能正常輸出???
回復(fù)

使用道具 舉報(bào)

6#
ID:10947 發(fā)表于 2019-5-25 16:33 | 只看該作者
可能j==0這個(gè)條件不符合?
回復(fù)

使用道具 舉報(bào)

7#
ID:393193 發(fā)表于 2019-5-25 16:38 | 只看該作者
zhanghyg 發(fā)表于 2019-5-25 15:17
這要結(jié)合完整程序來看

附上電路圖:

KICWQUT9D34KZ[0R6QKL7@D.png (167 KB, 下載次數(shù): 29)

KICWQUT9D34KZ[0R6QKL7@D.png
回復(fù)

使用道具 舉報(bào)

8#
ID:547037 發(fā)表于 2019-5-25 16:58 | 只看該作者
可能是單片機(jī)的驅(qū)動(dòng)壞了
回復(fù)

使用道具 舉報(bào)

9#
ID:383215 發(fā)表于 2019-5-25 17:40 | 只看該作者
既然j=0,那么肯定j==0,被C編譯器優(yōu)化掉不執(zhí)行這條語句,這是廢話語句,C編譯器不是傻瓜。你硬要執(zhí)行,把優(yōu)化等級(jí)降到最低,或者用 volatile定義j。
回復(fù)

使用道具 舉報(bào)

10#
ID:155507 發(fā)表于 2019-5-25 20:42 | 只看該作者
覺得是你P1=a[n]; 這里出了問題了吧
P1=a[n];這里的話數(shù)據(jù)只顯示了一瞬間就被P0=c[x-1];取代
這兩行之間插入一個(gè)延時(shí)就可以了。

if(j==0)
                {
                        P1=a[n];
                        delay5ms(x);
                }
                P0=c[x-1];
                delay5ms(x);

回復(fù)

使用道具 舉報(bào)

11#
ID:383215 發(fā)表于 2019-5-26 00:23 | 只看該作者
不管是什么單片機(jī),編程查錯(cuò)效率最高的是硬件仿真,我從來沒有用過proteus,像51單片機(jī),我用自制的試驗(yàn)板,搭好外圍元件,插上仿真頭,硬件仿真,一般寫十幾行代碼,我就要仿真通過,無非就是設(shè)置斷點(diǎn)、單步執(zhí)行、全速執(zhí)行,只要有錯(cuò)誤,很快就發(fā)現(xiàn),AVR單片機(jī)用自制的JTAG仿真器仿真,雖然難用一些,也總比沒有要好,沒有硬件仿真器,我寧愿不編程序,查錯(cuò)效率實(shí)在是太低了。
回復(fù)

使用道具 舉報(bào)

12#
ID:530034 發(fā)表于 2019-5-26 18:16 | 只看該作者
51單片機(jī),我用自制的試驗(yàn)板,搭好外圍元件,插上仿真頭,硬件仿真,一般寫十幾行代碼,我就要仿真通過,無非就是設(shè)置斷點(diǎn)、單步執(zhí)行、全速執(zhí)行,只要有錯(cuò)誤,很快就發(fā)現(xiàn),AVR單片機(jī)用自制的JTAG仿真器仿真,雖然難用一些,也總比沒有要好,沒有硬件仿真器
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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