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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

C51通過串口實現功能切換的問題

[復制鏈接]
跳轉到指定樓層
樓主
ID:273660 發表于 2018-1-11 15:56 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
請大家幫忙看一下這個問題,不知道怎么解決。我在main中寫了break了,但是用卻沒辦法切換,應該是前一個功能開始了但是停不下來,不知道怎么解決,求大神幫幫忙!
  1. #include "liushuideng.h"
  2. #include "0832.h"
  3. #include "12864.h"
  4. #include "1302.h"
  5. #include "lcd12864.h"
  6. #include "DS1302.h"

  7. #define uchar unsigned char
  8. #define uint unsigned int

  9. uchar zhi;

  10. void zhongduan()
  11. {
  12.         SCON=0x50;
  13.         TMOD=0x20;
  14.         TH1=0xfd;
  15.         TL1=0xfd;
  16.         IE=0x90;
  17.         TR1=1;
  18. }

  19. void liushuiinit()
  20. {
  21.         COM = 0x90;
  22.         PA = 0xff;
  23.         PB = 0xff;
  24.         PC = 0xff;
  25. }

  26. void main()
  27. {
  28.         zhongduan();
  29.         while(1)
  30.         {
  31.                 if(zhi==1)
  32.                 {
  33.                         Init_LCD1602();
  34.                         while(1)
  35.                         {
  36.                                 jisuanqi();
  37.                                 if(zhi!=1)
  38.                                 {
  39.                                         break;
  40.                                 }       
  41.                         }       
  42.                 }
  43.                 else if(zhi==2)
  44.                 {
  45.                         liushuiinit();
  46.                         while(1)
  47.                         {
  48.                                 liushuideng();
  49.                                 if(zhi!=2)
  50.                                 {
  51.                                         PB=0XFF;
  52.                                         break;
  53.                                 }       
  54.                         }
  55.                 }
  56.                 else if(zhi==3)
  57.                 {
  58.                         while(1)
  59.                         {
  60.                                 m_12864();
  61.                                 if(zhi!=3)
  62.                                 {
  63.                                         break;
  64.                                 }
  65.                         }
  66.                 }               
  67.         }
  68. }
  69.          

  70.         //Init_LCD1602();
  71.         //jisuanqi();
  72.         //DS18B20();
  73.         //liushuideng();
  74.         //m_0832();
  75.         //m_12864();
  76.         //m_1302();

  77. void intser() interrupt 4
  78. {
  79.         RI=0;
  80.         zhi=SBUF;
  81. }
復制代碼


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

使用道具 舉報

沙發
ID:274922 發表于 2018-1-11 18:33 | 只看該作者
你要確定的串口數據是否正常接收到,中斷是否能進入。也可能是你的串口通信就不行。還要看看硬件。
回復

使用道具 舉報

板凳
ID:164602 發表于 2018-1-12 09:06 | 只看該作者
其實很簡單:
第一:只能有一個while(1),你好多這個死循環啊。
第二:除了主循環用while(1)外,其它的while,都用控制位,如:while(i),i=0,就不循環,i=1就循環。
第三:判斷語句就去根據條件設置如上所說的變量i,根本不需要break。
第四:break只能跳出循環,不能跳出if,所以,你的程序就死在這里了。
回復

使用道具 舉報

地板
ID:266627 發表于 2018-1-12 15:52 | 只看該作者
寫一個串口程序吧,把變量zhi打印出來吧。
zhi的判斷在程序中只有三種可能,1 2 3
如果等于4,就什么也不做。

可能是這個問題,但還是打印出來吧,一個個找原因
回復

使用道具 舉報

5#
ID:266627 發表于 2018-1-12 15:55 | 只看該作者
HC6800-ES-V2.0 發表于 2018-1-12 09:06
其實很簡單:
第一:只能有一個while(1),你好多這個死循環啊。
第二:除了主循環用while(1)外,其它的wh ...

第四:break只能跳出循環,不能跳出if,所以,你的程序就死在這里了。

if里有個WHILE循環,只要跳出WHILE,就會順序執行,自然會走出IF的語句段落
回復

使用道具 舉報

6#
ID:164602 發表于 2018-1-13 19:02 | 只看該作者
sirf3 發表于 2018-1-12 15:55
第四:break只能跳出循環,不能跳出if,所以,你的程序就死在這里了。

if里有個WHILE循環,只要跳出W ...

你知道單片機跳出循環到if用了多少時間?你能及時放開按鍵嗎?這樣想來,可能加個消抖也許就可以了
回復

使用道具 舉報

7#
ID:275955 發表于 2018-1-14 21:45 | 只看該作者
還是打印出來吧,一個個找原因
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表