单片机的控制系统课程设计报告Word文档格式.docx
《单片机的控制系统课程设计报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《单片机的控制系统课程设计报告Word文档格式.docx(24页珍藏版)》请在冰豆网上搜索。
而个人电脑中也会有为数不少的单片机在工作。
汽车上一般配备40多部单片机,复杂的工业控制系统上甚至可能有数百台单片机在同时工作。
单片机的数量不仅远超过PC机和其他计算的综合,甚至比人类的数量还要多。
1.2本课题研究的主要内容
按键控制8×
8LED点阵显示不同内容。
每个按键均有对应数字显示;
当按键时,按键对应的数字在8×
8LED点阵上显示,延时后显示按键对应的数字。
本设计所介绍的8×
8LED点阵显示器可以横向自右向左地循环拉幕显示0~9这十个数字和空字符。
在程序中可以相应地改变显示字符的样式和显示的个数。
此显示系统也可用于不同的场合显示信息。
第2章硬件设计
2.1各部分原件介绍
随着单片机功能集成化的发展,其应用领域也逐渐地由传统的控制,扩展为控制处理数据处理以及数字信号处理,DSP(DigitalSignalProcessing)等领域。
凌阳的16位单片机就是为适应这种发展而设计的。
她的CPU内核采用凌阳最新推出的MicrocontrollerandSignalProcessor16位微机处理器芯片,以下简称&
micro;
’nSP。
围绕micro;
’nSP所形成的16位u’nSP系列单片机,以下简称&
’nSP家族。
采用的是模块式集成结构,它以&
’nSP内核为中心集成不同规模的ROMPAM和功能丰富的各种外设部件。
&
’nSP内核是一个通用的和结构。
除此之外的其它功能模块均为可选结构。
以及这种结构可大可小可有可无,借助这种通用结构附加可选结构的积木式的构成,便可成为各种系列的派生产品,以适合不同场合,这样做无疑会使每种派生产品具有更强的功能和更低的成本。
’nSP家族有有以下特点:
体积小,集成度高,可靠性好易于扩展。
’nSP家族把各功能把各功能部件模块化地集成在一个芯片里。
内部采用总线结构,因为减少了各功能部件之间的连接,提高了其可靠性和抗干扰能力,另外,模块化的结构易于系列的扩展,以适应不同用户的需求。
具有较强的中断处理能力。
μ’nSPTM家族的中断系统支持10个中断向量及10余个中断源,适合实时应用领域。
高性能价格比:
μ’nSPTM家族片内带有高寻址能力的ROM,静态RAM和多功能的I/O口,另外μ’nSPTM的指令系统提供出具有较高运算速度的16位,16位的乘法运算指令和内积运算指令,为其应用添加了DSP功能,使得μ’nSPTM家族运用在复杂的数字信号处理方面既很便利又比专用的DSP芯片廉价。
当数字键按下时,在8×
8LED点阵上显示数字,显示时间为1s,之后显示数字键对应的图形。
其中各个键对应的数字和动态图形如下表2-1。
表2-1各个键对应的数字和动态图形
键对应功能
显示数字
对应动态图形
1
最下面红色的一排LED,向上移动直到最上面
2
最上面红色的一排LED,向下移动直到最下面
3
最下面和最上面分别红色的一排LED,分别向下和向上移动,直到两者相遇
4
最右边红色的一排LED,向左移动直到最左边
5
最左边红色的一排LED,向右移动直到最右边
6
最右边和最左边各红色的一排LED,分别向左边和右边移动,直到两者相遇
7
最右边红色的一排LED向左移动,同时最上面红色的一排LED向下移动,分别到最左边和最下面。
8
所有的绿色的LED全部点亮,之后所有红色的LED全部点亮
2.2硬件原理图
图2-14×
4键盘原理图
图中C1~C4为4×
4键盘的列扫描线,L1~L4为4×
4键盘的行扫描线。
先使行扫描线输出高电平,然后读取列扫描线的状态,得到与按键横向位置对应的4位列码;
如果是有键被按下时,则对应的列扫描线必然会被读回高电平,如果是无键盘按下时,则读取的列码必定全是0(低电平)。
这也就可以判断有无按键的按下了。
单片机与该电路连接时,使用4个端口作为输出口,接4条行扫描线;
使用4个端口作为输入口,接4条列扫描线。
使用SPCE061A的IOA8~15八个端口作4×
4键盘的扫描,IOA0~3接行扫描线,IOA4~7接列扫描线。
图2-2SPCE061A和4×
4键盘电路连接图
键盘按其接线方法有:
直接式键盘、行列式键盘(又称矩阵键盘)、串转并键盘等;
在本设计中,采用4X4的行列式键盘,即键盘排列为4行、4列,共16个按键。
4×
4键盘的电路图如图2-1所示,分别定义这16个按键盘为KEY1~16。
实验箱中8×
8点阵元件符号、内部结构如图2-3、图2-4所示。
图2-3LED点阵的元件符号
8×
8LED点阵可作为信息输出器件。
它是由发光二极管阵列按8排8列的方式排列起来,由x和y引脚输入的电信号对其进行选通,使不同位置的二极管被点亮,相应地显示出文字或图案等信息来。
图2-4LED点阵的元件内部结构
SPCE061A控制8×
8LED点阵显示数字或者字符和显示图形的原理相同,只要点亮8×
8LED点阵不同位置的LED就可以显示任意的字符。
如图2-5。
图2-5LED点阵显示示例
2.3硬件连接
硬件连接图如图2-6所示,IOA0~IOA7连接8×
8LED点阵GRE-1~8,IOA8~IOA15连接8×
8LED点阵RED-1~8,IOB8~IOB15连接8×
8LED点阵COM+1~8,IOB0~IOB7连接4×
4键盘L1~L4、C1~C4;
即用8pin排线分别连接J26和J33、J27和J32、J29和J34、J28和JP7。
图2-6硬件连接图
2.4本章小结
本章介绍了凌阳单片机、8×
8点阵的工作原理以及内部结构,并将二者有机的结合起来,用以实现本课程设计的目标。
单片机利用外部晶振作为时钟信号输入,RST端口接入上电复位信号使它加电后自动进行复位操作。
将要显示的字符码表编入单片机的程序中,由单片机控制时序输出相应的扫描数据和字符数据。
行码数据由单片机P0口输出,经一个双向总线收发器控制传输方向后进入LED点阵,点亮相应的发光二极管。
列码扫描信号由P3口输出后,直接输入LED点阵控制8列的扫描,每列选通时间为5ms,看上去就像8列同时显示的效果一样。
加上行中相应的LED灯被点亮,就能看到显示的字符了。
第3章软件设计
3.1程序的设计流程
程序设计流程图如图3-1所示。
图3-1程序流程图
3.2程序流程图介绍
在主程序里,初始化I/O口,由于要在中断中扫描键盘,所以需要开128Hz中断;
调用键盘程序取键值;
在8×
8LED点阵上显示键值数字:
数字键1~9的键值为相应的数字,0、F1~F4、DEL和ENT键的键值为“0”;
根据键值显示动态图片,各个动态图片符合实验要求。
程序部分见附录。
以显示数字“1”为例来说明显示数字和英文字符的原理。
同样先是从左到右有先后顺序的显示(也可以从右到左)。
如图4-31和图4-32,先给RED-1~8送数据“0xfffb”,即给IOA口送数据“0xfbff”,选中第三列列驱动信号,再给行驱动信号COM+1~8送数据“0x0044”,也即给IOB口送数据“0x4400”,就可以点亮第三列的两个红色的LED;
接着给RED-1~8送数据“0xfff7”,即给IOA口送数据“0xf7ff”,选中第四列列驱动信号,再给行驱动信号COM+1~8送数据“0x0042”,也即给IOB口送数据“0x4200”,就可以点亮第四列的两个红色的LED;
接着给RED-1~8送数据“0xffef”,即给IOA口送数据“0xefff”,选中第五列列驱动信号,再给行驱动信号COM+1~8送数据“0x007f”,也即给IOB口送数据“0x7f00”,就可以点亮第五列的七个红色的LED;
之后给RED-1~8送数据“0xffdf”,即给IOA口送数据“0xdfff”,选中第五列列驱动信号,再给行驱动信号COM+1~8送数据“0x0040”,也即给IOB口送数据“0x4000”,就可以点亮第六列的一个红色的LED;
由于CPU的工作频率很高,在视觉上就可以看到显示数字“1”。
3.3本章小结
本章介绍了将4×
4键盘和8×
8点阵连接起来的程序流程。
这是本课程设计的关键部分,对实现控制与否起到了决定性作用。
本实验中,扫描4×
4按键,根据取得键值决定显示数字和图形。
结果按照实验要求,比如当按下S9键时,根据实验二定义的键的功能,S9键是数字“1”键,这时候取得的键值应该为1,按照SPCE061A控制8×
8LED点阵显示数字的原理,显示数字“1”,显示一段时间后,熄灭所有的LED,按照图片移动的原理,点亮最下面红色的一排LED,向上移动直到最上面。
第4章结论与体会
本课程设计实现了4×
4键盘按键控制8×
8LED点阵显示不同内容,每个按键均有对应数字显示,当按键时,按键对应的数字在8×
完成此次设计后,我不仅能对单片机开发仿真软件熟练操作,能达到学以致用,同时还掌握了矩阵键盘和16×
16点阵的工作原理。
经过这一过程,我发现平常的学习在注重理论知识的掌握同时,要加强实验环节,只有通过不断地实践,我们才能把知识掌握的更牢固,理解的更透彻。
在做完设计之后,仔细回想这几天来的收获,和同学们互相帮助,共同进步,也复习了一学期来学过的一些知识。
还有,学会了处理问题的方法,以及更多的耐心和学习的能力。
通过本次课设,我不仅学到了关于单片机技术方面的许多专业知识,同时也让我感觉到团队合作的重要性。
其实如何有效和快速的找到资料也是课设给我的启发,利用好图书馆和网络,是资源的到最好的利用。
与他人交流思想是取得成功的关键,在交流中,不仅强化了自己原有的知识体系,也扩展了自己的思维。
课设是一个通过思考、发问、自己解惑并动手、提高的过程。
我会在以后的学习中不断学习,积累经验,完善自己。
参考文献
[1]肖洪兵.跟我学用单片机[J].北京:
北京航空航天大学出版社,2002.8
[2]何立民.单片机高级教程第1版[M].北京:
北京航空航天大学出版社,2001.6
[3]赵晓安.MCS-51单片机原理及应用[M].天津:
天津大学出版社,2001.3
[4]李广第.单片机基础第1版[M].北京:
北京航空航天大学出版社,1999.5
[5]徐惠民.单片微型计算机原理与应用[M].北京:
北京邮电大学出版社,1996.2
附录
//Theinformationcontainedhereinistheexclusivepropertyof
//SunnnorthTechnologyCo.Andshallnotbedistributed,reproduced,
//ordisclosedinwholeinpartwithoutpriorwrittenpermission.
//(C)COPYRIGHT2003SUNNORTHTECHNOLOGYCO.
//ALLRIGHTSRESERVED
//Theentirenoticeabovemustbereproducedonallauthorizedcopies.
//===========================================================================
//工程名称:
ex5_LED_Dots_Key
//功能描述:
4*4键盘在8*8LED点阵上的应用
//键值在LED点阵上显示
//涉及的库:
CMacro1016.lib
//组成文件:
main.c
//isr.asm/key.asm/system.asm
//SPCE061A.h/Key.h
//Resource.inc/SPCE061A.inc/Key.inc
//硬件连接:
IOA低八位连接GRE-
//IOA高八位连接RED-
//IOB低八位连接4*4键盘
//IOB高八位连接COM+
//==============================================================================
#include"
SPCE061A.h"
Key.h"
#defineGREEN0x00ff
#defineRED0xff00
#defineHaveKey1
#defineNoKey0
unsignedintColorBar[8]=
{0xffff,0xffff,0x1f00,0x3,0x3f3f,0x00ff,0x0300,0x001f};
unsignedintDT0_9[10][5]={//显示0,1,2,3,4,5,6,7,8,9数组
{0x3c00,0x2400,0x2400,0x2400,0x3c00},//0
{0x1000,0x1800,0x1000,0x1000,0x3800},//1
{0x3c00,0x2000,0x3c00,0x0400,0x3c00},//2
{0x3c00,0x2000,0x3c00,0x2000,0x3c00},//3
{0x2400,0x2400,0x3c00,0x2000,0x2000},//4
{0x3c00,0x0400,0x3c00,0x2000,0x3c00},//5
{0x3c00,0x0400,0x3c00,0x2400,0x3c00},//6
{0x3c00,0x2000,0x2000,0x2000,0x2000},//7
{0x3c00,0x2400,0x3c00,0x2400,0x3c00},//8
{0x3c00,0x2400,0x3c00,0x2000,0x3c00},//9
};
unsignedcharKeycode;
unsignedcharKeyFlag;
//按键标识
//============================================================================================
//语法格式:
voidInitialPort(void)
//实现功能:
初始化IO口
//参数:
无
//返回值:
voidInitialPort()
{
SP_Init_IOB(0xff00,0xff00,0xff00);
//设置B口高十二位为同相高电平输出,低四位为带下拉电阻输入
SP_Init_IOA(0xffff,0xffff,0x0000);
//设置A口为反相的低电平输出
}
voiddelay(charn)
延时子程序
charn-延时长度控制
inti,j;
for(i=0;
i<
n;
i++)
{
for(j=0;
j<
50;
j++);
F_ClearWatchdog();
//清看门狗
}
voidDisplayVal(unsignedcharkeyVal)
显示键值
待显示的键值
unsignedchari,k,BarMask=0x0200;
for(k=0;
k<
100;
k++)
{
for(i=0;
5;
{
//清看门狗
SP_Export(P_IOB_Data,BarMask);
SP_Export(P_IOA_Data,DT0_9[keyVal][i]);
//显示图片
delay
(1);
BarMask=BarMask<
<
1;
BarMask=0x0200;
}
voidTestLed(void)
测试LED,依次点亮红灯,绿灯,红绿灯
SP_Export(P_IOA_Data,0x00ff);
//点亮红灯
SP_Export(P_IOB_Data,0xff00);
delay(400);
SP_Export(P_IOA_Data,0xff00);
//点亮绿灯
SP_Export(P_IOA_Data,0xffff);
//点亮红绿灯
voidwalkman(void)
移动图标函数
voidWalkMan(void)
charstate=0;
unsignedinti,j,k,l=0,SelCol=2,Reload=1;
unsignedcharManIcon[8]={0x2000,0x9400,0xCA00,0x7A00,0xCA00,0x9400,0x2000,0x0000};
for(j=0;
20;
j++)
//清看门狗
switch(state)
case0:
//状态0,图形向右移动
Reload=Reload<
1;
if(Reload==0)
{
Reload=0x8000;
state=1;
}
break;
case1:
//状态1,图形向左移动
Reload=Reload>
>
{
Reload=0x0001;
state=