基于单片机实现的显示摇摇棒的系统设计毕业设计论文word格式文档格式.docx
《基于单片机实现的显示摇摇棒的系统设计毕业设计论文word格式文档格式.docx》由会员分享,可在线阅读,更多相关《基于单片机实现的显示摇摇棒的系统设计毕业设计论文word格式文档格式.docx(21页珍藏版)》请在冰豆网上搜索。
单片机C51的端口较多,可实现显示数据并行传输,速度较快,且外围电路简单,调试较方便。
缺点是:
为了增大显示清晰度,除去可能由背景LED灯占用的端口外,单片机剩余端口无法使线阵中LED灯数量扩展至24只以上;
单片机使用的晶振频率较大,软件不易实现对计数的控制。
方案二:
由单片机AT89C2051最小系统、寄存器组、驱动电路、LED线阵和电源部分组成,原理方框图如图-2所示。
图2方案二系统设计框图
该方案通过单片机将列编码输入寄存器,通过寄存器组移位功能实现字符图像的扫描输出。
与方案一比较,方案二中单片机所需输出端口很少,可选用小型单片机AT89C2051,不仅功能强,而且尺寸小,价位比较低,其数据输出串口输出方式,所需端口较少,编程同C51兼容,总体线路较简单,电路板占用面积小;
利用寄存器移位功能可轻易实现显示LED灯数量的扩展,不仅具备方案一的大部分优点,而且外围器件更少,能耗更低,电路调试简单,故选择方案二。
2.2系统总体结构设计及说明
以小型单片机AT89C2051为控制核心,使用三只串行连接的八位移位寄存器74HC164组成具有24位移位功能的寄存器组,控制由24只LED灯组成的线阵扫描显示字符或图形,并附加有自动断电控制部分,降低能源消耗,电源采用四节1.5V的可充电电池供电,系统总框图如图-3所示。
图3系统总体结构框图
2.3系统硬件理论设计、电路原理图
2.3.1单片机AT89C2051最小系统
单片机最小系统原理如图-4所示。
AT89C2051有20个引脚,采用DIP-20封装.其内部含2KB的FLASH存储器,128B的RAM.它为用户提供了15条可编程双向I/O口线.P1口是一个完整的8位双向I/O口,另有2个外中断口(INT0,INT1)。
2个16位可编程定时计数器信号输入端(T0,T1),全双向串行通信口数据接收端RXD和数据发送端TXD,1个模拟比较放大器输入端(P1.0,P1.1为同向或反向输入端。
另外,AT89C2051的时钟频率可为零,具备可用软件设置睡眠省电功能。
最小系统包括了时钟电路、复位电路等,另外还设置了按键,锁存器,LED管等外围电路。
在89C2051引脚X1和X2跨接晶振和微调电容就构成了时钟电路,系统的时钟脉冲由它提供.复位电路不接按键,使其始终处于无效状态.。
图4单片机最小系统
2.3.2寄存器组电路
寄存器组电路如图-5所示,寄存器组由三个八位移位寄存器74HC164组成,时钟触发信号同时来自单片机P3.1口,寄存器U3输入端接入来自P3.0口的串行输出信号,其余两寄存器输入端接在左边寄存器的输出端上,组成的寄存器组具有24位移位功能,可以满足按列至少16只LED灯扫描显示的要求。
图5寄存器组电路
2.2.3扫描控制开关
该开关接线原理图如图-6(a)所示,扫描控制开关起着摆动传感作用,每当显示棒摆动至左端位置时,开关瞬时接通,中断信号送入单片机,控制若干次扫描信号输出。
采用机械式开关,如图-6(b)所示,红色弧线代表摆子的导轨,限制其摆动轨道,P1和P2为左右触点,P1接至中断口INTO,P0接地,该开关材料和制作简单,但摆子转轴和地线接触可靠性较差。
(a)开关接线原理图(b)机械开关
图6扫描控制开关
采用光限位开关,可靠性很强,但摆棒的粗细需匹配,开关体积过大,而且难以购买,价格昂贵。
方案三:
采用水银开关,其体积较小,价格适中,可靠性强,选择此方案。
2.3.4自动掉电控制电路
自动掉电控制电路原理如图-7所示,其中按键S作为电源开关和显示切换开关,按下此键时,PNP型三极管进入饱和导通状态,接通单片机电源,此时由程序控制单片机持续送入低电平信号,使三极管保持导通状态;
若一段时间内扫描控制开关和显示切换开关均未送入中断信号,则单片机送出高电平,三极管截止,系统进入休眠省电状态;
未进入省电状态时再次按下开关S,单片机产生中断,变换显示的字符或图形。
图7自动掉电控制电路
2.3.5LED驱动及显示电路
LED驱动及显示电路如图8所示,LED灯点亮所需电流一般为三至五毫安,八只LED总电流只有几十毫安,因此驱动采用一只普通三极管即可,图中二极管D1~D3起分压作用,所有LED点亮的控制信号来自三个寄存器74HC164。
图8LED驱动及显示电路
2.3.6系统总图:
将以上设计的单片机最小系统、寄存器组、扫描控制、自动断电控制、驱动与显示等各部分电路进行接口连接,构成LED显示棒的系统总体电路图。
(见附件B)
2.4系统软件设计、各程序流程图
程序分为若干子程序,硬件的功能描述可完全在软件上实现。
1.主程序流程图如图9(a)所示,需实现的功能是初始化各端口和变量。
判断图文切换按键和中断开关是否被按下,若没按下,则延时若干秒后进入休眠省电模式;
若按下,则进行字符的切换显示。
2.按键中断实现数据扫描切换程序流程图如图-9(b)所示,单片机外部中断源有2个,采用外部中断0作为判断是否摇摆的端口,该端口连接水银开关,如果有摇摆,则触发外部中断,进行扫描数据处理。
3.赋值子程序流程图如图10(a)所示,赋值前先检测中断是否有效,如有效,则将要显示的字符数据依次送入寄存器,送完后返回。
否则返回到中断入口处等待下一次中断的到来。
4.定时间隔子程序流程图如图10(b)所示,首先判断扫描间隔是否太大,如果太大,则使用默认间隔,否则启动定时器,在定时期间判断中断是否又被触发,如果有,则定时停止,强行返回。
否则等到定时结束后再返回到扫描子程序中。
图10程序流程图2
3系统实现
3.1硬、软件分别调试及联合调试
3.1.1阶段调试
各部分线路连接前对各元器件的功能进行检测,确保元件功能正常后,再对各局部电路功能进行调试。
寄存器组电路调试:
利用函数发生器产生的方波作为时钟信号,对进行移位功能测试。
LED线阵驱动及显示电路调试:
输入稳压源产生的6V直流稳定电压,用万用表分别测出一只至八只LED全亮时的电流,改变限流电阻大小,直至电流大小和显示正常。
单片机最小系统调试:
写入简单程序,用万用表测出相应端口的电压,判断出高低电平,改变外围元件参数,直至达到设计要求。
软件调试:
采用了自顶向下的调试方法,先调试功能电路,在调试整个系统,调试过程中软件调试和硬件调试相结合,提高了效率。
3.1.2联合调试
软、硬件联合调试:
当软硬件基本功能发分别调试后,进行联合调试,调试过程中出现的问题有:
字符呈倒立显示,文字只能显示中间部分等;
通过分析软件程序和硬件电路,对程序进行了大量的调试,最终实现了设计目标。
3.2方案的修改、说明
设计方案通过论证和实际测试,系统原理正确且可行,未作大量修改,只通过改变外围少量元件的参数对电路进行优化,逐步达到设计目标要求。
4系统测试
4.1实验、测试仪器与测试试验方法
基本仪器清单如表1所示。
表1基本仪器清单
仪器名称
型号
指标
生产厂家
数量
双踪示波器
SS-7802A
20Hz
日本岩崎
1
稳压电源
WD-5
+5V,-5V,-
启东市斯迈计算机厂
1
数字万用表
Vc9806+
位
深圳市胜高电子科技公司
4.2测试数据及测试结果分析
4.2.1测试数据
安装好电池后,按下电源开关,LED线阵开始闪烁,在光线适当的环境下摇动棒时在亮灯扇形区域能够让人分辨出初始的“A”字符,按下切换按钮开关,显示变换为“电”字,依次按下切换开关可分别辨认出国际奥委会五环图形,英文单词“Welcome”,汉字词组“美亚”和北京奥运会会徽图形;
当30秒内未摆动和按下中断开关,系统自动进入休眠省电模式。
4.2.2测试结果分析
5设计总结
本LED显示棒可以实现以下要求或功能:
1.该显示棒依靠LED显示字符或图形,且24只LED灯呈线状排列,LED数量超过至少使用16只的要求。
2.显示棒摇动时形成的亮灯区域能让人分辨出字符“A”汉字“电”和国际奥委会五环图形。
3.显示棒摇动时形成的亮灯区域能让人分辨出汉字词组“美亚”和北京奥运会会徽图形;
英文单词“Welcome”稍有些模糊。
4.显示棒具有自动断电功能,三十秒内不使用则将进入休眠省电状态,以降低能耗。
本设计制作完成了题目要求的基本部分的全部要求和发挥部分的大部分要求,而且具有一定的特色功能。
随着科技进步和生活水平的提高,越来越多的高科技的电子产品逐渐融入日常生活中,该种显示棒操作简易、效果新奇,深具吸引力,市场潜力巨大。
当然,我们的设计还存在着一些缺陷,由于设计时间紧迫,字符或图形编码设计时,水平分格较少,导致显示的水平幅度较低;
由于扫描时间间隔设定的偏差,显示时出现少量的叠影,同时显示的稳定还有待进一步的提高,在此恳请各位老师批评指正。
参考文献
[1]赵建领.51系列单片机开发宝典[M].北京:
电子工业出版社,2007.
[2]边春元等.C51单片机典型模块设计及应用[M].北京:
机械工业出版社,2008.
[3]彭为等.单片机典型系统设计实例精讲[M].北京:
电子工业出版社,2006.
[4]徐爱钧等.KeilC51V7.0单片机高级语言编程与μVision2应用实践[M].北京:
电子工业出版社,2008.
[5]李朝青.单片机&
DSP外围数字IC技术手册(第2版)[M].北京:
北京航空航天大学出版社,2005.
[6]中国电子网..
[7]51单片机学习网.http:
//www.51bs51.com.
[8]电子电路图网..
[9]周志敏等.集成稳压电源电路图集[M].北京:
中国电力出版社,2008.
附录A:
系统操作说明
该系统实现了一个基于LED的显示棒,24只LED灯呈线状排列,摇动时形成的亮扇形区域能够让人分辨出字符,汉字,英文单词,汉字词组以及多种图形。
(1)摇动时或摇动前将握柄处按钮开关按下,此时电源被接通,电路被触发而启动;
(2)供电部分是4节1.5V5号电池,供电电压为6V;
(3)按下显示切换按钮开关,可切换显示的内容;
(4)长期不使用时,请取出电池,另行保管。
附录B:
系统总电路原理图
附录C:
系统程序清单
#ifndef__PS2__
#define__PS2__
//#definedebugprint1
#include<
reg51.h>
stdio.h>
absacc.h>
string.h>
#include<
intrins.h>
typedefunsignedcharbyte;
typedefunsignedintword;
////////////////////////////////////////////////////////////////////////////////////////////////////////
#definesetbit(B,b)((B)|=(0x01<
<
(b)))
#defineclrbit(B,b)((B)&
=~(0x01<
#definetstbit(B,b)((B)&
(0x01<
#defineASWORD(x,ofs)(*((word*)&
x+ofs))
#defineASBYTE(x,ofs)(*((byte*)&
#defineXTALL11059200L
#defineBAUD9600
#defineBAUDRATE(x)(256-(byte)((XTALL)/(32L*12L*(x))))
#defineDELAY_US(x)(256-(word)(x*((XTALL)/(12*1000*1000L))))
#defineDELAY_MS(x)(256-(word)(x*((XTALL)/(12L*1000L))))
#defineDLY_15MS(word)33333L
#defineTIMEOUT0x8000
//#definePS2MAX14
//#defineKEYMAX10
sbitKEY=P1^4;
sbitLED_POWER=P1^7;
sbitLS164_DATA=P3^0;
sbitLS164_CLK=P3^1;
sbitPOWER=P1^5;
sbitGND=P3^7;
sbitTEST=P3^5;
#include"
qs3kb.h"
bytecodeA0[60]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0xc0,0x80,0x87,0x8f,0x81,0xc0,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};
bytecodeA1[60]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0xe0,0x00,0x00,0x38,0x78,0xf8,0xf8,0xf8,0x38,0x00,0x00,0xc0,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};
bytecodeA2[60]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0xe1,0x01,0x03,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x07,0x01,0xc1,0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};
//bytecodeA0[24]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0xc0,0x80,0x87,0x8f,0x81,0xc0,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};
//bytecodeA1[24]={0xff,0xff,0xff,0xff,0xff,0xf8,0xe0,0x00,0x00,0x38,0x78,0xf8,0xf8,0xf8,0x38,0x00,0x00,0xc0,0xf8,0xff,0xff,0xff,0xff,0xff};
//bytecodeA2[24]={0xff,0xff,0xfd,0xe1,0x01,0x03,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x07,0x01,0xc1,0xf1,0xff,0xff};
bytecodedian0[60]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0xf8,0xf9,0xf9,0xf9,0xf9,0xf9,0x30,0x30,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf8,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};
bytecodedian1[60]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x3f,0x3f,0x3f,0x3f,0x3f,0x00,0x10,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};
bytecodedian2[60]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x0f,0xcf,0xcf,0xcf,0xcf,0xcf,0x03,0x00,0xc8,0xcc,0xcc,0xcc,0xcc,0xcc,0x0c,0x8c,0xf8,0x71,0xf3,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};
bytecodewuhuan0[60]={0xff,0xff,0xff,0xff,0xff,0xfc,0xf0,0x73,0x3f,0x9f,0x9f,0xcf,0xcf,0xcf,0xcf,0x8f,0x9f,0x1f,0x37,0x73,0xf0,0xfc,0xf8,0x70,0x37,0x1f,0x9f,0x8f,0xcf,0xcf,0xcf,0xcf,0xcf,0x9f,0x1f,0x37,0x70,0xf0,0x0e,0xf8,0x70,0x37,0x1f,0x9f,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0x9f,0x3f,0x37,0x70,0xf8,0xff,0xff,0xff,0xff,0xff};
bytecodewuhuan1[60]={0xff,0xff,0xff,0xff,0xff,0x8f,0x07,0x71,0xf9,0xfc,0xfc,0xfe,0xfe,0xfc,0x70,0x32,0x1c,0xc8,0xc1,0x41,0x07,0x8f,0x0f,0x01,0xc0,0xc8,0x9c,0x34,0x70,0xf0,0x70,0x36,0x9e,0x9c,0xcc,0xc1,0x03,0x0f,0xcf,0x0f,0x03,0x91,0x19,0xf0,0xfc,0xfe,0xfe,0xfe,0xfe,0xfc,0xfc,0xf9,0xf3,0x07,0x0f,0xff,0xff,0xff,0xff,0xff};
bytecodewuhuan2[60]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xef,0xcf,0x0f,0x07,0x73,0xf1,0xf9,0xf9,0xfc,0xfc,0xfc,0xfc,0xf9,0xf9,0xf3,0x37,0x0f,0x8f,0x07,0x63,0xf1,0xf9,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xf9,0xf9,0x73,0x17,0x0f,0xcf,0xef,0xef,0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};
bytecodewelcome0[60]={0xff,0xff,0x10,0x10,0xff,0xff,0x10,0x10,0xff,0xff,0x10,0x10,0xff,0x10,0x10,0x1f,0x1f,0x11,0x11,0xff,0x1f,0x10,0x10,0x1f,0xff,0xff,0xff,0xff,0xf0,0x30,0x1f,0x1f,0x10,0x10,0xff,0xf1,0x30,0x1f,0x1f,0x30,0xf8,0xff,0x10,0x10,0x10,0xf8,0xff,0xf8,0x10,0x10,0x10,0xff,0xff,0x10,0x10,0x1f,0x11,0x11,0xff,0xff};
b