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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

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

  [復(fù)制鏈接]
回帖獎勵 5 黑幣 回復(fù)本帖可獲得 5 黑幣獎勵! 每人限 1 次
跳轉(zhuǎn)到指定樓層
樓主
ID:586048 發(fā)表于 2020-9-27 11:59 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
單片機(jī)源程序如下:
  1. /*===========================================================
  2. -------------------------------------------------------------
  3. 函數(shù)名稱: LED_Flicker LED閃爍程序
  4. 函數(shù)說明: 紅藍(lán)燈閃爍程序,固定先紅后藍(lán),每0.5s交換一次
  5. 參  數(shù)    : 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:                                                        // 紅藍(lán)燈都關(guān)閉
  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:                                                // 只亮藍(lán)燈
  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:                                                // 紅藍(lán)燈閃爍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:                                        // 紅藍(lán)燈閃爍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:                                                // 藍(lán)燈亮一秒
  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. }
復(fù)制代碼

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

感覺不可行,如果是調(diào)用的話,這個函數(shù)只在調(diào)用的時候運(yùn)行了,但是燈亮又是有一定的延時的,一定是反復(fù)執(zhí)行中,所以這種方法不太適用
回復(fù)

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

這樣只是看起來簡化了
回復(fù)

使用道具 舉報

8#
ID:367460 發(fā)表于 2020-9-29 11:33 | 只看該作者
程序的結(jié)構(gòu)復(fù)雜與否關(guān)鍵看需求, 如果想看起來簡單點可以試試將不同的代碼封裝成子函數(shù)進(jìn)行調(diào)用,這樣看起來也簡潔一點
回復(fù)

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

流程圖是可以很好的整理邏輯結(jié)構(gòu)的,挺好的建議,也建議樓主可以試試,根據(jù)流程圖看看是邏輯結(jié)構(gòu)方面來找問題會比較快啦
回復(fù)

使用道具 舉報

15#
ID:708637 發(fā)表于 2020-10-10 11:59 | 只看該作者
基本可以了,結(jié)構(gòu)也比較清晰。
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 精品久久久久久久 | а_天堂中文最新版地址 | 亚洲一区欧美 | 免费久久久 | 国产乱精品一区二区三区 | gogo肉体亚洲高清在线视 | 国产精品久久久久久久久久妇女 | 国产精品福利久久久 | 一区二区三区精品视频 | 国产成人精品区一区二区不卡 | 国产1区| 天天色综 | 中文字幕乱码亚洲精品一区 | 欧美亚洲国产一区二区三区 | 久久久久久国产精品免费免费 | 欧美精品99 | 日韩精品一区二区久久 | 精品国产乱码久久久久久牛牛 | 亚洲成人精品久久久 | 一级黄在线观看 | 久久久久久国产精品 | 最新国产福利在线 | 国产第一页在线播放 | 91精品国产乱码久久久 | 国产亚洲精品精品国产亚洲综合 | 日韩欧美在线观看一区 | 久草视频在 | 亚洲欧美中文日韩在线v日本 | 免费的一级视频 | 日本激情一区二区 | 日韩色在线| 国产人成精品一区二区三 | 精品www| 日本午夜在线视频 | 一级欧美一级日韩片 | 自拍偷拍av | 欧美日韩成人影院 | 天堂网色 | 草久久| 99精品在线观看 | 一区二区三区视频免费看 |