找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3659|回复: 5
收起左侧

自制摇摇棒

[复制链接]
ID:140725 发表于 2016-10-11 22:25 | 显示全部楼层 |阅读模式
嘿嘿,自我感觉不错。就是这个用手摇晃的东西有点累。
补充下,这个惯性开关 就是把单片机的两个引脚引出来,然后在负极上接上一根弹性导线,摇动的时候这个弹性导线会向两边摆动而触动到两个引脚(为了增加惯性,我得弹性导线很长,并且在顶端弯了几个圈增加惯性)。为了防止摆动出来,我在两个引脚上加了一段带皮导线,这样就能随便乱晃,不至于导线出来
正面,上面一排是发光二极管。右下角的是惯性开关
195748f7qbrb8xz7xkgppq.jpg.thumb.jpg


关灯后的效果(视频截图,相机拍不到)
195757zx8zkugfd57fm6jz.jpg.thumb.jpg


STC12C5a60S2单片机
195805gtz5ymt1611c4ew6.jpg.thumb.jpg



原理图,上面少了外震荡电路和上电复位电路。其实这个单片机在写入程序后可设置为内部晶振,然后晶振和复位 ...
200008xv442mffprmdqyv2.jpg.thumb.jpg


源程序:
  1. #include  //单片机头文件


  2. #define DY_DELAY                5 //设置每一个点显示的时间长度(1~20)

  3. sbit KEY1 = P1 ^ 2; //摇动惯性开关
  4. sbit KEY2 = P1 ^ 3;


  5. sbit LED1 = P0 ^ 3; //LED灯定义,低电平时亮(自上到下)
  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. //"爱",
  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){ // 用于点扫描的延时
  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; //启动P4接口
  106.         P0M0 = 0xff; //接口设置为强推
  107.         P2M0 = 0xff;
  108.         P4M0 = 0xff;
  109.         P1 = 0xff; //初始IO接口状态
  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”是这个字幕需要扫描的列数,修改字幕时必须修改此参数。
  130.                                         DISPLAY_PIN (logo[c],logo[c+1]); //“LOGO”是第一个字幕的数据表名
  131.                                         c=c+2;//产生显示行移位
  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;//产生显示行移位
  143.                                 }
  144.                         }
  145.                         }
  146.                         }
复制代码

摇摇棒资料.rar

1.4 KB, 下载次数: 22, 下载积分: 黑币 -5

回复

使用道具 举报

ID:166768 发表于 2017-9-12 13:16 | 显示全部楼层
如果把单色二极管换成彩色二极管就更好了
回复

使用道具 举报

ID:233215 发表于 2017-9-14 22:42 来自手机 | 显示全部楼层
用的是贴片吗?
回复

使用道具 举报

ID:527278 发表于 2019-5-4 22:34 | 显示全部楼层
楼主您好。请问制作这个需要用到那些东西?
回复

使用道具 举报

ID:421308 发表于 2019-8-7 18:00 | 显示全部楼层
楼主您好。请问制作这个需要用到那些东西?
回复

使用道具 举报

ID:421308 发表于 2019-8-8 20:26 | 显示全部楼层
取模是怎么取的啊
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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