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

標題: 單片機公交車報站顯示程序有問題,求大佬幫忙看看指導指導 [打印本頁]

作者: 起個名真難。    時間: 2020-4-7 00:57
標題: 單片機公交車報站顯示程序有問題,求大佬幫忙看看指導指導

電路圖如上
要實現按鍵控制公交車報站顯示,按下K1顯示起點歡迎詞,按下K2顯示上一站內容,按下K3顯示下一站內容,按下K4顯示終點歡送詞,按鍵控制部分程序如下,不知道為啥仿真的時候按下K1顯示完起點詞以后就直接接著往下報了,都不停,按鍵K2、K3、K4直接是沒用了,求大佬幫忙看看程序哪出錯了,怎樣改一改
程序:
sbit K1=P3^0;
sbit K2=P3^1;
sbit K3=P3^2;
sbit K4=P3^3;
void delay(void)
{
unsigned int n;
for(n=0;n<20000;n++);
}
void main(void)
{
       unsigned char i;
        i=0;    //將i初始化為0
        while(1)
         {
         if(K1==0)
         {
                delay();  //延時一段時間 按鍵消抖
                if(K1==0)
                i=1;
          }
         if(K2==0)
         {
                delay();  //延時一段時間 按鍵消抖
                if(K2==0)
                i=i-1;
         }
         if(K3==0)
         {
                delay();  //延時一段時間 按鍵消抖
                if(K2==0)
                i=i+1;
         }
         if(K4==0)
         {
                delay();  //延時一段時間 按鍵消抖
                if(K2==0)
                i=5;
         }
         
          switch(i)  //使用多分支選擇語句
                {
    case 1: init_lcd();
Clr_Scr();
LCDMcs=0; //左屏開顯示
LCDScs=1;
Bmp_Left_Disp(0,0,Bmp1);// Bmp1為某個漢字的首地址
    Bmp_Left_Disp(4,0,Bmp2);
    LCDMcs=1; //右屏開顯示
LCDScs=0;
    Bmp_Right_Disp(0,0,Bmp1);
    Bmp_Right_Disp(4,0,Bmp2);
while(1)
                break;
     case 2: init_lcd();
Clr_Scr();
LCDMcs=0; //左屏開顯示
LCDScs=1;
Bmp_Left_Disp(0,0,Bmp3);// Bmp1為某個漢字的首地址
    Bmp_Left_Disp(4,0,Bmp4);
    LCDMcs=1; //右屏開顯示
LCDScs=0;
    Bmp_Right_Disp(0,0,Bmp3);
    Bmp_Right_Disp(4,0,Bmp4);
while(1)
                break;  
    case 3: init_lcd();
Clr_Scr();
LCDMcs=0; //左屏開顯示
LCDScs=1;
Bmp_Left_Disp(0,0,Bmp5);// Bmp1為某個漢字的首地址
    Bmp_Left_Disp(4,0,Bmp6);
    LCDMcs=1; //右屏開顯示
LCDScs=0;
    Bmp_Right_Disp(0,0,Bmp5);
    Bmp_Right_Disp(4,0,Bmp6);
while(1)
                break;  
    case 4: init_lcd();
Clr_Scr();
LCDMcs=0; //左屏開顯示
LCDScs=1;
Bmp_Left_Disp(0,0,Bmp7);// Bmp1為某個漢字的首地址
    Bmp_Left_Disp(4,0,Bmp8);
    LCDMcs=1; //右屏開顯示
LCDScs=0;
    Bmp_Right_Disp(0,0,Bmp7);
    Bmp_Right_Disp(4,0,Bmp8);
while(1)
                break;
    case 5: init_lcd();
Clr_Scr();
LCDMcs=0; //左屏開顯示
LCDScs=1;
Bmp_Left_Disp(0,0,Bmp9);// Bmp1為某個漢字的首地址
    Bmp_Left_Disp(4,0,Bmp10);
    LCDMcs=1; //右屏開顯示
LCDScs=0;
    Bmp_Right_Disp(0,0,Bmp9);
    Bmp_Right_Disp(4,0,Bmp10);
while(1)
                break;        
                }
    {
  
}
    }
}


作者: 黃youhui    時間: 2020-4-7 08:29
if(k1 == 0){}else if(k2==0){}else if(k3 == 0){}else{};
另外你switch里面每個break都市跳出他前面的while(1);所以你的switch里面每個case后面都沒有帶break,所以會一直往下
作者: 瘋子本人    時間: 2020-4-7 09:34
本帖最后由 瘋子本人 于 2020-4-7 16:49 編輯

不知道你這樣寫的目的,每個switch的每個case不用加while,直接break就好,而且最后面有個無效的括號,頭文件沒有,P3是矩陣按鍵,你可以參考參考矩陣的寫法
作者: man1234567    時間: 2020-4-7 12:58
那么多的while(1)
作者: 起個名真難。    時間: 2020-4-7 20:44
黃youhui 發表于 2020-4-7 08:29
if(k1 == 0){}else if(k2==0){}else if(k3 == 0){}else{};
另外你switch里面每個break都市跳出他前面的whi ...

我想問下怎樣實現swich語句中執行完case1后再重新判定swich表達式的值而不是繼續往下執行case2
作者: 黃youhui    時間: 2020-4-8 13:08
起個名真難。 發表于 2020-4-7 20:44
我想問下怎樣實現swich語句中執行完case1后再重新判定swich表達式的值而不是繼續往下執行case2

switch(n)
{
case 0:代碼1;break;
case 1:代碼2;break;
.
.
.
default:break;


}

作者: 黃youhui    時間: 2020-4-8 17:29
起個名真難。 發表于 2020-4-7 20:44
我想問下怎樣實現swich語句中執行完case1后再重新判定swich表達式的值而不是繼續往下執行case2

把你的while(1)去掉或者在break后面再加一個break就好了,switch檢測道case后面的break就會跳出,但是你代碼里面的break被你的while(1)抵消掉了
作者: vimli    時間: 2020-4-8 21:23
給個經典的按鍵掃描做法給你

按鍵SCAN.pdf

113.88 KB, 下載次數: 6






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