基于AT89S52的16LED摇摇棒 - 图文
更新时间:2024-01-01 14:43:01 阅读量: 教育文库 文档下载
单片机原理与应用 课程设计报告
作品名称: 基于AT89S52的16LED摇摇棒
专业班级: 测控技术与仪器 学 号: 姓 名: 徐达健
指导老师:
2009年6月
单片机课程设计报告
目 录
一、作品说明……………………………………………………2 二、系统总体设计………………………………………………4 三、硬件设计……………………………………………………6 四、软件设计……………………………………………………7 五、系统调试与分析……………………………………………8 六、课程作品制作体会…………………………………………11
- 1 -
单片机课程设计报告
基于AT89S52的16LED摇摇棒设计
一、作品说明
摇摇棒是如今流行的一种玩具,在各种聚会、节日中均见得到它的身影。本设计也追随着摇摇棒的原理,利用人眼的视觉暂留特性,通过AT89S52单片机对16只高亮度LED发光二极管进行控制, 配合手的左右摇晃就可呈现一幅完整的画面。 该摇摇棒具有如下功能:
1) 显示 “欢迎使用神奇魔幻摇摇棒!”; 2) 显示 “o(∩_∩)o”微笑图案; 3) 显示 心形图案; 4) 显示 “LOVE”;
5) 可以通过开关实现转换,轮流显示并循环。
具体实物图如下:
- 2 -
单片机课程设计报告
二、系统总体设计
- 3 -
单片机课程设计报告
1、总体方案比较与论证
所谓的“摇摇棒”,其实就是一个循环的LED显示,利用人的视觉滞留产生静态显示的现象。要实现这个目标,就要求延时部分做的比较小,所以采用石英晶体振荡器。而目前能够实现这种功能的器件有很多种,不同的类型的器件也能够很好的完成。
本作品本着方便、价格低廉的原则,采用单片机控制,由水银开关的闭合对单片机产生外部中断,从而对中断进行采集。到达一定数量便进行图象的转换。整个系统由单片机控制模块,开关及电源模块和输出显示模块三个部分构成。系统框图如下:
单片机 输出显示LED
水银开关 2、主要部件原理
(1)单片机控制模块
用单片机想要控制LED显示只需要定时输出就可以,但每个人摇动的速度不一样,如何准确的并稳定的变换图案呢?这就需要用到外部中断。将水银开关的两个引脚一端接VCC,一端接GND,这样的话,当摇棒向一边运动时LED按照程序编辑好的规律显示,而向另一边运动时LED全灭,此时一个周期就会产生一个下跳沿的信号,信号传递给单片机的nINT0产生中断,对中断的数量计数,当计到10时便转换显示的图案,当依次显示完后便回到初始状态进行循环。
由于人的视觉滞留时间长达0.1s,所以在每显示完一列LED后加入一段合适的延时,如5ms,每个字之间加入延时如15ms,这样,我们就能看到静态的稳定的字,并且每个字之间是有空隙的。为了让字能够在空间的中部显示,在启动中断显示后延时一段合适的时间,使棒在半圆轨迹的大约1/4处开始显示,这样看到的字方向上才比较正。
- 4 -
单片机课程设计报告
(2)水银开关
水银开关,又称倾侧开关,是电路开关的一种,以一接著电极的小巧容器储存著一小滴水银,容器中多数注入惰性气体或真空。
仔细观察水银开关,实际上他是一个封闭的玻璃管,里面有两个分开着的导线和一段水银球,当玻璃管的平衡位置变化时,水银球会来回移动,当水银球移动到两根导线时,因水银是金属-导体,故电路变为通路,此时接收器处于工作状态;反之,水银球远离两根导线时为断路,此时接收器处于非工作状态。
3、系统设计
本系统包括单片机控制模块,开关及电源模块和输出显示模块三个部分。
单片机控制模块由Keil C进行编写,实现起来简单,主要有三部分,主程序、中断服务部分还有字符点阵。
开关及电源模块采用5V变压器并配合水银开关使用。输出显示模块采用16个LED灯,在版上一字排开。
- 5 -
单片机课程设计报告
三、硬件设计
硬件连接上用水银开关产生的电平转换引发中断,传递给单片机,再由单片机调用点阵文件输出到LED上。
摇摇棒设计电路图
AT89S52单片机作为控制器,在它的P0、P2口接有16只以共阳的方式连接的高亮度LED,由单片机输出低电平点亮。P0口处接上拉电阻RA1。串在LED公共端的二极管D1会产生一定的压降,用来保护LED。K1是画面切换开关,用于切换显示不同内容;S1为水银开关。系统电源VCC为5V,实际使用时用3节干电池串联4.5V即可。
16只LED发光管作为画面每一列的显示,左右摇晃起到了扫描的作用,人眼的视觉暂留现象使得看到的是一幅完整的画面。
水银开关的作用:棒在摇动时,只能在朝某一方向摇动时显示,否则会出现镜像字或镜像画面,所以通过接一只水银开关来控制,使摇摇棒从左向右摇动时将内容显示出来。
- 6 -
单片机课程设计报告
四、软件设计
软件部分包括主函数程序、中断服务程序、延时子程序以及四个显示子程序。软件设计流程如下:
- 7 -
单片机课程设计报告
五、系统调试与分析
主要测试单片机的工作情况,能否正常用LED显示出各图案,并且记录各图案持续的时间和稳定显示度以及一个循环周期所用的
- 8 -
单片机课程设计报告
时间。并且检查LED的发光亮度,使之可以明显的分辩出来。
图 案 欢迎使用神奇魔幻摇摇棒 心形 笑脸 LOVE 稳定程序 较稳定 较稳定 较稳定 较稳定 经过测试,当摆动的幅度和速度适当时,各个画面均可以明显的显示出来。整体来说,本方案设计比较成功。
拍摄照片:
- 9 -
单片机课程设计报告
- 10 -
单片机课程设计报告
- 11 -
单片机课程设计报告
六、课程作品制作体会
通过一学期的《单片机原理与应用》课程的学习,对单片机有了一定的认识和体会。作为机械电子方向的学生,要想深入发展,尤其是对自动化感兴趣的我,单片机是必须要学好的一门课程。从小喜欢敲敲打打,对制作单片机很感兴趣,满心希望能做出一个让自己满意的作品。
但是想起来容易做起来难,由于种种原因,我在学习、制作过程中遇到了很多的困难。首先,单片机的先修课程《微机原理》这门课,我们虽然上学期学过,但是当时掌握效果很差,所以在单片机课程开始阶段,涉及到相关知识时感到很吃力,花了很多的时间去“补课”。其次,焊接的基本功不扎实,上学期虽然做过焊接收音机的实习,但是那次是在设计电路已给出、精密度较低的情况下糊里糊涂的完成的,跟这次课程设计要完成的任务差距甚大,所以也花了不少的代价去弥补基本功的不扎实。最后还有一个问题是,原机械专业及物理方面共八门考试,让自己的复习、制作过程相当紧张,而机电院还安排了在长沙各工厂的认识实习,时间相当紧迫。我能做的就是,抓紧时间,少走弯路,提高效率。
请教了有经验的同学以后,我开始在网上搜各种相关程序和资料,根据自己的想法进行修改和整理。由于以前学过C语言,有一定的基础,所以就不顾老师强烈推荐的汇编语言,毅然选择用C语言设计了。相关知识理解得差不多了以后便开始设计电路。由于画
- 12 -
单片机课程设计报告
图的软件应用不很熟悉,又没有经验,刚开始的图又丑又乱,焊起来很是麻烦,改了又改,加上基本功的不扎实,因此烧坏了第一块板子……沮丧之后,我请教了上届教物的一个师兄,在他的指导下我修改并完善了线路图,重新买了板子从头做起。这次为了避免犯大的错误,我遇到没有把握的地方认真分析,实在不会的就及时请教,一点一点踏实做起。
然而,好事多磨,就在我仔细焊接完成之后,测试的时候却发现显示的字和画面都是反的!我又认真检查、分析了一下,发现自己把S52的两个端口搞反了,水银开头的方向也接反了。问题找到了,我又耐着性子,把线拆了重新焊起。一鼓作气,终于再次把电路板焊好。这次,终于成功了!
通过此次课程作品制作,我对书本上很多以前不理解的内容有了新的实际的认识,也把很多抽象的知识具体化了,收获颇多。看来,很多时候我们只是读书是远远不够的,纸上得来终觉浅,绝知此事要躬行,尤其是对于我们这些理工科的学生。以后的学习过程中,希望能有更多的实践的机会。
- 13 -
单片机课程设计报告
附:
一、硬件电路图
#i
二、源程序
nclude
#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,
- 14 -
单片机课程设计报告
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[] = { //-- 欢 --
0x04,0x10,0x34,0x08,0xC4,0x06,0x04,0x01, 0xC4,0x82,0x3C,0x8C,0x20,0x40,0x10,0x30, 0x0F,0x0C,0xE8,0x03,0x08,0x0C,0x08,0x10, 0x28,0x60,0x18,0xC0,0x00,0x40,0x00,0x00, //-- 迎 --
0x40,0x00,0x42,0x40,0x44,0x20,0xC8,0x1F, 0x00,0x20,0xFC,0x47,0x04,0x42,0x02,0x41, 0x82,0x40,0xFC,0x7F,0x04,0x40,0x04,0x42, 0x04,0x44,0xFE,0x63,0x04,0x20,0x00,0x00, //-- 使 --
0x40,0x00,0x20,0x00,0xF8,0xFF,0x07,0x00, 0x04,0x80,0xF4,0x43,0x14,0x45,0x14,0x29, 0x14,0x19,0xFF,0x17,0x14,0x21,0x14,0x21, 0x14,0x41,0xF6,0xC3,0x04,0x40,0x00,0x00,
- 15 -
单片机课程设计报告
//-- 用 --
0x00,0x80,0x00,0x60,0xFE,0x1F,0x22,0x02, 0x22,0x02,0x22,0x02,0x22,0x02,0xFE,0x7F, 0x22,0x02,0x22,0x02,0x22,0x42,0x22,0x82, 0xFF,0x7F,0x02,0x00,0x00,0x00,0x00,0x00, //-- 神 --
0x08,0x01,0x88,0x00,0x49,0x00,0xEE,0xFF, 0x58,0x00,0x88,0x00,0x00,0x00,0xF8,0x1F, 0x88,0x08,0x88,0x08,0xFF,0xFF,0x88,0x08, 0x88,0x08,0xFC,0x1F,0x08,0x00,0x00,0x00, //-- 奇 --
0x40,0x00,0x40,0x00,0x44,0x00,0x44,0x3E, 0x64,0x12,0x54,0x12,0x4C,0x12,0x47,0x12, 0x4C,0x3F,0x54,0x42,0x74,0x80,0xC6,0x7F, 0x44,0x00,0x60,0x00,0x40,0x00,0x00,0x00, //-- 魔 --
0x00,0x40,0x00,0x30,0xFE,0x8F,0x4A,0x80, 0xAA,0x5F,0x9A,0x4A,0xFE,0x2A,0xAA,0x1A, 0xCB,0x0F,0xAA,0x7A,0xFE,0x8A,0x9A,0xAA, 0xAA,0x8F,0x6B,0x80,0x22,0xE0,0x00,0x00, //-- 幻 --
0x80,0x20,0xC0,0x30,0xA0,0x28,0x98,0x24, 0x87,0x22,0x80,0x21,0xC4,0x30,0x04,0x60, 0x04,0x00,0x04,0x20,0x04,0x40,0x04,0x80, 0x04,0x40,0xFE,0x3F,0x04,0x00,0x00,0x00, //-- 摇 --
0x10,0x02,0x10,0x42,0x10,0x81,0xFF,0x7F, 0x90,0x04,0x54,0x05,0xCC,0xF4,0xB4,0x44, 0x84,0x44,0xBC,0x7F,0x82,0x44,0xA2,0x44, 0x9B,0xF4,0x82,0x06,0x00,0x04,0x00,0x00, //-- 摇 --
0x10,0x02,0x10,0x42,0x10,0x81,0xFF,0x7F, 0x90,0x04,0x54,0x05,0xCC,0xF4,0xB4,0x44, 0x84,0x44,0xBC,0x7F,0x82,0x44,0xA2,0x44, 0x9B,0xF4,0x82,0x06,0x00,0x04,0x00,0x00, //-- 棒 --
0x10,0x04,0x10,0x03,0xD0,0x00,0xFF,0xFF, 0x90,0x00,0x54,0x05,0x44,0x12,0xD4,0x15, 0x74,0x14,0x5F,0xFF,0xD4,0x14,0x54,0x15, 0x56,0x12,0x44,0x06,0x40,0x02,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,
- 16 -
单片机课程设计报告
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); //此处延时时间依各硬件差别而各不相同,试着调整使得显示内容居中即可
- 17 -
单片机课程设计报告
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);
- 18 -
单片机课程设计报告
} }
/*****主函数*****/ 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; } }
/*****END*****/
- 19 -
正在阅读:
新版沪科版八年级物理全册 8.2 科学探究 液体的压强导学案10-17
高中物理动量习题集06-01
积极分子考察写实登记表模板12-27
2011年初级会计职称考试--初级会计实务考试大纲 - 图文05-20
生化复习题111-17
旅游文化课程论文08-20
分组协作学习在计算机实践课中的应用08-19
这也是一种爱作文02-04
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 摇摇
- 基于
- AT89S52
- 图文
- 16LED
- 《离骚》同步练习题
- 最新学前教育幼儿园小班主题教案-亲亲热热一家人 doc
- WINDOWS操作系统网络命令
- 准确的品牌定位是企业成功的关键
- 江苏省如皋中学2018—2019学年度第二学期高三数学三模模拟试卷
- 论离婚妇女权益的保障
- 中国太阳能仪表行业发展现状与市场商机分析报告(2014-2019)
- 2012年教育教学工作计划
- 铁路信号计算机联锁效系统毕业设计
- 一个化妆品配方师的分享
- 益达市场分析报告
- 2017苏教版语文一年级下册第四单元测试题
- B市政工程备案资料
- 山东大学版五年级传统文化计划及备课
- 浅析建筑工程施工后期安全管理
- 西班牙语第一册讲义
- 男人补肾良方
- 初中化学课程标准(修订稿) - 2
- 2012中考化学模拟试题(五)
- 放射治疗剂量学考试模拟试题