亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码

標(biāo)題: 單片機(jī)洞洞板心形流水燈制作 [打印本頁(yè)]

作者: chinayanhui    時(shí)間: 2020-2-22 23:16
標(biāo)題: 單片機(jī)洞洞板心形流水燈制作
本帖最后由 chinayanhui 于 2020-2-23 00:07 編輯

學(xué)習(xí)單片機(jī)的小學(xué)生第一次發(fā)帖,不足之處還請(qǐng)高人指正。


這期間,實(shí)再無(wú)聊,在網(wǎng)上看一些電子制作的視頻。看了一個(gè)群主自己做了一個(gè)心形流水燈,效果實(shí)再不錯(cuò),但是看到他寫(xiě)的代碼,就是覺(jué)得太亂。不成系統(tǒng),一大堆的數(shù)組組織起來(lái)的代碼,沒(méi)有注釋,看的讓人著實(shí)不爽。

頻中的代碼片段:







是不是看得有點(diǎn)暈?

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

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

相關(guān)圖片:















由于手頭只有7*9的板子,用了26個(gè)LED,光拼這個(gè)心形就用了近一個(gè)半小時(shí)的時(shí)間。看似簡(jiǎn)單,拼起來(lái)要考慮線的走向等等問(wèn)題。



手頭還有幾只STC98C52RC,占用了P1, P2, P3和ALE(4.5)以及4.6管腳。為啥不用P0腳?因?yàn)橄肫鹆艘由侠娮瑁诸^又沒(méi)有,所以干脆沒(méi)有用。雖然我的LED是共陽(yáng)接法。。。其實(shí)是為了以后擴(kuò)展用的


因?yàn)槭怯?節(jié)1.5V的電池帶動(dòng),為了能亮一些,所以限流電阻接了100歐的。


流水燈嘛就是一堆IO口的輸出,沒(méi)啥復(fù)雜的,是51單片機(jī)初學(xué)者的Hello World,復(fù)雜之處在于設(shè)計(jì)led流水燈的算法。筆者因?yàn)槭菑能浖D(zhuǎn)過(guò)來(lái)的,雖然在PC端有一大堆的內(nèi)存可以使用,但是學(xué)習(xí)單片機(jī),面對(duì)只有幾百之字的內(nèi)存和幾K的存儲(chǔ)空間。但是從算法上節(jié)約程序空間是筆者的習(xí)慣。另外程序看得也明白。主要是不想用一大堆數(shù)組,一堆看的頭疼的循環(huán)加套循環(huán),只想設(shè)計(jì)幾個(gè)函數(shù),解決問(wèn)題。最終編譯出來(lái),程序代碼686字節(jié),占用內(nèi)存23.0,我自己還能接受。


還有一些效果有些思路,但是真是沒(méi)有時(shí)間寫(xiě)了,有興趣的壇友可以在我的思路上完善。因?yàn)長(zhǎng)ED較多,代碼中沒(méi)有使用循環(huán)左右移的代碼。覺(jué)得用unsign long左右移動(dòng)就足夠了。當(dāng)然程序中也注釋了一段筆者參考網(wǎng)上的uint32的循環(huán)左右移的代碼,供有興趣的壇友參考。

另外由于不需要精確定時(shí)也為了寫(xiě)程序方便,沒(méi)有使用定時(shí)器,僅用了一個(gè)軟件延時(shí)。有興趣的壇友可以使用定時(shí)器試一下哈。

單片機(jī)代碼如下:
  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                // 函數(shù)跳轉(zhuǎn)延時(shí)
  8. #define TIME         100                // 語(yǔ)句間延時(shí)

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

  13. 返    回:無(wú)
  14. 備    注:無(wú)
  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. 函數(shù)功能:全亮閃爍
  25. 入口參數(shù):
  26.         count uint8  閃爍次數(shù)
  27.         ms          uint16 閃爍時(shí)停留的毫秒數(shù)

  28. 返    回:無(wú)
  29. 備    注:無(wú)
  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. 函數(shù)功能:
  47.         循環(huán)移動(dòng)無(wú)符號(hào)數(shù)

  48. 入口參數(shù):
  49.         uint32 val                待移動(dòng)的數(shù)
  50.         uint8  count        移動(dòng)的位數(shù)

  51. 返    回:移動(dòng)的結(jié)果
  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. 函數(shù)功能:根據(jù)參數(shù)設(shè)定LED的亮燈
  80. 入口參數(shù):
  81.         value uint32 設(shè)定led亮燈的數(shù)據(jù)
  82.         
  83. 返    回:無(wú)
  84. 備    注:無(wú)
  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. 函數(shù)功能:流水燈
  96. 入口參數(shù):
  97.         value uint8        流水燈初值(0.逆時(shí)針  1.順時(shí)針)
  98.         isOff uint8 是否關(guān)閉流過(guò)的燈(1.關(guān)閉  0.不關(guān)閉)
  99.         
  100. 返    回:無(wú)
  101. 備    注:無(wú)
  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,則為順時(shí)針,否則為逆時(shí)針
  111.                 if((style & 0x80) == 0x80)
  112.                         value <<= 1;
  113.                 else
  114.                         value >>= 1;
  115.                
  116.                 // 第0位為1則為單個(gè)流水燈(為0則是亮過(guò)的不再熄滅)
  117.                 if((style & 1) == 1)
  118.                         value++;
  119.                
  120.                 // 第1位為1則為順時(shí)針逐個(gè)滅燈
  121.                 if((style & 2) == 2)
  122.                         value |= 1;
  123.                
  124.                 // 第5位為1則為逆時(shí)針單個(gè)燈
  125.                 if((style & 0x10) == 0x10)
  126.                         value |= 0x2000000;
  127.                
  128.                 Delay(TIME);
  129.         }
  130. }

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

  135. 返    回:無(wú)
  136. 備    注:無(wú)
  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.                 // 全滅的狀態(tài)下順時(shí)針逐個(gè)流水亮燈
  174.                 Assembly(0xFFFFFFFE, 0x81);
  175.                
  176.                 // 全滅的狀態(tài)下順時(shí)針堆積亮燈
  177.                 Delay(FUNJMP);
  178.                 Assembly(0xFFFFFFFE, 0x80);
  179.                
  180.                 // 全亮狀態(tài)下順時(shí)針逐個(gè)堆積滅燈
  181.                 //P1 = 0xFF;
  182.                 Delay(FUNJMP);
  183.                 Assembly(1, 0x82);
  184.                
  185.                 // 全滅狀態(tài)下逆時(shí)針逐個(gè)流水亮燈
  186.                 Delay(FUNJMP);
  187.                 Assembly(0x1FFFFFF, 0x10);
  188.                
  189.                 // 逆時(shí)針逐個(gè)堆積亮燈
  190.                 Delay(FUNJMP);
  191.                 Assembly(0x1FFFFFF, 0x00);
  192.                
  193.                 // 全亮的狀態(tài)下逆時(shí)針堆積滅燈
  194.                 Delay(FUNJMP);
  195.                 Assembly(0x2000000, 0x10);
  196.                
  197.                 // 兩邊點(diǎn)亮
  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. }
復(fù)制代碼



洞洞板的設(shè)計(jì)比較簡(jiǎn)單,為了美觀,用了兩塊洞洞板,一個(gè)板子上是共陽(yáng)的26根LED,另一塊板子放單片機(jī),晶振,然后是一堆插針。



洞洞板的設(shè)計(jì):










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

51hei.png

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

3.png

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

2.png

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

1.png





歡迎光臨 (http://www.denmoz.com/bbs/) Powered by Discuz! X3.1