查看: 3131|回复: 3

摇摇棒(非杜洋,非16个io直接对应控制)

[复制链接]
  • TA的每日心情
    开心
    2015-12-1 09:28
  • 签到天数: 90 天

    连续签到: 1 天

    [LV.6]常住居民II

    发表于 2013-3-19 00:04:28 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 ??? 于 2013-3-19 00:38 编辑

      以后再也不做摇摇棒了.把程序贴出来分享一下....
      这种摇摇棒采用STC15管脚小单片机,最大可能的减少外部器件,(连晶振都省去了);io只用了8个;低功耗....
       原理:和矩阵键盘一样;
       特点:io用的少,电路简单,稳定,
       图片只是一个接线示意图,具体什么可能有出入,我也不记得是哪个了.此外水银开关接中断上..
    /*************************************
    *文件:摇摇棒.c
    *备注:调用delay文件
    *版本:
    *************************************/

    #include <STC12C52.H>
    #include"delay.h"
    typedef  unsigned  char  uchar;
    typedef  unsigned  int   uint;
    typedef  unsigned  char  uint8;
    typedef  unsigned  int   uint16;
    #define   COM      P1   //移植时修改此端口
    #define   H(x)   ((~x)&0xf0)  //高四位变化
    #define   L(x)   (~x<<4)   //低四位变化
    #define   BIT(X)  (1<<(X))
    #define   time1           60  //扫描换时间
    #define   time2           0      //消隐时间
    #define   time3           500  //汉字之间间隔时长
    #define   string_num   9   //字符个数:注意空格哦
    #define   character_num   6   //汉字的个数
    uchar    KEY=0;          //定义全局变量
    void Write_Character(uint8 table[][32],uint8 num);
    void Write_String();
    code uint8 table[][32]=
    {
    ///此处删了......

    };
    code uint8 table2[][32]=
    {
    /*--  文字:  新  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
    0x02,0x22,0x2A,0xA6,0x63,0x26,0x2A,0x22,0x00,0x3F,0x22,0x22,0x23,0x42,0x02,0x00,
    0x04,0x48,0x52,0x41,0xFE,0x40,0x50,0x49,0x06,0xF8,0x00,0x00,0xFF,0x00,0x00,0x00,
    /*--  文字:  年  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
    0x00,0x04,0x18,0xE3,0x22,0x22,0x22,0x22,0x3F,0x22,0x22,0x22,0x22,0x20,0x00,0x00,
    0x20,0x20,0x20,0xE0,0x20,0x20,0x20,0x20,0xFF,0x20,0x20,0x20,0x20,0x20,0x20,0x00,
    /*--  文字:  快  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
    0x00,0x07,0x00,0xFF,0x08,0x04,0x10,0x10,0x10,0xFF,0x10,0x10,0x1F,0x00,0x00,0x00,
    0x80,0x00,0x00,0xFF,0x00,0x81,0x82,0x8C,0xB0,0xC0,0xB0,0x8C,0x82,0x81,0x81,0x00,
    /*--  文字:  乐  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
    0x00,0x00,0x07,0x39,0x21,0x21,0x21,0x2F,0x41,0x41,0xC1,0x41,0x01,0x01,0x00,0x00,
    0x00,0x04,0x08,0x10,0x60,0x02,0x01,0xFE,0x00,0x00,0x40,0x20,0x10,0x0C,0x00,0x00,

    };
    //code uchar   logo1[][16]=
    //{
    //
    //
    ///*--  文字:  I  --*/
    ///*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    //0x00,0x10,0x10,0x1F,0x10,0x10,0x00,0x00,0x00,0x04,0x04,0xFC,0x04,0x04,0x00,0x00,
    //
    ///*--  文字:     --*/
    ///*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    //0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    //
    ///*--  文字:  C  --*/
    ///*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    //0x03,0x0C,0x10,0x10,0x10,0x10,0x1C,0x00,0xE0,0x18,0x04,0x04,0x04,0x08,0x10,0x00,
    //
    ///*--  文字:  A  --*/
    ///*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    //0x00,0x00,0x03,0x1C,0x07,0x00,0x00,0x00,0x04,0x3C,0xC4,0x40,0x40,0xE4,0x1C,0x04,
    //
    ///*--  文字:  N  --*/
    ///*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    //0x10,0x1F,0x0C,0x03,0x00,0x10,0x1F,0x10,0x04,0xFC,0x04,0x00,0xE0,0x18,0xFC,0x00,
    //
    ///*--  文字:     --*/
    ///*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    //0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    //
    ///*--  文字:  F  --*/
    ///*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    //0x10,0x1F,0x11,0x11,0x17,0x10,0x08,0x00,0x04,0xFC,0x04,0x00,0xC0,0x00,0x00,0x00,
    //
    ///*--  文字:  I  --*/
    ///*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    //0x00,0x10,0x10,0x1F,0x10,0x10,0x00,0x00,0x00,0x04,0x04,0xFC,0x04,0x04,0x00,0x00,
    //
    ///*--  文字:  Y  --*/
    ///*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    //0x10,0x1C,0x13,0x00,0x13,0x1C,0x10,0x00,0x00,0x00,0x04,0xFC,0x04,0x00,0x00,0x00,
    //
    //
    //
    //};
         
    /**********************************************************
    函数名: void write_H(uchar dat_h)
    参  数: uchar dat_h为要显示的高字节数据
    返回值: 无
    备  注: 显示摇摇棒的高字节
    /***********************************************************/
    void Write_H(uchar dat_h)
    {
        COM=H(dat_h)|BIT(1);
        delay(time1);
        COM=0XF0;
        delay(time2);
        COM=L(dat_h)|BIT(0);
        delay(time1);
        COM=0XF0;
        delay(time2);
    }
    /**********************************************************
    函数名: void Write_L(uchar dat_l)
    参  数: uchar dat_l为要显示的低字节数据
    返回值: 无
    备  注: 显示摇摇棒的低字节
    /***********************************************************/
    void Write_L(uchar dat_l)
    {
        COM=H(dat_l)|BIT(3);
        delay(time1);
        COM=0xf0;
        delay(time2);
        COM=L(dat_l)|BIT(2);
        delay(time1);
        COM=0xf0;
        delay(time2);
    }
    /****************外部中断0中断函数************************
    函数名: void init_int0()
    参  数: 无
    返回值: 无
    备  注: 初始化外部中断0
    /***********************************************************/
    void Init_INT0()
    {
      IT0=1;//设置下降沿触发中断
      EX0=1;//使能外部中断0
      EA=1;
    }
    /****************外部中断0中断函数************************
    函数名: void INT_0()   interrupt  X0_INTNO               
    参  数: 调用全局变量 KEY
    返回值: 无
    备  注: 外部中断函数
    ***********************************************************/
    void INT_0()   interrupt  X0_INTNO
    {
        EX0=0;
    delay(200);
    switch(KEY%4)
    {
         case   0:  Write_Character(table,sizeof(table)>>5);     break;
      case   1:  delay(50);      break;
      case   2:  Write_Character(table2,sizeof(table2)>>5);  break;
      case   3:  delay(50);      break;
    }
       EX0=1;
    KEY++;
    if(KEY>200)
    {
        KEY=0;
    }
    }
    /****************外部中断0中断函数************************
    函数名: void write_string()
    参  数: logo为存放字符串的二维数组  string_num 为字符的个数
    返回值: 无
    备  注: 显示字符串:注意一下,如果用取模软件空格也要算哦
    /***********************************************************/
    /*void Write_String()
    {
          uchar i,j;
        for(j=0;j<string_num;j++)
        {
               for(i=8;i>0;i--)
             {
                       Write_L(logo1[j][8-i]);
                       Write_H(logo1[j][16-i]);
          }
           delay(time3);
        }
    }
    */
    /***************************************
    函数名: void write_character(uint8 table[][32],uint8 num)
    参  数: uint8 table[][32]为存放汉字的二维数组 num 为字符的个数
    返回值: 无
    备  注: 显示字符串:注意一下,如果用取模软件空格也要算哦
    /***********************************************************/
    void Write_Character(uint8 table[][32],uint8 num)
    {
    uint8 dat_L,dat_H;
    uint8  i,j;
           for(j=0;j<num;j++)
        {
         for(i=0;i<16;i++)
         {
        dat_L=table[j];
        dat_H=table[j][i+16];
        Write_L(dat_L);
        Write_H(dat_H);
       }
         delay(time3);
         
      }
    }
    int main()
    {
       P1M0=0X00;
       P1M1=0X0F;
    // PxM0 PxM1   移植时修改此端口
    //  0    0     准双向口
    //  0    1     强推挽输出
    //  1    0     高阻输入态
    //  1    1     开漏输出
       EA=1;
      
       Init_INT0();
      
       while(1)
       {
        PCON=BIT(1);  //   进入掉电模式  典型功耗小于2uA
       }
       return 0;
    }

    摇摇棒.JPG
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2018-8-29 20:40
  • 签到天数: 1341 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2013-3-19 08:00:07 | 显示全部楼层
    学习啦 谢谢!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2015-11-4 08:32
  • 签到天数: 773 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2013-3-19 08:17:53 | 显示全部楼层
    有空也DIY一个试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2020-3-19 13:22
  • 签到天数: 805 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2013-3-19 08:47:10 | 显示全部楼层
    路过支持一下         
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-11-27 17:21 , Processed in 0.141022 second(s), 22 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.