久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機(jī)程序按鈕不起作用

[復(fù)制鏈接]
ID:97678 發(fā)表于 2024-10-11 09:38 | 顯示全部樓層 |閱讀模式
#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) //一開始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語句
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語句
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語句                        
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語句
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語句
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語句
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語句
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語句
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語句
break;                        
}
}
}

void Timer0Init()
{
TMOD|=0X01;//選擇為定時(shí)器0模式,工作方式1,僅用TR0打開啟動。
TH0=0XfC;//給定時(shí)器賦初值,定時(shí)1ms
TL0=0X18;
ET0=1;//打開定時(shí)器0中斷允許
EA=1;//打開總中斷
TR0=1;//打開定時(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;    //長按鍵標(biāo)志
            }
        }      
    }
}

void led_Proc()   //燈處理
{
    if((LEDON==0)&&(keyshort==1))  //關(guān)燈狀態(tài),同時(shí)長按鍵按下就開燈
    {   
        keyshort = 0;  //長按鍵松開
        LEDON = 1;    //關(guān)燈時(shí)就開燈
        LEDR = 1;     //RGB燈亮白光
        LEDG = 1;
              times = 1;
    }        
    if((LEDON==1)&&(keylong==1)) //開燈狀態(tài),同時(shí)長按鍵按下就關(guān)燈
    {   
        keylong = 0;  //長按鍵松開
        LEDON = 0;    //開燈時(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;    //長按鍵標(biāo)志
            }
        }      
    }
}

void led_Proc1()   //燈處理
{

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



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

回復(fù)

使用道具 舉報(bào)

ID:161164 發(fā)表于 2024-10-11 18:08 | 顯示全部樓層
PLC()函數(shù)內(nèi)為啥要加while(1)?
回復(fù)

使用道具 舉報(bào)

ID:1041695 發(fā)表于 2024-10-11 18:36 | 顯示全部樓層
按鍵是否做了防抖處理?按鍵按下時(shí)會有高低波動的電平。
回復(fù)

使用道具 舉報(bào)

ID:97678 發(fā)表于 2024-10-12 08:46 | 顯示全部樓層
lkc8210 發(fā)表于 2024-10-11 18:08
PLC()函數(shù)內(nèi)為啥要加while(1)?

我是把兩個(gè)程序合并到一起的,有一些沒有刪除干凈。
回復(fù)

使用道具 舉報(bào)

ID:97678 發(fā)表于 2024-10-12 08:47 | 顯示全部樓層
lei848200 發(fā)表于 2024-10-11 18:36
按鍵是否做了防抖處理?按鍵按下時(shí)會有高低波動的電平。

做了。按鈕部分獨(dú)立的測試,按鈕是可以正常的工作的。合并在一起,就不行了。
回復(fù)

使用道具 舉報(bào)

ID:484491 發(fā)表于 2024-10-12 23:51 | 顯示全部樓層
void plc()
{
    //times = 1;   
    while(1)                  
    {   
        switch(times) //一開始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)這樣寫會一直跑這個(gè)循環(huán)的,都出不去,那你的按鍵處理函數(shù)都沒有跑,按鍵自然就沒有起作用,我不知道你為什么要這樣寫,你這個(gè)程序框架簡化是這樣
while(1)
{
       ,,,,,,,,
       while(1)
       {        
        ,,,,,,,
        }
}
一直跑這個(gè)while,都沒出去,你看看怎么改掉這個(gè)while
      
回復(fù)

使用道具 舉報(bào)

ID:97678 發(fā)表于 2024-10-13 10:03 | 顯示全部樓層
ok, 刪除程序的時(shí)候,忘記刪除這里。
回復(fù)

使用道具 舉報(bào)

ID:1133081 發(fā)表于 2024-10-14 19:05 | 顯示全部樓層
jovew 發(fā)表于 2024-10-13 10:03
ok, 刪除程序的時(shí)候,忘記刪除這里。

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

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 中文字幕亚洲视频 | 99热这里都是精品 | 狠狠亚洲| 日本精品一区二区 | 成人中文字幕在线观看 | 福利视频一区 | 97超碰成人 | 视频一区二区在线观看 | 欧美日韩一区二区三区四区 | 久久久视频在线 | 欧美精品一区二区三 | 久久a久久| 超碰97在线免费 | 亚洲一区有码 | 天堂一区在线观看 | 国产精品高潮呻吟久久 | 看片wwwwwwwwwww| 日本a v在线播放 | 国产小视频自拍 | 久久夜色精品国产 | 久久一级免费视频 | 亚洲精品国产成人 | 免费精品| 成人午夜毛片 | 伊人亚洲| 国产视频第一页 | 91免费在线| 久久精品国产亚洲 | 国产一区二区成人 | 久久精品视频一区二区 | 国产女人与拘做视频免费 | 日韩有码在线观看 | 国内精品免费久久久久软件老师 | 国产一区二区三区久久久久久久久 | 男人av网| 精品1区2区3区 | 成人午夜精品 | 蜜臀久久99精品久久久久野外 | 亚洲视频在线看 | 午夜伊人| 懂色av一区二区三区在线播放 |