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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 999|回復: 7
打印 上一主題 下一主題
收起左側

單片機程序按鈕不起作用

[復制鏈接]
跳轉到指定樓層
樓主
ID:97678 發表于 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;//選擇為定時器0模式,工作方式1,僅用TR0打開啟動。
TH0=0XfC;//給定時器賦初值,定時1ms
TL0=0X18;
ET0=1;//打開定時器0中斷允許
EA=1;//打開總中斷
TR0=1;//打開定時器
}


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

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

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

void led_Proc()   //燈處理
{
    if((LEDON==0)&&(keyshort==1))  //關燈狀態,同時長按鍵按下就開燈
    {   
        keyshort = 0;  //長按鍵松開
        LEDON = 1;    //關燈時就開燈
        LEDR = 1;     //RGB燈亮白光
        LEDG = 1;
              times = 1;
    }        
    if((LEDON==1)&&(keylong==1)) //開燈狀態,同時長按鍵按下就關燈
    {   
        keylong = 0;  //長按鍵松開
        LEDON = 0;    //開燈時就關燈
        LEDR = 0;     //RGB燈滅
        LEDG = 0;
              times = 0;
    }

}

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

void led_Proc1()   //燈處理
{

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



   
    這個程序有什么問題?

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

使用道具 舉報

沙發
ID:161164 發表于 2024-10-11 18:08 | 只看該作者
PLC()函數內為啥要加while(1)?
回復

使用道具 舉報

板凳
ID:1041695 發表于 2024-10-11 18:36 | 只看該作者
按鍵是否做了防抖處理?按鍵按下時會有高低波動的電平。
回復

使用道具 舉報

地板
ID:97678 發表于 2024-10-12 08:46 | 只看該作者
lkc8210 發表于 2024-10-11 18:08
PLC()函數內為啥要加while(1)?

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

使用道具 舉報

5#
ID:97678 發表于 2024-10-12 08:47 | 只看該作者
lei848200 發表于 2024-10-11 18:36
按鍵是否做了防抖處理?按鍵按下時會有高低波動的電平。

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

使用道具 舉報

6#
ID:484491 發表于 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;//位定義


你這個while(1)這樣寫會一直跑這個循環的,都出不去,那你的按鍵處理函數都沒有跑,按鍵自然就沒有起作用,我不知道你為什么要這樣寫,你這個程序框架簡化是這樣
while(1)
{
       ,,,,,,,,
       while(1)
       {        
        ,,,,,,,
        }
}
一直跑這個while,都沒出去,你看看怎么改掉這個while
      
回復

使用道具 舉報

7#
ID:97678 發表于 2024-10-13 10:03 | 只看該作者
ok, 刪除程序的時候,忘記刪除這里。
回復

使用道具 舉報

8#
ID:1133081 發表于 2024-10-14 19:05 | 只看該作者
jovew 發表于 2024-10-13 10:03
ok, 刪除程序的時候,忘記刪除這里。

如果芯片確實是使用的ST8H;并且在key.h文件里沒有對端口模式設置。很可能是按鍵所使用的端口處于芯片默認的高阻模式。需要對相應端口進行初始化設置。
回復

使用道具 舉報

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

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩精品在线一区 | 久久久高清 | 国产精品免费一区二区三区四区 | 99在线视频观看 | 欧美精品在线一区 | 欧美日韩久久精品 | 亚洲高清在线 | 亚洲一区视频 | 色婷婷亚洲国产女人的天堂 | 最新国产在线 | 国产亚洲一区二区三区在线观看 | 在线观看www | 成人免费在线电影 | 亚洲一区网站 | 久久大| 欧美精品一区二区三区在线四季 | 欧美日韩一卡 | 成人在线观看免费 | 亚洲午夜久久久 | 久久精品91久久久久久再现 | 国产精品久久久久久久久久妇女 | 天天操天天操 | 在线免费观看黄a | 狠狠操天天操 | 久久视频精品 | 最新中文字幕久久 | av中文字幕在线观看 | 福利一区在线观看 | 综合色站导航 | 91精品一区二区 | 99综合在线 | 亚洲色图综合 | 色婷婷综合久久久中字幕精品久久 | 久久久久成人精品 | 国产蜜臀97一区二区三区 | 精品视频一区二区三区在线观看 | 国产成人精品免高潮在线观看 | 久久久久久国产一区二区三区 | 欧美日韩亚洲国产 | 中文字幕一区在线 | 综合久久综合久久 |