標(biāo)題: 自制搖搖棒 [打印本頁(yè)]

作者: 51hei學(xué)習(xí)技術(shù)中    時(shí)間: 2016-10-11 22:25
標(biāo)題: 自制搖搖棒
嘿嘿,自我感覺(jué)不錯(cuò)。就是這個(gè)用手搖晃的東西有點(diǎn)累。
補(bǔ)充下,這個(gè)慣性開(kāi)關(guān) 就是把單片機(jī)的兩個(gè)引腳引出來(lái),然后在負(fù)極上接上一根彈性導(dǎo)線,搖動(dòng)的時(shí)候這個(gè)彈性導(dǎo)線會(huì)向兩邊擺動(dòng)而觸動(dòng)到兩個(gè)引腳(為了增加慣性,我得彈性導(dǎo)線很長(zhǎng),并且在頂端彎了幾個(gè)圈增加慣性)。為了防止擺動(dòng)出來(lái),我在兩個(gè)引腳上加了一段帶皮導(dǎo)線,這樣就能隨便亂晃,不至于導(dǎo)線出來(lái)
正面,上面一排是發(fā)光二極管。右下角的是慣性開(kāi)關(guān)



關(guān)燈后的效果(視頻截圖,相機(jī)拍不到)



STC12C5a60S2單片機(jī)




原理圖,上面少了外震蕩電路和上電復(fù)位電路。其實(shí)這個(gè)單片機(jī)在寫(xiě)入程序后可設(shè)置為內(nèi)部晶振,然后晶振和復(fù)位 ...



源程序:
  1. #include  //單片機(jī)頭文件


  2. #define DY_DELAY                5 //設(shè)置每一個(gè)點(diǎn)顯示的時(shí)間長(zhǎng)度(1~20)

  3. sbit KEY1 = P1 ^ 2; //搖動(dòng)慣性開(kāi)關(guān)
  4. sbit KEY2 = P1 ^ 3;


  5. sbit LED1 = P0 ^ 3; //LED燈定義,低電平時(shí)亮(自上到下)
  6. sbit LED2 = P0 ^ 4;
  7. sbit LED3 = P0 ^ 5;
  8. sbit LED4 = P0 ^ 6;
  9. sbit LED5 = P0 ^ 7;
  10. sbit LED6 = P4 ^ 6;
  11. sbit LED7 = P4 ^ 5;
  12. sbit LED8 = P4 ^ 4;
  13. sbit LED9 = P2 ^ 7;
  14. sbit LED10 = P2 ^ 6;
  15. sbit LED11 = P2 ^ 5;
  16. sbit LED12 = P2 ^ 4;
  17. sbit LED13 = P2 ^ 3;
  18. sbit LED14 = P2 ^ 2;
  19. sbit LED15 = P2 ^ 1;
  20. sbit LED16 = P2 ^ 0;

  21. /*********************************************************************************************/
  22. unsigned char code logo[] =  {            // (取碼:從上到下從左到右,縱向8位下高位)
  23. //"老",
  24. 0x40,0x40,0x40,0x20,0x48,0x10,0x48,0x08,
  25.       0x48,0x04,0x48,0x7E,0x7F,0x91,0xC8,0x90,
  26.       0x4C,0x88,0x68,0x88,0x50,0x84,0x48,0x86,
  27.       0x4C,0x80,0x60,0xE0,0x40,0x00,0x00,0x00,

  28. //"婆",
  29. 0x00,0x04,0x84,0x04,0xC9,0x87,0x22,0x84,
  30.       0x06,0x4D,0x80,0x54,0x7E,0x26,0x12,0x24,
  31.       0x32,0x26,0x52,0x55,0x9F,0x4C,0x52,0x85,
  32.       0x32,0x06,0x0A,0x06,0x06,0x04,0x00,0x00,

  33. //"我",
  34. 0x20,0x00,0x24,0x08,0x24,0x48,0x24,0x84,
  35.       0xFE,0x7F,0x23,0x02,0x22,0x21,0x20,0x10,
  36.       0xFF,0x09,0x20,0x06,0x22,0x1A,0xAC,0x61,
  37.       0x20,0x80,0x30,0xE0,0x20,0x00,0x00,0x00,

  38. //"愛(ài)",
  39. 0x40,0x00,0xB0,0x00,0x92,0x40,0x96,0x30,
  40.       0x9A,0x8C,0x92,0x83,0xF2,0x46,0x9E,0x2A,
  41.       0x92,0x12,0x91,0x2A,0x99,0x26,0x95,0x42,
  42.       0x91,0xC0,0x50,0x40,0x30,0x00,0x00,0x00,

  43. //"你",
  44. 0x40,0x00,0x20,0x00,0xF8,0xFF,0x07,0x00,
  45.       0x40,0x00,0x20,0x08,0x18,0x04,0x0F,0x43,
  46.       0x08,0x80,0xC8,0x7F,0x08,0x00,0x08,0x01,
  47.       0x28,0x06,0x18,0x0C,0x00,0x00,0x00,0x00

  48. }

  49. void delay (unsigned int a){ // 用于點(diǎn)掃描的延時(shí)
  50.         unsigned int i;
  51.         while( --a != 0){
  52.                 for(i = 0; i < 1; i++);
  53.         }                                      
  54. }

  55. void DELAY_MS (unsigned int a){
  56.         unsigned int i;
  57.         while( --a != 0){
  58.                 for(i = 0; i < 600; i++);
  59.         }
  60. }
  61. /*********************************************************************************************/



  62. void DISPLAY_OFF (void){
  63.         delay(DY_DELAY);//顯示停留
  64.         P0 = 0xff;
  65.         P2 = 0xff;
  66.         P4 = 0xff;
  67. }
  68. /**********************************************************************************************/


  69. void DISPLAY_PIN (unsigned char d,unsigned char e){ //第1列橫向顯示程序
  70.         unsigned char i;
  71.         i = d & 0x01;
  72.         if(i == 0x01){LED1 = 0;}DISPLAY_OFF();
  73.         i = d & 0x02;
  74.         if(i == 0x02){LED2 = 0;}DISPLAY_OFF();
  75.         i = d & 0x04;
  76.         if(i == 0x04){LED3 = 0;}DISPLAY_OFF();
  77.         i = d & 0x08;
  78.         if(i == 0x08){LED4 = 0;}DISPLAY_OFF();
  79.         i = d & 0x10;
  80.         if(i == 0x10){LED5 = 0;}DISPLAY_OFF();
  81.         i = d & 0x20;
  82.         if(i == 0x20){LED6 = 0;}DISPLAY_OFF();
  83.         i = d & 0x40;
  84.         if(i == 0x40){LED7 = 0;}DISPLAY_OFF();
  85.         i = d & 0x80;
  86.         if(i == 0x80){LED8 = 0;}DISPLAY_OFF();

  87.         i = e & 0x01;
  88.         if(i == 0x01){LED9 = 0;}DISPLAY_OFF();
  89.         i = e & 0x02;
  90.         if(i == 0x02){LED10 = 0;}DISPLAY_OFF();
  91.         i = e & 0x04;
  92.         if(i == 0x04){LED11 = 0;}DISPLAY_OFF();
  93.         i = e & 0x08;
  94.         if(i == 0x08){LED12 = 0;}DISPLAY_OFF();
  95.         i = e & 0x10;
  96.         if(i == 0x10){LED13 = 0;}DISPLAY_OFF();
  97.         i = e & 0x20;
  98.         if(i == 0x20){LED14 = 0;}DISPLAY_OFF();
  99.         i = e & 0x40;
  100.         if(i == 0x40){LED15 = 0;}DISPLAY_OFF();
  101.         i = e & 0x80;
  102.         if(i == 0x80){LED16 = 0;}DISPLAY_OFF();
  103. }

  104. void init (void){
  105.         P4SW = 0xff; //啟動(dòng)P4接口
  106.         P0M0 = 0xff; //接口設(shè)置為強(qiáng)推
  107.         P2M0 = 0xff;
  108.         P4M0 = 0xff;
  109.         P1 = 0xff; //初始IO接口狀態(tài)
  110.         P0 = 0xff;
  111.         P2 = 0xff;
  112.         P4 = 0xff;
  113. }
  114. /**********************************************************************************************/


  115. void main (void)
  116.    {
  117.         unsigned char a,c;
  118.         init();//初始程序
  119.         while(1)
  120.          {
  121.                
  122.         
  123.                          if(KEY2 == 0)
  124.                         {
  125.                                 DELAY_MS(20);
  126.                                 while(KEY2 == 0);
  127.                                 c = 0;
  128.                                 for(a=1;a<80;a++)
  129.                                 { //這里的“80”是這個(gè)字幕需要掃描的列數(shù),修改字幕時(shí)必須修改此參數(shù)。
  130.                                         DISPLAY_PIN (logo[c],logo[c+1]); //“LOGO”是第一個(gè)字幕的數(shù)據(jù)表名
  131.                                         c=c+2;//產(chǎn)生顯示行移位
  132.                                 }
  133.                         }
  134.                         if(KEY1 == 0)
  135.                         {
  136.                                 DELAY_MS(20);
  137.                                 while(KEY1 == 0);
  138.                                 c = 158;
  139.                                 for(a=1;a<80;a++)
  140.                                 {
  141.                                         DISPLAY_PIN (logo[c],logo[c+1]);
  142.                                         c=c-2;//產(chǎn)生顯示行移位
  143.                                 }
  144.                         }
  145.                         }
  146.                         }
復(fù)制代碼

搖搖棒資料.rar

1.4 KB, 下載次數(shù): 23, 下載積分: 黑幣 -5


作者: qqb    時(shí)間: 2017-9-12 13:16
如果把單色二極管換成彩色二極管就更好了
作者: majun_1234    時(shí)間: 2017-9-14 22:42
用的是貼片嗎?
作者: 1276312109    時(shí)間: 2019-5-4 22:34
樓主您好。請(qǐng)問(wèn)制作這個(gè)需要用到那些東西?
作者: xiaozhong1314    時(shí)間: 2019-8-7 18:00
樓主您好。請(qǐng)問(wèn)制作這個(gè)需要用到那些東西?
作者: xiaozhong1314    時(shí)間: 2019-8-8 20:26
取模是怎么取的啊




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