单片机的控制系统课程设计报告.docx
《单片机的控制系统课程设计报告.docx》由会员分享,可在线阅读,更多相关《单片机的控制系统课程设计报告.docx(24页珍藏版)》请在冰豆网上搜索。
![单片机的控制系统课程设计报告.docx](https://file1.bdocx.com/fileroot1/2022-11/23/2ca3eea3-57a2-48b8-8fa9-3ac5f788fdb2/2ca3eea3-57a2-48b8-8fa9-3ac5f788fdb21.gif)
单片机的控制系统课程设计报告
第1章概述
1.1本课题研究的意义
随着现代电子技术的迅速发展,各种各样的LED显示屏、广告牌样式层出不穷,点阵屏具有高亮度、发光均匀、可靠性好等优点,它们已被广泛地应用于商业市场的各个邻域,如显示器、户外大屏幕、招牌广告、电子公告栏等等,它可以实时地显示时间、站点等信息。
单片机是指一个集成在一块芯片上的完整计算机系统。
尽管它的大部分功能集成在一块小芯片上,但是它具有一个完整计算机所需要的大部分部件:
CPU、内存、内部和外部总线系统,目前大部分还会具有外存。
同时集成诸如通讯接口、定时器,实时时钟等外围设备。
而现在最强大的单片机系统甚至可以将声音、图像、网络、复杂的输入输出系统集成在一块芯片上。
LED显示屏因其亮度高、方便维护和应用灵活等优点,给我们的生活带来很大便利,同时它也具有很大的开发价值。
在计算机出现以前,有不少能工巧匠做出了不少精巧的机械。
进入电器时代后,人们借助电气技术实现了自动控制机械,自动生产线甚至自动工厂,并且大大地发展了控制理论。
然而,在一些大中型系统中自动化结果均不理想。
只有在计算机出现后,人们才见到了希望的曙光。
如今借助计算机逐渐实现了人类的梦想。
但是,计算机出现后的相当长的时间里,计算机作为科学武器,在科学的神圣殿堂里默默地工作,而工业现场的测控领域并没有得到真正的应用。
只有在单片机(Microcontroller)出现后,计算机才真正地从科学的神圣殿堂走入寻常百姓家,成为广大工程技术人员现代化技术革新,技术革命的有利武器。
目前,单片机在民用和工业测控领域得到最广泛的应用。
彩电,冰箱,空调,录像机,VCD,遥控器,游戏机,电饭煲等无处不见单片机的影子,单片机早已深深地溶入我们每个人的生活之中。
单片机能大大地提高这些产品的智能性,易用性及节能性等主要性能指标,给我们的生活带来舒适和方便的同时,在工农业生产上也极大地提高了生产效率和产品质量。
单片机按用途大体上可分为两大类:
1--通用型单片机
2--专用型单片机
专用型单片机是指用途比较专一,出厂时程序已经一次性固化好,不能再修改的单片机。
例如电子表里的单片机就是其中的一种。
其生产成本很低。
通用型单片机的用途很广泛,使用不同的接口电路及编制不同的应用程序就可完成不同的功能。
小到家用电器仪器仪表,大到机器设备和整套生产线都可用单片机来实现自动化控制。
单片机比专用处理器更适合应用于嵌入式系统,因此它得到了最多的应用。
事实上单片机是世界上数量最多的计算机。
现代人类生活中所用的几乎每件电子和机械产品中都会集成有单片机。
手机、电话、计算器、家用电器、电子玩具、掌上电脑以及鼠标等电脑配件中都配有1-2部单片机。
而个人电脑中也会有为数不少的单片机在工作。
汽车上一般配备40多部单片机,复杂的工业控制系统上甚至可能有数百台单片机在同时工作。
单片机的数量不仅远超过PC机和其他计算的综合,甚至比人类的数量还要多。
1.2本课题研究的主要内容
按键控制8×8LED点阵显示不同内容。
每个按键均有对应数字显示;当按键时,按键对应的数字在8×8LED点阵上显示,延时后显示按键对应的数字。
本设计所介绍的8×8LED点阵显示器可以横向自右向左地循环拉幕显示0~9这十个数字和空字符。
在程序中可以相应地改变显示字符的样式和显示的个数。
此显示系统也可用于不同的场合显示信息。
第2章硬件设计
2.1各部分原件介绍
随着单片机功能集成化的发展,其应用领域也逐渐地由传统的控制,扩展为控制处理数据处理以及数字信号处理,DSP(DigitalSignalProcessing)等领域。
凌阳的16位单片机就是为适应这种发展而设计的。
她的CPU内核采用凌阳最新推出的MicrocontrollerandSignalProcessor16位微机处理器芯片,以下简称µ’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
1
最下面红色的一排LED,向上移动直到最上面
2
2
最上面红色的一排LED,向下移动直到最下面
3
3
最下面和最上面分别红色的一排LED,分别向下和向上移动,直到两者相遇
4
4
最右边红色的一排LED,向左移动直到最左边
5
5
最左边红色的一排LED,向右移动直到最右边
6
6
最右边和最左边各红色的一排LED,分别向左边和右边移动,直到两者相遇
7
7
最右边红色的一排LED向左移动,同时最上面红色的一排LED向下移动,分别到最左边和最下面。
8
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点阵的工作原理以及内部结构,并将二者有机的结合起来,用以实现本课程设计的目标。
8×8LED点阵可作为信息输出器件。
它是由发光二极管阵列按8排8列的方式排列起来,由x和y引脚输入的电信号对其进行选通,使不同位置的二极管被点亮,相应地显示出文字或图案等信息来。
单片机利用外部晶振作为时钟信号输入,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×8LED点阵上显示,延时后显示按键对应的数字。
完成此次设计后,我不仅能对单片机开发仿真软件熟练操作,能达到学以致用,同时还掌握了矩阵键盘和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"
#include"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-延时长度控制
//返回值:
无
//============================================================================================
voiddelay(charn)
{
inti,j;
for(i=0;i{
for(j=0;j<50;j++);
F_ClearWatchdog();//清看门狗
}
}
//============================================================================================
//语法格式:
voidDisplayVal(unsignedcharkeyVal)
//实现功能:
显示键值
//参数:
待显示的键值
//返回值:
无
//============================================================================================
voidDisplayVal(unsignedcharkeyVal)
{
unsignedchari,k,BarMask=0x0200;
for(k=0;k<100;k++)
{
for(i=0;i<5;i++)
{
F_ClearWatchdog();//清看门狗
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,依次点亮红灯,绿灯,红绿灯
//参数:
无
//返回值:
无
//============================================================================================
voidTestLed(void)
{
SP_Export(P_IOA_Data,0x00ff);//点亮红灯
SP_Export(P_IOB_Data,0xff00);
delay(400);
SP_Export(P_IOA_Data,0xff00);//点亮绿灯
SP_Export(P_IOB_Data,0xff00);
delay(400);
SP_Export(P_IOA_Data,0xffff);//点亮红绿灯
SP_Export(P_IOB_Data,0xff00);
delay(400);
}
//============================================================================================
//语法格式:
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;j<20;j++)
{
F_ClearWatchdog();//清看门狗
switch(state)
{
case0:
//状态0,图形向右移动
Reload=Reload<<1;
if(Reload==0)
{
Reload=0x8000;
state=1;
}
break;
case1:
//状态1,图形向左移动
Reload=Reload>>1;
if(Reload==0)
{
Reload=0x0001;
state=