摇摇棒程序与电路设计
16只LED发发发发发发发发发发发发发发发发发发发光管作画面一列的示,左右晃起到了描的作每用,人眼的留象使得看到的是一幅完整的画面。与发发发发发发发发发发发发发发发发发发发发发LED点的示有几分相仿。发发发发发发发发发发硬件路如下,点可放大,。系源发发发发发发发发发发发发发发发发发VCC发5V,下程序和一定要保发发发发发发发发发发发发5V发发发发发发发发,使用用3发发发发发干池串4.5V即可。AT89S52发发发发发发发发发片机作控制器,在它的P0、P2口接有16只以共阳的方式接的高亮度发发发发发发LED,由片机出低平点亮。发发发发发发发发发发发P0口的上拉阻发发RA1不能少。串在LED公共端的二极管D1会生一定的降,用来保发发发发发发发发发发发发LED,发发发LED点亮两端发发发发发发3V左右,在LED的安全承受范内。发发发K1是画面切,用于切发发发发发发发发发示不同内容,S1发发发发发水。
水的作用:棒在,只能在朝某一方向示,发发发发发发发发发发发发发发发发发发发发发发发发发发发
否会出像字或像画面,所以通接一只水来控发发发发发发发发发发发发发发发发发发发发发发发发发发
制,使棒从左向右将内容示出来。发发发发发发发发发发发发发发发发发发
硬件制作:
使用的是直径5mm的色高亮发发发发LED,感太大了些,看效果很好但发发发发发发发发发发发发发近看字不。建使用直径发发发发发发发发发发发发发发3mm的高亮LED,色可根据个人喜好。发发发发发发发发发发发发
水里的水珠很活,致在接通容易生抖,所以发发发发发发发发发发发发发发发发发发发发发发发发发发发
将水斜向上放置,尖尖朝斜上方发发发发发发发发发发发发发发发45?角,,靠水珠自身重力的作用减少抖:发发发发发发发发发发发发发发
IC座里面藏元件,既美又能保元件:发发发发发发发发发发发发发发发
软软软软件:
/**********************************************************
程序名称:LED发发发发棒示64*16像素
发发发发发发发发发发要明:外部中断方式INT0发发发发发发发发发发示,取模方式:向取模、字倒序
发 写:JiangX.net
最后更新:08/11/15发
**********************************************************/
#include
#define uchar unsigned char
#define uint unsigned int //宏定发
#define KEY P3_0 //定画面切按发发发发发发发
uchar KY; //KY作用在后面明发发
uchar disp; //发发发发发示字指
uchar pic=0,num=0; //pic发发发发发按次数,num发中断次数
uchar code love[] = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x3F,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x0F,0x04,0x10,0x02,0x20,0x02,0x20,0x02,0x20,0x02,0x20,0x04,0x10,0xF8,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x07,0x00,0x08,0x00,0x10,0x00,0x20,0x00,0x20,0x00,0x10,0x00,0x08,0xFE,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x3F,0x82,0x20,0x82,0x20,0x82,0x20,0x82,0x20,0x82,0x20,0x82,0x20,0x82,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*LOVE*/
};
uchar code loveyou[] = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0x00,0xFC,0x00,0xFE,0x01,0xFE,0x03,0xFE,0x07,0xFE,0x0F,0xFE,0x1F,0xFC,0x3F,0xF8,0x7F,0xFC,0x3F,0xFE,0x1F,0xFE,0x0F,0xFE,0x07,0xFE,0x03,0xFE,0x01,0xFC,0x00,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*心形发
案*/
};
uchar code hehe[] = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x01,0x40,0x01,0xC0,0x01,0x00,0x00,0x00,0x00,0xF0,0x0F,0x08,0x10,0x04,0x20,0x00,0x00,0x00,0x00,0xF0,0x3F,0x08,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x08,0x00,0xF0,0x3F,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x00,0x00,0x00,0xF0,0x3F,0x08,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x08,0x00,0xF0,0x3F,0x00,0x00,0x00,0x00,0x04,0x20,0x08,0x10,0xF0,0x0F,0x00,0x00,0x00,0x00,0xC0,0x01,0x40,0x01,0xC0,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*呵呵
o(?_?)o发案*/
};
unsigned char code hanzi[] = {
//-- rong --
0x84,0x10,0x64,0x10,0x24,0x08,0x24,0x05,
0xAF,0xFC,0x24,0x46,0x24,0x45,0xB4,0x44,
0x24,0x45,0x24,0x46,0xAF,0xFC,0x24,0x05,
0x24,0x08,0xA6,0x18,0x64,0x08,0x00,0x00,
0x84,0x10,0x64,0x10,0x24,0x08,0x24,0x05,
0xAF,0xFC,0x24,0x46,0x24,0x45,0xB4,0x44,
0x24,0x45,0x24,0x46,0xAF,0xFC,0x24,0x05,
0x24,0x08,0xA6,0x18,0x64,0x08,0x00,0x00,
//"xin",
0x00,0x40,0x00,0x30,0xFC,0x0F,0x44,0x00,
0x44,0x00,0xC2,0x7F,0x43,0x80,0x42,0x40,
0x20,0x30,0x1F,0x0C,0xD0,0x03,0x10,0x0C,
0x10,0x30,0x50,0xC0,0x30,0x40,0x00,0x00,
0x00,0x40,0x00,0x30,0xFC,0x0F,0x44,0x00,
0x44,0x00,0xC2,0x7F,0x43,0x80,0x42,0x40,
0x20,0x30,0x1F,0x0C,0xD0,0x03,0x10,0x0C,0x10,0x30,0x50,0xC0,0x30,0x40,0x00,0x00,//"幸",
0x20,0x00,0x20,0x08,0x24,0x09,0x24,0x09,0x64,0x09,0xA4,0x09,0x24,0x09,0x3F,0xFF,0x24,0x09,0xA4,0x09,0x64,0x09,0xA6,0x09,0x24,0x0D,0x30,0x08,0x20,0x00,0x00,0x00,
//"福",
0x10,0x02,0x10,0x01,0x91,0x00,0xD6,0xFF,0xB0,0x00,0x02,0xFF,0x7A,0x49,0x4A,0x49,0x4A,0x49,0x4A,0x7F,0x4A,0x49,0x4A,0x49,0x7B,0x49,0x82,0xFF,0x00,0x01,0x00,0x00,
//-- 快 --
0x80,0x00,0x70,0x00,0x00,0x00,0xFF,0xFF,0x10,0x82,0x20,0x42,0x10,0x22,0x10,0x1A,0xFF,0x07,0x10,0x0A,0x10,0x12,0x10,0x22,0xF8,0x43,0x10,0xC2,0x00,0x42,0x00,0x00,
//-- 发 --
0x00,0x00,0x80,0x40,0xC0,0x20,0xBC,0x10,0x84,0x0C,0x84,0x40,0x84,0x80,0xF4,0x7F,0x82,0x00,0x82,0x00,0x83,0x04,0x82,0x08,0x80,0x30,0xC0,0x60,0x80,0x00,0x00,0x00,
//-- 每 --
0x00,0x01,0x10,0x01,0x08,0x1D,0xF7,0x13,0x14,0x11,0x14,0x11,0x34,0x13,0x54,0x15,0x14,0x51,0x14,0x91,0x14,0x71,0xFC,0x1F,0x16,0x11,0x84,0x01,0x00,0x01,0x00,0x00,
//-- 一 --
0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0xC0,0x00,0x80,0x00,0x00,0x00,
//-- 天 --
0x40,0x80,0x42,0x80,0x42,0x40,0x42,0x20,0x42,0x10,0x42,0x0C,0x42,0x03,0xFE,0x00,0x42,0x03,0x42,0x0C,0x42,0x10,0x42,0x20,0x43,0x40,0x62,0xC0,0x40,0x40,0x00,0x00,
//-- : --
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x10,0xFE,0x3B,0xFE,0x3B,0x7C,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};/*****函数声明*****/
void display1(void);
void display2(void);
void display3(void);
void display4(void);
/*****n,us,延子程序发发发发*****/
void DelayUs(uint N)
{
uint x;
for(x=0; x<=N;x++);
}
/*****中断服程序发发发*****/
void intersvr0(void) interrupt 0 using 1
{
KY=~KY; //每个来回水会在幅两端分生下降沿中断发发发发发发发发发发发发发发发发发发发发发发发,
只提取其中一次,从左向右才示,发发发发发
if(KY==0)
{
num++; //发算中断次数
switch(pic) //发发画面
{
case 0:{display1();}break;case 1:{display2();}break;case 2:{display3();}break;case 3:{display4();}break;default:{display1();} }
}
}
/*****发示子程序1,字,发发发*****/
void display1(void)
{
uchar i;
if(num>10){disp++;num=0;} //12个字分发发发发3次示完,发发发发次示4每个,,中断每10次切发
if(disp>2)disp=0;
DelayUs(5200); //此延依各硬件差而各不相同,着整使得示内容居中即可发发发发发发发发发发发发发发发发发发发发发发发发发发发发发发发
for(i=0;i<64;i++)
{
P0=~hanzi[disp*128+i*2];P2=~hanzi[disp*128+i*2+1];DelayUs(100);
}
}
/*****发示子程序2,LOVE,*****/
void display2(void)
{
uchar i;
DelayUs(4000);
for(i=0;i<64;i++)
{
P0=~love[i*2];
P2=~love[i*2+1];
DelayUs(120);
}
}
/*****发示子程序3,心形案,发发发*****/void display3(void)
{
uchar i;
DelayUs(4000);
for(i=0;i<64;i++)
{
P0=~loveyou[i*2];
P2=~loveyou[i*2+1];
DelayUs(120);
}
}
/*****发示子程序4,呵呵o(?_?)o发案,*****/
void display4(void)
{
uchar i;
DelayUs(4000);for(i=0;i<64;i++){
P0=~hehe[i*2];P2=~hehe[i*2+1];DelayUs(120);}
}
/*****主函数*****/
void main(void){
IT0=1;
EX0=1;
EA=1; //发中断,下降沿中断KY=0;
while(1) //主程序中只按发发发发{
if(KEY==0) //画面切按下发发发发{
DelayUs(10000); //按去抖发发发
if(KEY==0);
pic++;}
if(pic>3)pic=0;}
}