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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

求解,這種單片機LED閃爍程序要怎么簡化才好,感覺寫的好多.

  [復制鏈接]
回帖獎勵 5 黑幣 回復本帖可獲得 5 黑幣獎勵! 每人限 1 次
跳轉到指定樓層
樓主
ID:586048 發表于 2020-9-27 11:59 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
單片機源程序如下:
  1. /*===========================================================
  2. -------------------------------------------------------------
  3. 函數名稱: LED_Flicker LED閃爍程序
  4. 函數說明: 紅藍燈閃爍程序,固定先紅后藍,每0.5s交換一次
  5. 參  數    : Flicker_num
  6. 輸入變量: 無
  7. 輸出變量: 無
  8. 注意事項:
  9. -------------------------------------------------------------
  10. =============================================================*/
  11. void LED_Flicker()
  12. {
  13.         if(LED_status_old != LED_status)
  14.         {
  15.                 LED_status_old = LED_status;
  16.                 Timer.Flag_500ms = 1;
  17.                 TimerCount.C100ms_5ci = 0;
  18.                 Flicker_count = 0;
  19.                 Flicker_Flag = 0;
  20.         }
  21.         if(Timer.Flag_500ms)
  22.         {
  23.                 Timer.Flag_500ms = 0;
  24.                 switch (LED_status)
  25.                 {
  26.                         case B_R_OFF:                                                        // 紅藍燈都關閉
  27.                                 LED_Blue = Blue_off;
  28.                                 LED_Red  = Red_off;
  29.                                 Flicker_count = 0;
  30.                                 Flicker_Flag = 0;
  31.                         break;
  32.         
  33.                         case Blue_Light:                                                // 只亮藍燈
  34.                                 LED_Blue = Blue_on;
  35.                                 LED_Red  = Red_off;
  36.                         break;
  37.                         
  38.                         case Red_Light:                                                        // 只亮紅燈
  39.                                 LED_Blue = Blue_off;
  40.                                 LED_Red  = Red_on;
  41.                         break;

  42.                         case R_B_Flicker_1:                                                // 紅藍燈閃爍1次
  43.                                 
  44.                                 if(Flicker_Flag == 0)
  45.                                 {
  46.                                         Flicker_Flag = 1;
  47.                                         LED_Blue = Blue_off;
  48.                                         LED_Red  = Red_on;
  49.                                 }
  50.                                 else
  51.                                 {
  52.                                         Flicker_Flag = 0;
  53.                                         LED_Blue = Blue_on;
  54.                                         LED_Red  = Red_off;
  55.                                 }
  56.                                 Flicker_count++;
  57.                                 if(Flicker_count > 2)
  58.                                 {
  59.                                         Flicker_count = 0;
  60.                                         LED_status = 0;
  61.                                 }
  62.                         break;

  63.                         case R_B_Flicker_15:                                        // 紅藍燈閃爍15次
  64.                                 Flicker_count++;
  65.                                 if(Flicker_count >= 30)
  66.                                 {
  67.                                         Flicker_count = 0;
  68.                                         LED_status = 0;
  69.                                 }
  70.                                 if(Flicker_Flag == 0)
  71.                                 {
  72.                                         Flicker_Flag = 1;
  73.                                         LED_Blue = Blue_off;
  74.                                         LED_Red  = Red_on;
  75.                                 }
  76.                                 else
  77.                                 {
  78.                                         Flicker_Flag = 0;
  79.                                         LED_Blue = Blue_on;
  80.                                         LED_Red  = Red_off;
  81.                                 }
  82.                         break;

  83.                         case R_Flicker_10:                                                // 紅燈閃爍10次
  84.                                 LED_Blue = Blue_off;
  85.                                 LED_Red  = ~LED_Red;
  86.                                 Flicker_count++;
  87.                                 if(Flicker_count >= 20)
  88.                                 {
  89.                                         Flicker_count = 0;
  90.                                         LED_status = 0;
  91.                                 }
  92.                         break;

  93.                         case Blue_Light_1s:                                                // 藍燈亮一秒
  94.                                 LED_Blue = Blue_on;
  95.                                 LED_Red  = Red_off;
  96.                                 Flicker_count++;
  97.                                 if(Flicker_count >= 2)
  98.                                 {
  99.                                         Flicker_count = 0;
  100.                                         LED_status = 0;
  101.                                 }
  102.                         break;

  103.                         case Red_Light_5s:                                                // 紅燈亮5s
  104.                                 LED_Blue = Blue_off;
  105.                                 LED_Red  = Red_on;
  106.                                 Flicker_count++;
  107.                                 if(Flicker_count >= 10)
  108.                                 {
  109.                                         Flicker_count = 0;
  110.                                         LED_status = 0;
  111.                                 }
  112.                         break;
  113.                         
  114.                         default:
  115.                                 LED_status = 0;
  116.                         break;
  117.                 }
  118.         }
  119.         
  120. }
復制代碼

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

使用道具 舉報

沙發
ID:586048 發表于 2020-9-27 12:04 | 只看該作者
這一段要怎么去掉才好,因為有一個按鍵,按下去就要立即反應,有什么比較好的方法來實現.注意:這個500ms標志我不想去掉,換成一百毫秒確實會變快,但是閃爍是固定500ms閃爍一次的,不想在多加變量了,空間有限.當然,如果有合適的方法都可以提出來,哪怕加了變量,我可以參考參考
回復

使用道具 舉報

板凳
ID:553941 發表于 2020-9-27 14:30 | 只看該作者
感覺可以寫一個函數,通過輸入變量,判斷亮哪個燈,以及間隔時間,需要使用的時候調用此函數,應該可以簡化一些重復的代碼。
回復

使用道具 舉報

地板
ID:586048 發表于 2020-9-27 14:54 | 只看該作者
13303022280 發表于 2020-9-27 14:30
感覺可以寫一個函數,通過輸入變量,判斷亮哪個燈,以及間隔時間,需要使用的時候調用此函數,應該可以簡化 ...

感覺不可行,如果是調用的話,這個函數只在調用的時候運行了,但是燈亮又是有一定的延時的,一定是反復執行中,所以這種方法不太適用
回復

使用道具 舉報

5#
ID:739545 發表于 2020-9-27 15:37 | 只看該作者
畫個流程圖,根據流程圖判斷是否能夠簡化。
回復

使用道具 舉報

6#
ID:584814 發表于 2020-9-28 09:06 | 只看該作者
從結構化上看很規范沒毛病也很難減。感覺從簡的角度就不要搞那么多變量標記直接0和1就簡了。
回復

使用道具 舉報

7#
ID:586048 發表于 2020-9-28 10:18 | 只看該作者
man1234567 發表于 2020-9-28 09:06
從結構化上看很規范沒毛病也很難減。感覺從簡的角度就不要搞那么多變量標記直接0和1就簡了。

這樣只是看起來簡化了
回復

使用道具 舉報

8#
ID:367460 發表于 2020-9-29 11:33 | 只看該作者
程序的結構復雜與否關鍵看需求, 如果想看起來簡單點可以試試將不同的代碼封裝成子函數進行調用,這樣看起來也簡潔一點
回復

使用道具 舉報

9#
ID:808634 發表于 2020-10-8 19:26 | 只看該作者
做.h文件,這樣就不會顯得主函數太臃腫
回復

使用道具 舉報

10#
ID:827243 發表于 2020-10-9 15:23 | 只看該作者
如果你只要求  函數說明: 紅藍燈閃爍程序,固定先紅后藍,每0.5s交換一次, 那只要保留 case R_B_Flicker_1:                                                // 紅藍燈閃爍1次  即可,如果還要其他要求,這個代碼沒啥好優化了。
回復

使用道具 舉報

11#
ID:451718 發表于 2020-10-9 17:20 | 只看該作者
這個程序,結構清晰,描述詳盡,易于移植,方便修改。是標準的簡易范例了。  等你做多幾個項目后明白了,這樣的程序,絕對可以當成模塊來用。  
回復

使用道具 舉報

12#
ID:827215 發表于 2020-10-9 18:20 | 只看該作者
加一個定時器,只負責計數,單數則是亮紅燈,偶數亮藍燈。那么在我看來,三個部分就可以,一個定時器計數,一個判斷條件紅燈亮,一個判斷條件藍燈亮。(這個判斷條件指的是判斷計數器的數)至于你說的什么按鍵,我沒懂意思,如果是按下按鍵起什么額外作用,那可以加外部中斷。
回復

使用道具 舉報

13#
ID:235954 發表于 2020-10-10 08:25 | 只看該作者
定時器里面LED=!LED;
回復

使用道具 舉報

14#
ID:827643 發表于 2020-10-10 11:05 | 只看該作者
lovezjf234 發表于 2020-9-27 15:37
畫個流程圖,根據流程圖判斷是否能夠簡化。

流程圖是可以很好的整理邏輯結構的,挺好的建議,也建議樓主可以試試,根據流程圖看看是邏輯結構方面來找問題會比較快啦
回復

使用道具 舉報

15#
ID:708637 發表于 2020-10-10 11:59 | 只看該作者
基本可以了,結構也比較清晰。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 爱爱免费视频 | 91国语清晰打电话对白 | 欧美一区二区在线播放 | 国产精品无码永久免费888 | 伊人网站视频 | 在线观看国产视频 | 亚洲精品永久免费 | 色综合欧美| 成人在线免费电影 | 亚洲一区二区三区 | 久久国产精品久久久久 | 最新日韩精品 | hdfreexxxx中国妞 | 精品国产乱码久久久久久1区2区 | 国产精品国产精品国产专区不片 | 韩国av网站在线观看 | 久久精品中文字幕 | 91精品在线播放 | 国产一区二 | 在线欧美激情 | 91看片| 色性av| 成人精品国产 | 97超级碰碰| 亚洲视频一区在线观看 | 日本久久www成人免 成人久久久久 | 91久久精品国产91久久性色tv | www.99热这里只有精品 | 日本天天操 | 亚洲高清免费观看 | 欧美激情精品久久久久久 | 91麻豆精品一区二区三区 | 狠狠插狠狠操 | 国产精品一二三区 | av国产精品 | 欧美一区二区三区久久精品 | 国产99热精品 | 亚洲成人一区二区三区 | 日日夜夜精品视频 | 成人1区2区 | 免费一级黄色录像 |