找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3558|回复: 3
收起左侧

废手机电池的“浪漫”用途—迷你摇摇棒制作

[复制链接]
ID:266695 发表于 2017-12-25 19:08 | 显示全部楼层 |阅读模式
手头上攒了一些手机电池不知道干嘛就寻思着做一些小玩意,于是就有了一个主意就是摇摇棒即简单又好玩,本人喜欢小而巧的东西所以就把这个东西做的很小。
0.png

上图是摇摇棒的原理利用人的视觉暂留结合单片机控制LED的亮灭就可以在空中显示字符或者图标
0.png

上图是电路图为了把东西做小我选择了STC15F104单片机它有8个引脚去除VCCGND还有6I/O口可以显示一些简单的字母和数字单片机内部自带了EEPROM所以利用它可以存储每一次显示的状态(每一次的开关电源就可以切换到下一个显示的字符)程序在最后面。
0.png


显示效果:
0.png

单片机源程序如下:
  1. #include
  2. #define uchar unsigned char
  3. #define EN_EPROM 0x83;        //使能EEPROM
  4. #define S_MODE     0x00;        //待机模式
  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;        //待机模式无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黑下载附件…………
复制代码
0.png
所有资料51hei提供下载:
废手机电池的“浪漫”用途—迷你摇摇棒.rar (117.82 KB, 下载次数: 18)
回复

使用道具 举报

ID:266802 发表于 2017-12-28 14:19 来自手机 | 显示全部楼层
看着还挺不错的
回复

使用道具 举报

ID:263842 发表于 2017-12-29 13:30 | 显示全部楼层
就喜欢迷你的东西,但是这个型号的怎么烧录呢?》
回复

使用道具 举报

ID:704585 发表于 2020-6-19 10:32 | 显示全部楼层
谢谢分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表