欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 15F104W的單片機 P0 P1接口能不能當IO口用 [打印本頁]

作者: bosschen    時間: 2018-5-31 12:57
標題: 15F104W的單片機 P0 P1接口能不能當IO口用
15F104W的單片機 為什么我把P0 P1口也就是下載口(tx rx )當IO口用,沒有反應呢?是不可用,還是這種用法程序寫法不一樣!~

作者: zhanghyg    時間: 2018-5-31 15:03
可以的,你程序估計有問題
作者: wulin    時間: 2018-5-31 15:44
15F104W的單片機只有6個I/O口:P3.0~3.5,如果不使用第二功能只做普通I/O口就沒有區別。
作者: angmall    時間: 2018-5-31 15:54
你在哪里看道?P0,P1? Tx Rx 是P30, P31,
作者: fzhlpp    時間: 2018-5-31 15:59
貼出你的代碼看看,可以當普通口用的。
作者: ahshmj    時間: 2018-5-31 16:51
本來就是。
作者: bosschen    時間: 2018-6-2 00:23
#include<reg51.h>
unsigned char times;
sbit key=P3^2;
sbit led=P3^4;
sbit led2=P3^5;
sbit led3=P3^0;
sbit led4=P3^1;
void delay(unsigned char a)
{
unsigned char i,j;
for(i=0;i<a;i++)
for(j=0;j<120;j++);
}
main()
{
unsigned char i = 0;
unsigned char ii = 0;
led=1;
while(1)
    {
    if(key==0)

        {
        delay(10);

        if(key==0)
        {
        while(key==0);

        times++;
        }
        times%=3;

        }

    switch(times)

        {
        case 0:led=1;break;

        case 1:led=0;break;

        case 2:
                        for (i = 0; i < 6; ++i)
                        {
                                led = 0;
                                delay(500);
                                led = 1;
                        delay(500);
                                led2 = 0;
                                delay(500);
                                led2 = 1;
                        delay(500);
                        }
                                       
                                        for (i = 0; i < 6; ++i)
                        {
                                led3 = 0;
                                delay(500);
                                led3 = 1;
                        delay(500);
                                led4 = 0;
                                delay(500);
                                led4 = 1;
                        delay(500);
                        }
                                                       



        }

    }

}



現在不光是P3-0 P3-1沒反應燈不亮  還有一個問題就是 當times=2時 LED燈開始閃,這個時間有時按按鈕不切換,要按好幾次,給我的感覺得正好程序循環完了我正好按下去了才可以,如果程序正在循環按鈕無效,這個問題如何處理?謝謝大家
作者: fzhlpp    時間: 2018-6-2 08:27
你的延時時間太長,按鍵按下后程序還在延時那里執行不會知道你按鍵按下的,程序是一步一步走的你自己看看是不是這樣。除非你用中斷按鍵或者用定時器延時。還有建議把按鍵掃描和led顯示放到大循環外面做一個函數模塊。led3和led4會不會是你的芯片壞了換一個試試,你也可以在前面像led一樣把led3,led4放前面直接點亮看看,還不亮可能是硬件問題。
作者: SADong    時間: 2018-6-2 09:17
可以用的
作者: weidoit    時間: 2018-6-2 19:49
我用過15F104w,下載口可以當用作IO
作者: wulin    時間: 2018-6-3 09:55
bosschen 發表于 2018-6-2 00:23
#include
unsigned char times;
sbit key=P3^2;

你使用for循環+delay延時處理閃爍燈,CPU幾乎完全被占用,按鍵狀態很難被捕捉到,而且按鍵抬起識別用了while(key==0);死循環等待,這就導致互相擠占CPU時間,程序運行不暢。給你把閃爍燈程序改在定時器中斷里處理,你試試。
#include<reg51.h>
sbit key=P3^2;
sbit led1=P3^4;
sbit led2=P3^5;
sbit led3=P3^0;
sbit led4=P3^1;
unsigned char times=0;
unsigned char time=0;
unsigned char time1=0;
bit flag=1;
void delay(unsigned char a)
{
        unsigned char i,j;
        for(i=0;i<a;i++)
                for(j=0;j<120;j++);
}
void Timer0Init()        //50毫秒@12.000MHz
{
        TMOD= 0x01;                //設置定時器模式
        TL0 = 0xB0;                //設置定時初值
        TH0 = 0x3C;                //設置定時初值
        TF0 = 0;                        //清除TF0標志
//        TR0 = 1;                        //定時器0開始計時
        EA=1;                                //開總中斷
        ET0=1;                        //開定時器0中斷       
}

void Twinkle()
{
        static unsigned char i=0,j=0;

        if(flag==1)
        {
                time1++;
                if(time1==24)
                        time1=0;
                if(time1<12)
                {
                        switch(i)       
                        {
                                case 0:led1=0;led2=1;led3=1;led4=1;i=1;break;
                                case 1:led1=1;led2=0;led3=1;led4=1;i=0;break;
                        }
                        j=0;
                }               
                else
                {
                        switch(j)       
                        {
                                case 0:led1=1;led2=1;led3=0;led4=1;j=1;break;
                                case 1:led1=1;led2=1;led3=1;led4=0;j=0;break;
                        }
                        i=0;
                }

        }
}

void main()
{
        unsigned char k = 0;        //按鍵狀態
        Timer0Init();
        while(1)
        {
                if(key==0)
                {
                        delay(10);
                        if((key==0)&&(k==0))
                        {
                                k=1;
                                times++;
                                times%=3;
                        }
                }       
                else k=0;
                switch(times)       
                {
                        case 0:led1=led2=led3=led4=1;TR0=0;flag=0;time1=0;break;
                        case 1:led1=0;break;
                        case 2:flag=1;TR0=1;break;
                }
        }
}

void timer0() interrupt        1
{
        TL0 = 0xB0;                //設置定時初值
        TH0 = 0x3C;                //設置定時初值
        time++;                       
        if(time>=10)        //0.5秒
        {
                time=0;
                Twinkle();
        }
}

作者: bosschen    時間: 2018-6-3 16:45
wulin 發表于 2018-6-3 09:55
你使用for循環+delay延時處理閃爍燈,CPU幾乎完全被占用,按鍵狀態很難被捕捉到,而且按鍵抬起識別用了wh ...

   我現在要閃燈部份 加了一個 if(k1==on)break;     現在比以前好多了,但我知道這不是最好的辦法我知道,我還是學習定時器吧!還有請問  我如何做到在規定時間里 雙擊有效!  是不是也要用到定時器呢? 麻煩給我個實例讓我學習一下 謝謝了
作者: bosschen    時間: 2018-6-3 16:50
統一回復大家,謝謝大家的幫忙P3-0 P2-1是可以用的 是我的電路有問題,謝謝大家了




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1