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

標(biāo)題: 單片機(jī)程序按鈕不起作用 [打印本頁(yè)]

作者: jovew    時(shí)間: 2024-10-11 09:38
標(biāo)題: 單片機(jī)程序按鈕不起作用
#include "stc8h.h"
#include "key.h"

    void main()
{
    Timer0Init();  //中斷初始化
   
    while(1)
    {
     key_Proc();   //按鍵處理
     led_Proc();  //燈處理
     key_Proc1();   //按鍵處理
     led_Proc1();  //燈處理        
         plc();   
    }
}

void plc()
{
//times = 1;   
while(1)
{   
switch(times) //一開(kāi)始times=1
{
    case 0:
RED_1   =0;
YELLOW_1=0;
GREEN_1 =0;
RED_2   =0;
YELLOW_2=0;
GREEN_2 =0;//位定義
GREEN_3 =0;//位定義
GREEN_4 =0;//位定義
if(ses==2){times=0;ses=0;}//s 等于0   而且回答 跳到1語(yǔ)句
break;            

case 1:   
RED_1   =1;
YELLOW_1=0;
GREEN_1 =0;
RED_2   =0;
YELLOW_2=0;
GREEN_2 =0;//位定義
GREEN_3 =0;//位定義
GREEN_4 =0;//位定義
if(ses==2){times=2;ses=0;}//s 等于0   而且回答 跳到1語(yǔ)句
break;

case 2:
RED_1   =1;
YELLOW_1=1;
GREEN_1 =0;
RED_2   =0;
YELLOW_2=0;
GREEN_2 =0;//位定義
GREEN_3 =0;//位定義
GREEN_4 =0;//位定義
if(ses==1){times=3;ses=0;}//s 等于0   而且回答 跳到1語(yǔ)句                        
break;

case 3:
RED_1   =1;
YELLOW_1=1;
GREEN_1 =1;
RED_2   =0;
YELLOW_2=0;
GREEN_2 =0;//位定義
GREEN_3 =0;//位定義
GREEN_4 =0;//位定義
if(ses==1){times=4;ses=0;}//s 等于0   而且回答 跳到1語(yǔ)句
break;

case 4:
RED_1   =1;
YELLOW_1=1;
GREEN_1 =1;
RED_2   =1;
YELLOW_2=0;
GREEN_2 =0;//位定義
GREEN_3 =0;//位定義
GREEN_4 =0;//位定義  
if(ses==1){times=5;ses=0;}//s 等于0   而且回答 跳到1語(yǔ)句
break;

case 5:   
RED_1   =1;
YELLOW_1=1;
GREEN_1 =1;
RED_2   =1;
YELLOW_2=1;
GREEN_2 =0;//位定義
GREEN_3 =0;//位定義
GREEN_4 =0;//位定義
if(ses==1){times=6;ses=0;}//s 等于0   而且回答 跳到1語(yǔ)句
break;

case 6:
RED_1   =1;
YELLOW_1=1;
GREEN_1 =1;
RED_2   =1;
YELLOW_2=1;
GREEN_2 =1;//位定義
GREEN_3 =0;//位定義
GREEN_4 =0;//位定義
if(ses==2){times=7;ses=0;}//s 等于0   而且回答 跳到1語(yǔ)句
break;
                        
case 7:
RED_1   =1;
YELLOW_1=1;
GREEN_1 =1;
RED_2   =1;
YELLOW_2=1;
GREEN_2 =1;//位定義
GREEN_3 =1;//位定義
GREEN_4 =0;//位定義
if(ses==2){times=8;ses=0;}//s 等于0   而且回答 跳到1語(yǔ)句
break;

case 8:
RED_1   =1;
YELLOW_1=1;
GREEN_1 =1;
RED_2   =1;
YELLOW_2=1;
GREEN_2 =1;//位定義
GREEN_3 =1;//位定義
GREEN_4 =1;//位定義
if(ses==2){times=1;ses=0;}//s 等于0   而且回答 跳到1語(yǔ)句
break;                        
}
}
}

void Timer0Init()
{
TMOD|=0X01;//選擇為定時(shí)器0模式,工作方式1,僅用TR0打開(kāi)啟動(dòng)。
TH0=0XfC;//給定時(shí)器賦初值,定時(shí)1ms
TL0=0X18;
ET0=1;//打開(kāi)定時(shí)器0中斷允許
EA=1;//打開(kāi)總中斷
TR0=1;//打開(kāi)定時(shí)器
}


void interruptTimer0() interrupt 1
{
    TH0 = 0XFC;
    TL0 = 0X66;
   
    flag1ms = 1; //1ms標(biāo)志
      flag1ms1 = 1; //1ms標(biāo)志

    sess++; //毫秒
   
    if(sess==1000) //1000毫秒 =1s
    {
      sess=0;//ms 等于0
      ses++; //s 加1
   
    }
    }

void key_Proc()    //按鍵處理
{
    if(flag1ms)  //1ms時(shí)間標(biāo)志
    {
        flag1ms = 0;
        if(KEY0)
        {
            if((keyTim>10)&&(keyTim<2000))  //按鍵時(shí)間大于10ms小于50ms,是短按鍵
            {
            keyshort = 1;   //短按鍵標(biāo)志
            }
            keyTim = 0;        //按鍵時(shí)間清零
        }
        else
        {
            if(keyTim<2001)    //按鍵時(shí)間小于10S
            keyTim++;           //按鍵時(shí)間加
            if(keyTim==2000)    //按鍵時(shí)間為1S
            {
            keylong = 1;    //長(zhǎng)按鍵標(biāo)志
            }
        }      
    }
}

void led_Proc()   //燈處理
{
    if((LEDON==0)&&(keyshort==1))  //關(guān)燈狀態(tài),同時(shí)長(zhǎng)按鍵按下就開(kāi)燈
    {   
        keyshort = 0;  //長(zhǎng)按鍵松開(kāi)
        LEDON = 1;    //關(guān)燈時(shí)就開(kāi)燈
        LEDR = 1;     //RGB燈亮白光
        LEDG = 1;
              times = 1;
    }        
    if((LEDON==1)&&(keylong==1)) //開(kāi)燈狀態(tài),同時(shí)長(zhǎng)按鍵按下就關(guān)燈
    {   
        keylong = 0;  //長(zhǎng)按鍵松開(kāi)
        LEDON = 0;    //開(kāi)燈時(shí)就關(guān)燈
        LEDR = 0;     //RGB燈滅
        LEDG = 0;
              times = 0;
    }

}

void key_Proc1()    //按鍵處理
{
    if(flag1ms1)  //1ms時(shí)間標(biāo)志
    {
        flag1ms1 = 0;
        if(KEY1)
        {
            if((keyTim1>10)&&(keyTim1<2000))  //按鍵時(shí)間大于10ms小于50ms,是短按鍵
            {
                keyshort1 = 1;   //短按鍵標(biāo)志
            }
            keyTim1 = 0;        //按鍵時(shí)間清零
        }
        else
        {
            if(keyTim1<2001)    //按鍵時(shí)間小于10S
            keyTim1++;           //按鍵時(shí)間加
            if(keyTim1==2000)    //按鍵時(shí)間為1S
            {
                keylong1 = 1;    //長(zhǎng)按鍵標(biāo)志
            }
        }      
    }
}

void led_Proc1()   //燈處理
{

    if((LEDON==1)&&(keylong==0))  //關(guān)燈狀態(tài),同時(shí)長(zhǎng)按鍵按下就開(kāi)燈
    {   
        keyshort1 = 0;  //長(zhǎng)按鍵松開(kāi)
        LEDB = 1;
        LEDW = 1;        
              times1=1;
    }        
   
    if((LEDON==1)&&(keylong1==1)) //開(kāi)燈狀態(tài),同時(shí)長(zhǎng)按鍵按下就關(guān)燈
    {   
        keylong1 = 0;  //長(zhǎng)按鍵松開(kāi)
        LEDB = 0;
              LEDW = 0;
              times1=0;
    }
}



   
    這個(gè)程序有什么問(wèn)題?


作者: lkc8210    時(shí)間: 2024-10-11 18:08
PLC()函數(shù)內(nèi)為啥要加while(1)?
作者: lei848200    時(shí)間: 2024-10-11 18:36
按鍵是否做了防抖處理?按鍵按下時(shí)會(huì)有高低波動(dòng)的電平。
作者: jovew    時(shí)間: 2024-10-12 08:46
lkc8210 發(fā)表于 2024-10-11 18:08
PLC()函數(shù)內(nèi)為啥要加while(1)?

我是把兩個(gè)程序合并到一起的,有一些沒(méi)有刪除干凈。
作者: jovew    時(shí)間: 2024-10-12 08:47
lei848200 發(fā)表于 2024-10-11 18:36
按鍵是否做了防抖處理?按鍵按下時(shí)會(huì)有高低波動(dòng)的電平。

做了。按鈕部分獨(dú)立的測(cè)試,按鈕是可以正常的工作的。合并在一起,就不行了。
作者: liang45    時(shí)間: 2024-10-12 23:51
void plc()
{
    //times = 1;   
    while(1)                  
    {   
        switch(times) //一開(kāi)始times=1
        {
            case 0:
        RED_1   =0;
        YELLOW_1=0;
        GREEN_1 =0;
        RED_2   =0;
        YELLOW_2=0;
        GREEN_2 =0;//位定義


你這個(gè)while(1)這樣寫(xiě)會(huì)一直跑這個(gè)循環(huán)的,都出不去,那你的按鍵處理函數(shù)都沒(méi)有跑,按鍵自然就沒(méi)有起作用,我不知道你為什么要這樣寫(xiě),你這個(gè)程序框架簡(jiǎn)化是這樣
while(1)
{
       ,,,,,,,,
       while(1)
       {        
        ,,,,,,,
        }
}
一直跑這個(gè)while,都沒(méi)出去,你看看怎么改掉這個(gè)while
      
作者: jovew    時(shí)間: 2024-10-13 10:03
ok, 刪除程序的時(shí)候,忘記刪除這里。
作者: WL0123    時(shí)間: 2024-10-14 19:05
jovew 發(fā)表于 2024-10-13 10:03
ok, 刪除程序的時(shí)候,忘記刪除這里。

如果芯片確實(shí)是使用的ST8H;并且在key.h文件里沒(méi)有對(duì)端口模式設(shè)置。很可能是按鍵所使用的端口處于芯片默認(rèn)的高阻模式。需要對(duì)相應(yīng)端口進(jìn)行初始化設(shè)置。




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