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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6732|回復: 5
收起左側

當按下s1開關按鍵時數碼管顯示1 的單片機程序有問題應該怎么解決?

[復制鏈接]
ID:354566 發表于 2018-6-21 13:42 | 顯示全部樓層 |閱讀模式
程序目的是為了實現:當按下s1開關按鍵時數碼管顯示1;按下s2開關按鍵時數碼管顯示2;按下s3開關按鍵時,數碼管顯示0。程序顯示無錯誤i,但現象只有當按下s1開關按鍵時數碼管顯示1,且滅不了,按其他鍵沒反應,想知道為什么。下面是程序:
#include"reg52.h"
typedef unsigned char u8;
typedef unsigned int u16;
                                                                                                           
sbit LSA=P2^2;
sbit k1=P3^1;
sbit k2=P3^0;
sbit k3=P3^2;
u8 code smgduan[]={0x3f , 0x06 , 0x5b , 0x4f , 0x66 , 0x6d , 0x7d , 0x07 ,
                   0x7f , 0x6f , 0x77 , 0x7c ,0x39 , 0x5e , 0x79 , 0x71 };
void delay(u16 i)
{
    while (i--);
}                                     // 延時
void keypros()
{
  if (k1==0)                 //S1開關
   {
  delay(1000);                 //防抖動
  if(k1==0)
    {
  P0=smgduan[1];     //顯示1
    }
  }
  while(!k1)             //顯示1模塊
if (k2==0)                         //S2開關
  {
  delay(1000);                 //防抖動
  if(k2==0)
  {
  P0=smgduan[2];     //顯示2
  }
  }
     while(!k2)             //顯示2模塊
  if (k3==0)                 //S3開關
  {
  delay(1000);                 //防抖動
  if(k3==0)
  {
  P0=smgduan[0];     //顯示0
  }
  }
    while(!k3);             //顯示0模塊
}                                          
void main()
{           
   LSA=1;
while(1)
                {
                 keypros();
                }
               
}

回復

使用道具 舉報

ID:194257 發表于 2018-6-21 14:38 | 顯示全部樓層
你的程序應該是停在了這句:while(!k1)
回復

使用道具 舉報

ID:330198 發表于 2018-6-21 15:02 | 顯示全部樓層
360截圖20180621150121586.jpg
你while用的太多了,直接去掉也是一樣的效果

評分

參與人數 1黑幣 +5 收起 理由
hpy1997 + 5 贊一個!

查看全部評分

回復

使用道具 舉報

ID:356569 發表于 2018-6-22 09:35 來自觸屏版 | 顯示全部樓層
建議把按鍵寫成一個帶返回值的函數,然后再在主函數主循環里寫,這樣結構很清晰,以后任何需要用到按鍵的時候都可以直接復制。

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:319344 發表于 2018-6-22 12:40 | 顯示全部樓層
你想實現的是當按下一個鍵的時候只有一個亮,當同時按下兩個或多個按鍵的時候只有一個亮對吧,你的問題是while(!K1),然后就沒有然后了,我看不懂它會接下來怎么執行,改的話也比較簡單,while(!k1);  或者while(!k1){},當按下一個鍵之后,就會死循環,不會去判斷其它鍵是否按下了

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:346616 發表于 2018-6-22 15:58 | 顯示全部樓層
一定要學會調試,不然以后程序大了很麻煩,
你的問題出現在松手檢測while(!k1)  和 while(!k2) 后面沒有打分號,
使得與下方語句形成亂七八糟嵌套造成不明錯誤。
松手語句的意思,就是停止在當前這一句,C語言里面的分號是語句結束的重要標識。
還有,要保持一個良好的編碼習慣,松手檢測語句最好寫在上一個語句后面,越過幾個括號不是一個好風格。

評分

參與人數 1黑幣 +80 收起 理由
admin + 80 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一级黄色绿像片 | 精品国产乱码久久久久久蜜臀 | 在线一区二区三区 | 国产免费国产 | 精品国产一区久久 | 日韩在线 | 亚洲一区二区三区在线 | 欧美日韩亚洲国产 | 成人亚洲在线 | aa级毛片毛片免费观看久 | 国产一区免费 | 亚洲美女一区 | 国产精品91视频 | 国产一区二区电影 | 国产精品视频一区二区三区, | 久草在线| 欧美一区二区三区在线观看视频 | 精品一区二区三区在线观看国产 | 99精品一级欧美片免费播放 | 国产一区二区三区视频在线观看 | 免费av电影网站 | 欧美日一区二区 | av影音资源 | 精品伊人 | 91 在线 | 国产成人久久精品 | 日韩欧美国产精品 | 国产精品区二区三区日本 | 国产成年人小视频 | 国产视频1区2区 | 成人精品久久日伦片大全免费 | 中文字幕在线观看视频网站 | 91不卡在线 | 国产精品自拍av | 久久久久久国产 | 国产1区2区 | 看片网站在线 | 亚洲国产日韩一区 | 中文字幕在线电影观看 | 在线精品一区二区三区 | 久久久精品一区 |