找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

帖子
查看: 4495|回復(fù): 3
打印 上一主題 下一主題
收起左側(cè)

廢手機(jī)電池的“浪漫”用途—迷你搖搖棒制作

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:266695 發(fā)表于 2017-12-25 19:08 | 只看該作者 |只看大圖 回帖獎勵 |倒序?yàn)g覽 |閱讀模式
手頭上攢了一些手機(jī)電池不知道干嘛就尋思著做一些小玩意,于是就有了一個(gè)主意就是搖搖棒即簡單又好玩,本人喜歡小而巧的東西所以就把這個(gè)東西做的很小。

上圖是搖搖棒的原理利用人的視覺暫留結(jié)合單片機(jī)控制LED的亮滅就可以在空中顯示字符或者圖標(biāo)

上圖是電路圖為了把東西做小我選擇了STC15F104單片機(jī)它有8個(gè)引腳去除VCCGND還有6個(gè)I/O口可以顯示一些簡單的字母和數(shù)字單片機(jī)內(nèi)部自帶了EEPROM所以利用它可以存儲每一次顯示的狀態(tài)(每一次的開關(guān)電源就可以切換到下一個(gè)顯示的字符)程序在最后面。


顯示效果:

單片機(jī)源程序如下:
  1. #include
  2. #define uchar unsigned char
  3. #define EN_EPROM 0x83;        //使能EEPROM
  4. #define S_MODE     0x00;        //待機(jī)模式
  5. #define R_MODE     0x01;        //讀模式
  6. #define W_MODE     0x02;        //寫模式
  7. #define F_MODE     0x03;        //擦除模式
  8. sfr IAP_DATA  =  0xC2;
  9. sfr IAP_ADDRH =  0xC3;
  10. sfr IAP_ADDRL =  0xC4;
  11. sfr IAP_CMD   =  0xC5;
  12. sfr IAP_TRIG  =  0xC6;
  13. sfr IAP_CONTR =  0xC7;
  14. void init();
  15. uchar num=0,m=0;
  16. uchar read_dat(uchar addr_h,uchar addr_l);
  17. void erase_dat(uchar addr_h,uchar addr_l);
  18. void write_dat(uchar addr_h,uchar addr_l,uchar w_dat);
  19. unsigned char code tab[10][32]={
  20.     {
  21.         0xe7,0xc3,0xc1,0xe0,0xc1,0xc3,0xe7,0xff,
  22.         0xff,0xff,0xff,0xe7,0xc3,0xc1,0xe0,0xc1,
  23.         0xc3,0xe7,0xff,0xff,0xff,0xff,0xe7,0xc3,
  24.         0xc1,0xe0,0xc1,0xc3,0xe7,0xff,0xff,0xff         
  25.     },

  26.     {
  27.         0xff,0xff,0xde,0xc0,0xde,0xff,0xff,0xff,
  28.         0xff,0xff,0xff,0xe7,0xc3,0xc1,0xe0,0xc1,
  29.         0xc3,0xe7,0xff,0xff,0xff,0xff,0xff,0xc1,
  30.         0xfe,0xfe,0xfe,0xfe,0xc1,0xff,0xff,0xff        
  31.     },

  32.     {
  33.          0xde,0xed,0xf3,0xf3,0xed,0xde,0xff,0xff,
  34.         0xff,0xff,0xff,0xde,0xed,0xf3,0xf3,0xed,
  35.         0xde,0xff,0xff,0xff,0xff,0xff,0xff,0xde,
  36.         0xed,0xf3,0xf3,0xed,0xde,0xff,0xff,0xff        
  37.     },

  38.     {
  39.         0xfb,0xfd,0xd6,0xe8,0xd6,0xfd,0xfb,0xff,
  40.         0xff,0xff,0xff,0xfb,0xfd,0xd6,0xe8,0xd6,
  41.         0xfd,0xfb,0xff,0xff,0xff,0xff,0xfb,0xfd,
  42.         0xd6,0xe8,0xd6,0xfd,0xfb,0xff,0xff,0xff         
  43.     },

  44.     {
  45.          0xea,0xd5,0xea,0xd5,0xea,0xd5,0xea,0xd5,
  46.         0xea,0xd5,0xea,0xd5,0xea,0xd5,0xea,0xd5,
  47.         0xea,0xd5,0xea,0xd5,0xea,0xd5,0xea,0xd5,
  48.         0xea,0xd5,0xea,0xd5,0xea,0xd5,0xea,0xd5        
  49.     },
  50.    
  51.     {
  52.          0xfa,0xfd,0xfa,0xff,0xef,0xd7,0xef,0xff,
  53.         0xfa,0xfd,0xfa,0xff,0xef,0xd7,0xef,0xff,
  54.         0xfa,0xfd,0xfa,0xff,0xef,0xd7,0xef,0xff,
  55.         0xfa,0xfd,0xfa,0xff,0xef,0xd7,0xef,0xff        
  56.     },
  57.    
  58.     {
  59.         0xf0,0xed,0xdd,0xed,0xf0,0xff,0xff,0xdf,
  60.         0xdf,0xc0,0xdf,0xdf,0xff,0xff,0xc1,0xfe,
  61.         0xfe,0xfe,0xc1,0xff,0xff,0xc1,0xfe,0xf1,
  62.         0xfe,0xc1,0xff,0xff,0xe1,0xde,0xde,0xe1      
  63.     },
  64.    
  65.     {
  66.         0xc0,0xfb,0xfb,0xfb,0xc0,0xff,0xff,0xff,
  67.         0xff,0xff,0xde,0xed,0xf3,0xf3,0xed,0xde,
  68.         0xff,0xff,0xff,0xff,0xff,0xff,0xcf,0xf7,
  69.         0xf8,0xf7,0xcf,0xff,0xff,0xff,0xff,0xff     
  70.     },
  71.    
  72.     {
  73.         0xc0,0xde,0xd2,0xda,0xda,0xc2,0xfe,0xc0,
  74.         0xdf,0xd0,0xd6,0xd6,0xd2,0xde,0xc0,0xff,
  75.         0xc0,0xde,0xd2,0xda,0xda,0xc2,0xfe,0xc0,
  76.         0xdf,0xd0,0xd6,0xd6,0xd2,0xde,0xc0,0xff
  77.     },
  78.    
  79.     {
  80.         0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xfd,0xfb,
  81.         0xf7,0xef,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,
  82.         0xfd,0xfb,0xf7,0xef,0xdf,0xef,0xf7,0xfb,
  83.         0xfd,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xff
  84.     },
  85. };                                      
  86. void delay(uchar xms)
  87. {
  88.     char i,j;
  89.     for(i=0;i    for(j=0;j<50;j++);
  90. }
  91. void main()
  92. {
  93.     init();
  94.     num=read_dat(0x00,0x01);
  95.     ++num;
  96.     if(num>=11)
  97.     {
  98.         num=1;
  99.     };   

  100.     erase_dat(0x00,0x01);
  101.     write_dat(0x00,0x01,num);
  102.     while(1)
  103.     {
  104.         uchar i=0;
  105.         
  106.         for(i=0;i<32;i++)
  107.         {
  108.             P3=tab[num-1][i];
  109.             delay(100);
  110.         }            
  111.     }   
  112. }
  113. void init()
  114. {
  115.     IAP_CONTR    = EN_EPROM;        //把第7位置1允許EEPROM可以讀寫
  116.     IAP_CMD     = S_MODE;        //待機(jī)模式無ISP操作
  117.     IAP_ADDRH    = 0x00;
  118.     IAP_ADDRL    = 0x00;

  119. }

  120. uchar read_dat(uchar addr_h,uchar addr_l)
  121. {
  122.     uchar E_dat = 0x00;
  123.     IAP_CMD     = R_MODE;        //模式選擇為讀EEPROM
  124.     IAP_ADDRH    = addr_h;
  125.     IAP_ADDRL    = addr_l;
  126.     IAP_TRIG    = 0x5A;        //使命令有效
  127.     IAP_TRIG    = 0xA5;        //使命令有效
  128.     E_dat        = IAP_DATA;
  129.     return E_dat;
  130. }

  131. ……………………

  132. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
廢手機(jī)電池的“浪漫”用途—迷你搖搖棒.rar (117.82 KB, 下載次數(shù): 19)




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

使用道具 舉報(bào)

沙發(fā)
ID:266802 發(fā)表于 2017-12-28 14:19 來自手機(jī) | 只看該作者
看著還挺不錯的
回復(fù)

使用道具 舉報(bào)

板凳
ID:263842 發(fā)表于 2017-12-29 13:30 | 只看該作者
就喜歡迷你的東西,但是這個(gè)型號的怎么燒錄呢?》
回復(fù)

使用道具 舉報(bào)

地板
ID:704585 發(fā)表于 2020-6-19 10:32 | 只看該作者
謝謝分享
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表