3回答

2收藏

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

#开源分享 #开源分享 3528 人阅读 | 3 人回复 | 2013-03-19

本帖最后由 ??? 于 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 (74.03 KB, 下载次数: 19)

摇摇棒.JPG
分享到:
回复

使用道具 举报

回答|共 3 个

倒序浏览

沙发

w932443004

发表于 2013-3-19 08:00:07 | 只看该作者

学习啦 谢谢!
板凳

zndz410

发表于 2013-3-19 08:17:53 | 只看该作者

有空也DIY一个试试。
地板

swustlx86

发表于 2013-3-19 08:47:10 | 只看该作者

路过支持一下         
您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

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