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

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

QQ登錄

只需一步,快速開(kāi)始

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

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

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:97678 發(fā)表于 2024-10-11 09:38 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
#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)題?

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

使用道具 舉報(bào)

沙發(fā)
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í)會(huì)有高低波動(dòng)的電平。
回復(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è)程序合并到一起的,有一些沒(méi)有刪除干凈。
回復(fù)

使用道具 舉報(bào)

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

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

使用道具 舉報(bào)

6#
ID:484491 發(fā)表于 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
      
回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

8#
ID:1133081 發(fā)表于 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è)置。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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