基于单片机的摇摆棒设计与制作.doc
- 文档编号:7441436
- 上传时间:2023-05-11
- 格式:DOC
- 页数:7
- 大小:76.50KB
基于单片机的摇摆棒设计与制作.doc
《基于单片机的摇摆棒设计与制作.doc》由会员分享,可在线阅读,更多相关《基于单片机的摇摆棒设计与制作.doc(7页珍藏版)》请在冰点文库上搜索。
基于单片机的摇摆棒设计与制作
设计原理:
通过单片机控制16只LED发光管按设计规律显示,使其作为画面每一列的显示,左右摇晃起到了扫描的作用,人眼的视觉暂留现象使得看到的是一幅完整的画面。
与LED点阵的显示有几分相仿。
硬件设计:
系统电源VCC为5V,实际使用时可以用3节干电池串联4.5V。
STC89C52单片机作为控制器,在它的P1、P2口接有16只以共阳的方式连接的高亮度LED,由单片机输出低电平点亮。
LED旁边串联560欧电阻,用来保护LED,经实测LED点亮时两端电压为3V左右,在LED的安全承受范围内。
K1是画面切换开关,用于切换显示不同内容;S1为水银开关。
水银开关的作用:
棒在摇动时,只能在朝某一方向摇动时显示,否则会出现镜像字或镜像画面,所以通过接一只水银开关来控制,使摇摇棒从左向右摇动时将内容显示出来。
软件设计:
#include
#defineucharunsignedchar
#defineuintunsignedint//宏定义
#defineKEYP3^0//定义画面切换按键
ucharKY;//KY作用在后面说明
uchardisp;//显示汉字指针
ucharpic=0,num=0;//pic为按键次数;num为中断次数
ucharcodelove[]={
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*/};
ucharcodeloveyou[]={
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,/*心形图案*/};
ucharcodehehe[]={
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图案*/};
unsignedcharcodehanzi[]={
//--电--
0x00,0x00,0x1F,0xE0,0x12,0x40,0x12,0x40,0x12,0x40,0x12,0x40,0xFF,0xFC,0x12,0x42,
0x12,0x42,0x12,0x42,0x12,0x42,0x3F,0xE2,0x10,0x02,0x00,0x0E,0x00,0x00,0x00,0x00,
//--气--
0x02,0x00,0x04,0x00,0x1A,0x00,0xE2,0x00,0x2A,0x00,0x2A,0x00,0x2A,0x00,0x2A,0x00,
0x2A,0x00,0x2A,0x00,0x2B,0xF8,0x28,0x04,0x60,0x02,0x20,0x01,0x00,0x0E,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
};
/*****函数声明*****/
voiddisplay1(void);
voiddisplay2(void);
voiddisplay3(void);
voiddisplay4(void);
/*****n(us)延时子程序*****/
voidDelayUs(uintN)
{
uintx;
for(x=0;x<=N;x++);
}
/*****中断服务程序*****/
voidintersvr0(void)interrupt0using1
{
KY=~KY;//每个摇动来回水银开关会在摆幅两端分别产生下降沿中断,只提取其中一次(从左向右摇才显示)
if(KY==0)
{
num++;//计算中断次数
switch(pic)//选择画面
{
case0:
{display1();}break;
case1:
{display2();}break;
case2:
{display3();}break;
case3:
{display4();}break;
default:
{display1();}
}
}
}
/*****显示子程序1(汉字)*****/
voiddisplay1(void)
{
uchari;
DelayUs(5200);//此处延时时间依各硬件差别而各不相同,试着调整使得显示内容居中即可
for(i=0;i<48;i++)
{
P1=~hanzi[i*2];
P2=~hanzi[i*2+1];
DelayUs(90);
}
}
/*****显示子程序2(LOVE)*****/
voiddisplay2(void)
{
uchari;
DelayUs(4200);
for(i=0;i<64;i++)
{
P1=~love[i*2];
P2=~love[i*2+1];
DelayUs(100);
}
}
/*****显示子程序3(心形图案)*****/
voiddisplay3(void)
{
uchari;
DelayUs(4200);
for(i=0;i<64;i++)
{
P1=~loveyou[i*2];
P2=~loveyou[i*2+1];
DelayUs(120);
}
}
/*****显示子程序4(呵呵o(∩_∩)o图案)*****/
voiddisplay4(void)
{
uchari;
DelayUs(3800);
for(i=0;i<64;i++)
{
P1=~hehe[i*2];
P2=~hehe[i*2+1];
DelayUs(100);
}
}
/*****主函数*****/
voidmain(void)
{
IT0=1;
EX0=1;
EA=1;//开中断,下降沿中断
KY=0;
while
(1)//主程序中只检测按键
{
if(KEY==1)//画面切换键按下
{
DelayUs(10000);//按键去抖
if(KEY==1);
pic++;}
if(pic>3)pic=0;
}
}
/*****END*****/
7
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 摇摆 设计 制作