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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機洞洞板心形流水燈制作

[復制鏈接]
跳轉到指定樓層
樓主
本帖最后由 chinayanhui 于 2020-2-23 00:07 編輯

學習單片機的小學生第一次發帖,不足之處還請高人指正。


這期間,實再無聊,在網上看一些電子制作的視頻。看了一個群主自己做了一個心形流水燈,效果實再不錯,但是看到他寫的代碼,就是覺得太亂。不成系統,一大堆的數組組織起來的代碼,沒有注釋,看的讓人著實不爽。

頻中的代碼片段:







是不是看得有點暈?

正好家里還有幾塊洞洞板和LED燈,用了兩天時間,加上代碼總算是搞定了。旨當給孩子的玩具了,孩子也比較喜歡。

先看一個效果視頻:
視頻.7z (5.26 MB, 下載次數: 5)

相關圖片:















由于手頭只有7*9的板子,用了26個LED,光拼這個心形就用了近一個半小時的時間。看似簡單,拼起來要考慮線的走向等等問題。



手頭還有幾只STC98C52RC,占用了P1, P2, P3和ALE(4.5)以及4.6管腳。為啥不用P0腳?因為想起了要接上拉電阻,手頭又沒有,所以干脆沒有用。雖然我的LED是共陽接法。。。其實是為了以后擴展用的


因為是用3節1.5V的電池帶動,為了能亮一些,所以限流電阻接了100歐的。


流水燈嘛就是一堆IO口的輸出,沒啥復雜的,是51單片機初學者的Hello World,復雜之處在于設計led流水燈的算法。筆者因為是從軟件轉過來的,雖然在PC端有一大堆的內存可以使用,但是學習單片機,面對只有幾百之字的內存和幾K的存儲空間。但是從算法上節約程序空間是筆者的習慣。另外程序看得也明白。主要是不想用一大堆數組,一堆看的頭疼的循環加套循環,只想設計幾個函數,解決問題。最終編譯出來,程序代碼686字節,占用內存23.0,我自己還能接受。


還有一些效果有些思路,但是真是沒有時間寫了,有興趣的壇友可以在我的思路上完善。因為LED較多,代碼中沒有使用循環左右移的代碼。覺得用unsign long左右移動就足夠了。當然程序中也注釋了一段筆者參考網上的uint32的循環左右移的代碼,供有興趣的壇友參考。

另外由于不需要精確定時也為了寫程序方便,沒有使用定時器,僅用了一個軟件延時。有興趣的壇友可以使用定時器試一下哈。

單片機代碼如下:
  1. #include "STC89C5xRC.H"

  2. #define int8 char
  3. #define uint8 unsigned char
  4. #define uint16 unsigned short
  5. #define uint32 unsigned long
  6.         
  7. #define FUNJMP        79                // 函數跳轉延時
  8. #define TIME         100                // 語句間延時

  9. /**********************************
  10. 函數功能:軟件延時
  11. 入口參數:
  12.         count uint16 軟件延時的毫秒數

  13. 返    回:無
  14. 備    注:無
  15. **********************************/
  16. void Delay(uint16 count)
  17. {
  18.         uint16 i;
  19.         uint8 j;
  20.         for(i = count; i > 0; i--)
  21.                 for(j = 110; j > 0; j--);
  22. }

  23. /**********************************
  24. 函數功能:全亮閃爍
  25. 入口參數:
  26.         count uint8  閃爍次數
  27.         ms          uint16 閃爍時停留的毫秒數

  28. 返    回:無
  29. 備    注:無
  30. **********************************/
  31. void Flash(uint8 count, uint16 ms)
  32. {
  33.         uint8 i;
  34.         
  35.         for(i = 0; i < count * 2; i++)
  36.         {
  37.                 P1 = ~P1;
  38.                 P2 = ~P2;
  39.                 P3 = ~P3;
  40.                 P4 = ~P4;
  41.                
  42.                 Delay(ms);
  43.         }
  44. }

  45. /**********************************
  46. 函數功能:
  47.         循環移動無符號數

  48. 入口參數:
  49.         uint32 val                待移動的數
  50.         uint8  count        移動的位數

  51. 返    回:移動的結果
  52. 備    注:
  53.         count < 0,左移
  54.         count > 0, 右移
  55. **********************************/
  56. //uint32 CycleShift(uint32 val, int8 count)
  57. //{
  58. //        uint32 temp = 0;
  59. //        
  60. //        if(count == 0)
  61. //                return val;
  62. //        
  63. //        temp |= val;
  64. //        
  65. //        if(count < 0)
  66. //        {
  67. //                val <<= -count;
  68. //                temp >>= (32 + count);
  69. //        }
  70. //        else
  71. //        {
  72. //                val >>= count;
  73. //                temp <<= (32 - count);
  74. //        }
  75. //        
  76. //        return val | temp;
  77. //}

  78. /**********************************
  79. 函數功能:根據參數設定LED的亮燈
  80. 入口參數:
  81.         value uint32 設定led亮燈的數據
  82.         
  83. 返    回:無
  84. 備    注:無
  85. **********************************/
  86. void LED(uint32 value)
  87. {
  88.         P1 = value & 0xFF;
  89.         P3 = (value & 0xFF00) >> 8;
  90.         P2 = (value & 0xFF0000) >> 16;
  91.         P44 = (value & 0x1000000) >> 24;
  92.         P45 = (value & 0x2000000) >> 25;
  93. }

  94. /**********************************
  95. 函數功能:流水燈
  96. 入口參數:
  97.         value uint8        流水燈初值(0.逆時針  1.順時針)
  98.         isOff uint8 是否關閉流過的燈(1.關閉  0.不關閉)
  99.         
  100. 返    回:無
  101. 備    注:無
  102. **********************************/
  103. void Assembly(uint32 value, uint8 style)
  104. {
  105.         uint8 i;

  106.         for(i = 0; i < 26; i++)
  107.         {
  108.                 LED(value);
  109.                
  110.                 // 第7位為1,則為順時針,否則為逆時針
  111.                 if((style & 0x80) == 0x80)
  112.                         value <<= 1;
  113.                 else
  114.                         value >>= 1;
  115.                
  116.                 // 第0位為1則為單個流水燈(為0則是亮過的不再熄滅)
  117.                 if((style & 1) == 1)
  118.                         value++;
  119.                
  120.                 // 第1位為1則為順時針逐個滅燈
  121.                 if((style & 2) == 2)
  122.                         value |= 1;
  123.                
  124.                 // 第5位為1則為逆時針單個燈
  125.                 if((style & 0x10) == 0x10)
  126.                         value |= 0x2000000;
  127.                
  128.                 Delay(TIME);
  129.         }
  130. }

  131. /**********************************
  132. 函數功能:雙向流水燈
  133. 入口參數:
  134.         dir uint8 0.雙向點亮(從上到下)  1.雙向熄滅(從上到下)

  135. 返    回:無
  136. 備    注:無
  137. **********************************/
  138. void Assembly2(uint8 dir)
  139. {
  140.         uint8 i;
  141.         uint16 clockwise;
  142.         uint16 anticlockwise;
  143.         
  144.         Delay(TIME);
  145.         
  146.         clockwise = 0x1FFE;
  147.         anticlockwise = 0x1FFF;
  148.         for(i = 0; i < 14; i++)
  149.         {
  150.                 uint32 temp = anticlockwise;
  151.                 temp = temp << 13;
  152.                 temp = temp | (clockwise & 0x1FFE);
  153.                
  154.                 if(dir)
  155.                         temp = ~temp;
  156.                
  157.                 LED(temp);
  158.                
  159.                 clockwise = clockwise << 1;
  160.                 anticlockwise = anticlockwise >> 1;
  161.                 Delay(TIME);
  162.         }
  163. }

  164. void main()
  165. {
  166.         while(1)
  167.         {
  168.                                 
  169.                 //Delay(FUNJMP);
  170.                
  171.                
  172.                
  173.                 // 全滅的狀態下順時針逐個流水亮燈
  174.                 Assembly(0xFFFFFFFE, 0x81);
  175.                
  176.                 // 全滅的狀態下順時針堆積亮燈
  177.                 Delay(FUNJMP);
  178.                 Assembly(0xFFFFFFFE, 0x80);
  179.                
  180.                 // 全亮狀態下順時針逐個堆積滅燈
  181.                 //P1 = 0xFF;
  182.                 Delay(FUNJMP);
  183.                 Assembly(1, 0x82);
  184.                
  185.                 // 全滅狀態下逆時針逐個流水亮燈
  186.                 Delay(FUNJMP);
  187.                 Assembly(0x1FFFFFF, 0x10);
  188.                
  189.                 // 逆時針逐個堆積亮燈
  190.                 Delay(FUNJMP);
  191.                 Assembly(0x1FFFFFF, 0x00);
  192.                
  193.                 // 全亮的狀態下逆時針堆積滅燈
  194.                 Delay(FUNJMP);
  195.                 Assembly(0x2000000, 0x10);
  196.                
  197.                 // 兩邊點亮
  198.                 Delay(FUNJMP);
  199.                 Assembly2(0);
  200.                
  201.                 // 兩邊收縮
  202.                 Delay(FUNJMP);
  203.                 Assembly2(1);
  204.                
  205.                 // 閃爍
  206.                 Delay(FUNJMP);
  207.                 Flash(3, FUNJMP - 10);
  208.                
  209.                 Delay(3000);
  210.         }
  211. }
復制代碼



洞洞板的設計比較簡單,為了美觀,用了兩塊洞洞板,一個板子上是共陽的26根LED,另一塊板子放單片機,晶振,然后是一堆插針。



洞洞板的設計:










51hei.png (300.03 KB, 下載次數: 53)

51hei.png

3.png (192.21 KB, 下載次數: 39)

3.png

2.png (210.73 KB, 下載次數: 48)

2.png

1.png (436.99 KB, 下載次數: 32)

1.png

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日本一道本视频 | 超碰免费在线 | 蜜桃av鲁一鲁一鲁一鲁 | 日韩精品久久久 | 免费黄色片在线观看 | 九色.com | 久久一及片| 欧美日韩亚洲系列 | 麻豆91精品91久久久 | 国产免费福利在线 | 国产成人免费视频网站高清观看视频 | 久久九九99 | aa级毛片毛片免费观看久 | 91精品国产乱码久久久 | 亚洲欧美日韩国产综合 | caoporn国产精品免费公开 | www.久| 日韩在线欧美 | 一区二区三区高清在线观看 | 日韩毛片免费视频 | 先锋av资源网 | aaa在线 | 97精品超碰一区二区三区 | 国产精品久久久久久吹潮 | 亚洲精品一区二区三区中文字幕 | 四虎永久免费黄色影片 | 成人一级毛片 | ririsao久久精品一区 | 一区二区亚洲 | 九九热在线视频免费观看 | 日韩高清三区 | 欧洲毛片 | 国产区在线| 一区二区日韩 | 亚洲欧美一区二区三区在线 | 亚洲一区二区高清 | 欧美日韩中文字幕在线 | 国产一级在线观看 | 国产我和子的乱视频网站 | 日韩欧美在线播放 | 免费一级欧美在线观看视频 |