单片机课程设计报告.docx

上传人:b****3 文档编号:4415941 上传时间:2022-12-01 格式:DOCX 页数:19 大小:403.60KB
下载 相关 举报
单片机课程设计报告.docx_第1页
第1页 / 共19页
单片机课程设计报告.docx_第2页
第2页 / 共19页
单片机课程设计报告.docx_第3页
第3页 / 共19页
单片机课程设计报告.docx_第4页
第4页 / 共19页
单片机课程设计报告.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

单片机课程设计报告.docx

《单片机课程设计报告.docx》由会员分享,可在线阅读,更多相关《单片机课程设计报告.docx(19页珍藏版)》请在冰豆网上搜索。

单片机课程设计报告.docx

单片机课程设计报告

 

单片机原理与应用

课程设计报告

 

作品名称:

基于AT89S52的16LED摇摇棒

专业班级:

学号:

姓名:

指导老师:

 

2009年6月

目录

一、作品说明……………………………………………………2

二、系统总体设计………………………………………………4

三、硬件设计……………………………………………………6

四、软件设计……………………………………………………7

五、系统调试与分析……………………………………………8

六、课程作品制作体会…………………………………………11

 

 

基于AT89S52的16LED摇摇棒设计

一、作品说明

摇摇棒是如今流行的一种玩具,在各种聚会、节日中均见得到它的身影。

本设计也追随着摇摇棒的原理,利用人眼的视觉暂留特性,通过AT89S52单片机对16只高亮度LED发光二极管进行控制,配合手的左右摇晃就可呈现一幅完整的画面。

该摇摇棒具有如下功能:

1)显示“欢迎使用神奇魔幻摇摇棒!

”;

2)显示“o(∩_∩)o”微笑图案;

3)显示心形图案;

4)显示“LOVE”;

5)可以通过开关实现转换,轮流显示并循环。

具体实物图如下:

二、系统总体设计

1、总体方案比较与论证

所谓的“摇摇棒”,其实就是一个循环的LED显示,利用人的视觉滞留产生静态显示的现象。

要实现这个目标,就要求延时部分做的比较小,所以采用石英晶体振荡器。

而目前能够实现这种功能的器件有很多种,不同的类型的器件也能够很好的完成。

本作品本着方便、价格低廉的原则,采用单片机控制,由水银开关的闭合对单片机产生外部中断,从而对中断进行采集。

到达一定数量便进行图象的转换。

整个系统由单片机控制模块,开关及电源模块和输出显示模块三个部分构成。

系统框图如下:

输出显示LED

单片机

水银开关

2、主要部件原理

(1)单片机控制模块

用单片机想要控制LED显示只需要定时输出就可以,但每个人摇动的速度不一样,如何准确的并稳定的变换图案呢?

这就需要用到外部中断。

将水银开关的两个引脚一端接VCC,一端接GND,这样的话,当摇棒向一边运动时LED按照程序编辑好的规律显示,而向另一边运动时LED全灭,此时一个周期就会产生一个下跳沿的信号,信号传递给单片机的nINT0产生中断,对中断的数量计数,当计到10时便转换显示的图案,当依次显示完后便回到初始状态进行循环。

由于人的视觉滞留时间长达0.1s,所以在每显示完一列LED后加入一段合适的延时,如5ms,每个字之间加入延时如15ms,这样,我们就能看到静态的稳定的字,并且每个字之间是有空隙的。

为了让字能够在空间的中部显示,在启动中断显示后延时一段合适的时间,使棒在半圆轨迹的大约1/4处开始显示,这样看到的字方向上才比较正。

(2)

水银开关

水银开关,又称倾侧开关,是电路开关的一种,以一接著电极的小巧容器储存著一小滴水银,容器中多数注入惰性气体或真空。

  仔细观察水银开关,实际上他是一个封闭的玻璃管,里面有两个分开着的导线和一段水银球,当玻璃管的平衡位置变化时,水银球会来回移动,当水银球移动到两根导线时,因水银是金属-导体,故电路变为通路,此时接收器处于工作状态;反之,水银球远离两根导线时为断路,此时接收器处于非工作状态。

3、系统设计

本系统包括单片机控制模块,开关及电源模块和输出显示模块三个部分。

单片机控制模块由KeilC进行编写,实现起来简单,主要有三部分,主程序、中断服务部分还有字符点阵。

开关及电源模块采用5V变压器并配合水银开关使用。

输出显示模块采用16个LED灯,在版上一字排开。

 

三、硬件设计

硬件连接上用水银开关产生的电平转换引发中断,传递给单片机,再由单片机调用点阵文件输出到LED上。

摇摇棒设计电路图

AT89S52单片机作为控制器,在它的P0、P2口接有16只以共阳的方式连接的高亮度LED,由单片机输出低电平点亮。

P0口处接上拉电阻RA1。

串在LED公共端的二极管D1会产生一定的压降,用来保护LED。

K1是画面切换开关,用于切换显示不同内容;S1为水银开关。

系统电源VCC为5V,实际使用时用3节干电池串联4.5V即可。

16只LED发光管作为画面每一列的显示,左右摇晃起到了扫描的作用,人眼的视觉暂留现象使得看到的是一幅完整的画面。

水银开关的作用:

棒在摇动时,只能在朝某一方向摇动时显示,否则会出现镜像字或镜像画面,所以通过接一只水银开关来控制,使摇摇棒从左向右摇动时将内容显示出来。

 

4、软件设计

软件部分包括主函数程序、中断服务程序、延时子程序以及四个显示子程序。

软件设计流程如下:

5、系统调试与分析

主要测试单片机的工作情况,能否正常用LED显示出各图案,并且记录各图案持续的时间和稳定显示度以及一个循环周期所用的时间。

并且检查LED的发光亮度,使之可以明显的分辩出来。

图案

稳定程序

欢迎使用神奇魔幻摇摇棒

较稳定

心形

较稳定

笑脸

较稳定

LOVE

较稳定

经过测试,当摆动的幅度和速度适当时,各个画面均可以明显的显示出来。

整体来说,本方案设计比较成功。

拍摄照片:

 

 

 

 

 

六、课程作品制作体会

通过一学期的《单片机原理与应用》课程的学习,对单片机有了一定的认识和体会。

作为机械电子方向的学生,要想深入发展,尤其是对自动化感兴趣的我,单片机是必须要学好的一门课程。

从小喜欢敲敲打打,对制作单片机很感兴趣,满心希望能做出一个让自己满意的作品。

但是想起来容易做起来难,由于种种原因,我在学习、制作过程中遇到了很多的困难。

首先,单片机的先修课程《微机原理》这门课,我们虽然上学期学过,但是当时掌握效果很差,所以在单片机课程开始阶段,涉及到相关知识时感到很吃力,花了很多的时间去“补课”。

其次,焊接的基本功不扎实,上学期虽然做过焊接收音机的实习,但是那次是在设计电路已给出、精密度较低的情况下糊里糊涂的完成的,跟这次课程设计要完成的任务差距甚大,所以也花了不少的代价去弥补基本功的不扎实。

最后还有一个问题是,原机械专业及物理方面共八门考试,让自己的复习、制作过程相当紧张,而机电院还安排了在长沙各工厂的认识实习,时间相当紧迫。

我能做的就是,抓紧时间,少走弯路,提高效率。

请教了有经验的同学以后,我开始在网上搜各种相关程序和资料,根据自己的想法进行修改和整理。

由于以前学过C语言,有一定的基础,所以就不顾老师强烈推荐的汇编语言,毅然选择用C语言设计了。

相关知识理解得差不多了以后便开始设计电路。

由于画图的软件应用不很熟悉,又没有经验,刚开始的图又丑又乱,焊起来很是麻烦,改了又改,加上基本功的不扎实,因此烧坏了第一块板子……沮丧之后,我请教了上届教物的一个师兄,在他的指导下我修改并完善了线路图,重新买了板子从头做起。

这次为了避免犯大的错误,我遇到没有把握的地方认真分析,实在不会的就及时请教,一点一点踏实做起。

然而,好事多磨,就在我仔细焊接完成之后,测试的时候却发现显示的字和画面都是反的!

我又认真检查、分析了一下,发现自己把S52的两个端口搞反了,水银开头的方向也接反了。

问题找到了,我又耐着性子,把线拆了重新焊起。

一鼓作气,终于再次把电路板焊好。

这次,终于成功了!

通过此次课程作品制作,我对书本上很多以前不理解的内容有了新的实际的认识,也把很多抽象的知识具体化了,收获颇多。

看来,很多时候我们只是读书是远远不够的,纸上得来终觉浅,绝知此事要躬行,尤其是对于我们这些理工科的学生。

以后的学习过程中,希望能有更多的实践的机会。

 

 

附:

一、硬件电路图

#i

二、源程序

nclude

#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[]={

//--欢--

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,

//--用--

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,

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;

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)*****/

voiddisplay2(void)

{

uchari;

DelayUs(4000);

for(i=0;i<64;i++)

{

P0=~love[i*2];

P2=~love[i*2+1];

DelayUs(120);

}

}

/*****显示子程序3(心形图案)*****/

voiddisplay3(void)

{

uchari;

DelayUs(4000);

for(i=0;i<64;i++)

{

P0=~loveyou[i*2];

P2=~loveyou[i*2+1];

DelayUs(120);

}

}

/*****显示子程序4(呵呵o(∩_∩)o图案)*****/

voiddisplay4(void)

{

uchari;

DelayUs(4000);

for(i=0;i<64;i++)

{

P0=~hehe[i*2];

P2=~hehe[i*2+1];

DelayUs(120);

}

}

/*****主函数*****/

voidmain(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*****/

 

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1