单片机实验课程设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

课程设计任务书
学生姓名:王梦专业班级:电信1406班
指导教师:刘运苟工作单位:信息工程学院
题目:具有可变图案的走马灯显示功能的设计
初始条件:
具备数字电路的理论知识;具备单片机原理的理论知识和实践能力;熟悉51单片机的CPU结构和
指令系统;熟悉相关常用接口电路的设计使用方法。

要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)用定时器设计发光二极管的轮流显示,显示图案和延时时间可按设定的规律变化,要求显示的方
式为相向、相反、交替闪烁。

延时时间可设置为100ms、200ms、300m s。

时间安排:
二十二周一周,其中3天硬件设计,2天硬件调试
指导教师签名:年月日
系主任(或责任教师)签名:年月日
目录
1 走马灯的介绍 (4)
2.设计走马灯的软硬件介绍 (4)
2.1 51系列单片机 (4)
2.2 Keil C51软件 (5)
3 走马灯的系统设计 (6)
3.1 设计思路 (6)
3.2 电路设计 (6)
4 C语言程序设计 (7)
5 仿真测试及分析 (11)
6实物图及结果分析 (12)
7 心得体会 (13)
8 参考文献 (14)
摘要
设计要求:用定时器设计发光二极管的轮流显示,显示图案和延时时间可按设定的规律变化,要求显示的方式为相向、相反、交替闪烁。

延时时间可设置为100ms、200ms、300ms。

流水灯的设计涉及到了软硬件方面的知识,需要软硬件综合。

软件方面,可以使用C语言或者汇编语言,本课程设计中使用C语言,涉及到其中的循环结构、选择结构以及函数调用的应用,编写程序需要从要求中看出可以简化编写的结构从而加以使用,同时考虑到单片机的输出端的实际情况,使用条件语句进行修正。

硬件方面,选用了51系列单片机,使用了定时/计数器以及并行口,主要使用了中断功能。

定时/计数器实质上是一个加1计数器,它可以工作于定时方式,也可以工作于计数方式,两种方式实际都是对脉冲计数,只不过所记脉冲的来源不同,本次课程设计只使用定时器,脉冲来源来自晶振的振荡。

在使用定时器的时候,计数的脉冲来自振荡器的12分频后的脉冲,即对系统的机器周期计数。

计数为加1计数,记满溢出后清零并产生溢出中断。

使用并行口是为了使用矩阵键盘。

键盘是计算机系统中不可缺少的输入设备,当键盘少时可以接成线性键盘。

键的编码可以用软件的运算完成,称为非编码键盘,也可以由硬件编码器完成,称为编码键盘,本设计使用非编码键盘。

中断装置和中断处理程序统称为中断系统。

中断系统是计算机的重要组成部分。

实时控制、故障自动处理、计算机与外围设备间的数据传送往往采用中断系统。

中断系统的应用大大提高了计算机效率。

关键字:51单片机、定时\计数器、键盘控制中断、走马灯
1走马灯的介绍
在古代,走马灯古称蟠螭灯(秦汉)、仙音烛和转鹭灯(唐)、马骑灯(宋),汉族特色工艺品,亦是传统节日玩具之一,属于灯笼的一种。

常见于元夕、元宵、中秋等节日。

灯内点上蜡烛,烛产生的热力造成气流,令轮轴转动。

轮轴上有剪纸,烛光将剪纸的影投射在屏上,图象便不断走动。

因多在灯各个面上绘制古代武将骑马的图画,而灯转动时看起来好像几个人你追我赶一样,故名走马灯。

走马灯内的蜡烛需要切成小段,放入走马灯时要放正,切勿斜放。

而现如今,现代人用火炭烧起来作气流动力改为电风扇带动马灯运。

流动字幕显示屏横向或直向不断移动的字幕,常用于电视新闻镜面,如新闻跑马灯(简称“跑马灯”)是在电视新闻画面上的一个小空间,通常是用来显示头条新闻或是新闻报道中较小的细节。

跑马灯有时也指在某些建筑物、网站或室内空间用来表现讯息的显示版。

网站跑马灯在电脑上当然也可以弄出新闻跑马灯这个玩意,早在二十一世纪初,新浪网、搜狐网就已经推出网络新闻跑马灯技术。

2.设计走马灯的软硬件介绍
2.1 51系列单片机
51单片机是对所有兼容Intel 8031指令系统的单片机的统称。

该系列单片机的始祖是Intel的8031单片机,后来随着Flash rom技术的发展,51单片机是基础入门的一个单片机,还是应用最广泛的一种。

需要注意的是52系列的单片机一般不具备自编程能力。

51单片机的功能有:
·8位CPU·4kbytes程序存储器(ROM) (52为8K)
·128bytes的数据存储器(RAM) (52有256bytes的RAM)
·32条I/O口线·111条指令,大部分为单字节指令
·21个专用寄存器
·2个可编程定时/计数器·5个中断源,2个优先级(52有6个)
·一个全双工串行通信口
·外部数据存储器寻址空间为64kB
·外部程序存储器寻址空间为64kB
·逻辑操作位寻址功能·双列直插40PinDIP封装
·单一+5V电源供电
CPU:由运算和控制逻辑组成,同时还包括中断系统和部分外部特殊功能寄存器;RAM:用以存放可以读写的数据,如运算的中间结果、最终结果以及欲显示的数据;
ROM:用以存放程序、一些原始数据和表格;
I/O口:四个8位并行I/O口,既可用作输入,也可用作输出
T/C:两个定时/记数器,既可以工作在定时模式,也可以工作在记数模式;
五个中断源的中断控制系统;
一个全双工UART(通用异步接收发送器)的串行I/O口,用于实现单片机之间或单片机与微机之间的串行通信;
2.2 Keil C51软件
Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。

Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部分组合在一起。

运行Keil 软件需要WIN98、NT、WIN2000、WINXP等操作系统。

Keil C51工具包的整体结构,uVision 与Ishell分别是C51 for Windows和for Dos的集成开发环境(IDE),可以完成编辑、编译、连接、调试、仿真等整个开发流程。

开发人员可用IDE本身或其它编辑器编辑C或汇编源文件。

然后分别由C51及C51编译器编译生成目标文件(.OBJ)。

目标文件可由LIB51创建生成库文件,也可以与库文件一起经L51连接定位生成绝对目标文件(.ABS)。

ABS 文件由OH51转换成标准的Hex文件,以供调试器dScope51或tScope51使用进行源代码级调试,也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如EPROM 中。

2.3 Proteus软件
Proteus软件是英国Lab Center Electronics公司出版的EDA工具软件(该软件中国总代理为广州风标电子技术有限公司)。

它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。

它是目前最好的仿真单片机及外围器件的工具。

虽然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。

3 走马灯的系统设计
3.1 设计思路
走马灯的显示分为相向、反向、整体闪烁交替三种模式,分别可以用循环左移、循环右移和按位取反来实现,延时的时间可以通过改变中断中的变量的值来实现。

三种模式的显示可以通过调用三个不同的显示函数来分开显示,而模式、延时的选择则通过键盘来进行输入。

程序在运行的时候则重复扫描键盘和显示的过程即可。

3.2 电路设计
电路设计主要包括矩阵键盘及其显示功能的设计。

矩阵键盘:在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式,如图1所示。

在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。

这样,一个端口(如P1口)就可以构成4*4=16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键)。

由此可见,在需要的键数比较多时,采用矩阵法来做键盘是合理的。

图1 矩阵键盘
判断有无按键:将行线P3.0置低电平,然后检测列线的状态。

只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与该根行线相交叉的4个按键之中。

若所有列线均为高电平,则键盘中无键按下。

显示电路:由于要求使用四个发光二极管,所以显示电路由四个发光二极管构成LED 灯组,如图2-3所示。

这组LED灯共阳极,而阴极分别接入单片机的P1口。

由发光二级管的特性知,当P1口为高电平时,二极管截止,发光二级管为暗,当P1口为低电平时,发光二级管亮。

控制这组LED灯则通过给P1口上不同的高低电平得到。

而显示的频率则通过P1口电平变化的快慢来实现。

图2 显示电路
4 C语言程序设计
#include <reg52.h>
#include <intrins.h>
unsigned char num,temp,led,t,tt,flag;
void delay(unsigned int z)(延时去抖动)
{
unsigned int x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void keyscan()(键盘扫描)
{
P3=0xfe;(第一行扫描)
temp=P3;(键盘检测)
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5); (延时去抖动)
temp=P3;(再次检测)
temp=temp&0xf0;
while(temp!=0xf0) {
temp=P3;
switch(temp)
{
case 0xee:num=1;//S6
break;
case 0xde:num=2;//S7
break;
case 0xbe:num=3;//S8
break;
case 0x7e:num=4;//S9
break;
}
while(temp!=0xf0)(等待按键释放)
{
temp=P3;
temp=temp&0xf0;
}
}
}
P3=0xfd;(第二行检测)
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xed:num=5;//S10
break;
case 0xdd:num=6;//S11
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
}
}
void M1()(相向)
{
P1=led;(初始值0xfe)
if(tt>=t)(计时到t*50ms右移一位)
{led=_crol_(led,1);//1111 1110--1111 1101
if(led==0xef) led=0xfe;(仅仅启用低四位)
tt=0;
}
}
void M2()(反向)
{
P1=led;
if(tt>=t)
{
led=_cror_(led,1);
if(led==0x7f) led=0xf7;
tt=0;
}
}
void M3()(整体交替闪烁)
{
P1=0xfa;//1111 1010
while(1)
{
if(tt<=t) continue;
tt=0;
break;
}
P1=0xf5;//1111 0101
while(1)
{
if(tt<=t) continue;
tt=0;
break;
}
}
void main()
{
num=0;
led=0xfe;
tt=0;
flag=1;
t=2;
TMOD=0x01;
TH0=(665536-45872)/256;
TL0=(665536-45872)%256;
EA=1;
ET0=1;
TR0=1;
while(1)
{
keyscan();
switch(num)
{
case 1:flag=1;break;
case 2:flag=2;break;
case 3:flag=3;break;
case 4:t=2;break;//100ms
case 5:t=4;break;//200ms
case 6:t=6;break;//300ms }
switch(flag)
{
case 1:M1();break;
case 2:M2();break;
case 3:M3();
}
}
}
void time0() interrupt 1 //50ms
{ TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
tt++;
}
5 仿真测试及分析
图3 单向的两种模式的显示
设计要求中的相反和相向在图中无法显示出来,但可以仿真。

图4 整体闪烁交替模式的显示
模式3是LED灯组交替闪烁的模式。

而不同时间间隔的选择以及模式混搭虽然也实现了,但是无法在图中表现出来。

设计要求中的延时100ms、200ms、300ms、也可以通过矩阵键盘的按键加以实现,由此可知,实验仿真正确,满足设计要求,开始设计实物。

6实物图及结果分析
结果分析:四个发光二极管可以轮流相向,相反显示,也可以实现二极管的交替闪烁,同时也完成了100ms、200ms、300ms的延时。

总的来说,本次课程设计虽然并各个独立的部分不难,但是关键在于软硬见的结合与合理的设计。

通过小组成员的努力,最终我们完成了仿真以及实物,虽然在设计过程中也有难题,出现仿真结果不正确,延时时间不对,在进行调试过程中,程序烧不进去,虽然遇到很多的困难,但都一一得到解决,同时提高了自己的能力。

7 心得体会
具有可变图案的走马灯显示功能的课程设计是完成从初期设计到实物的一整套的制作,是一次很好的理论与实际的结合。

本次课程设计的关键在于完成软件与硬件的结合。

总的来说还是硬件决定了软件的制作,在初期设计阶段,先是构思出了硬件的基本构成结构,再编写相应的软件。

而软件对硬件构成具有简化,修正的反作用。

在软件编写中产出的一些新的想法,可以临时对硬件进行微调,使得硬件结构更加简单,并且使得程序更加简介,增加容错性与适应性,改动起来也会相应的更加容易。

在知识方面,我不仅回顾了这个学期所学的单片机技术基础理论知识,也回顾了过去所学的模数电相关的知识;不仅加深了对单片机理论的理解,在与之相关的学科方面也得到了拓展与深化。

此次课程设计,让我对模数电与单片机等科目有了更深入细致的了解。

同时我也深深发觉到,仅懂得理论、纸上谈兵是远远不够的,我们还需要进行更多的实物制作,或是软件仿真,因为当理论运用到实际中时,往往会出现很多的问题与偏差。

所以这次的实践训练是非常合时并且有意义的,它使我懂得了只有不断实践才能真正掌握知识。

8 参考文献
[1] 郭天祥.51单片机C语言编程.电子工业出版社,2012
[2] 谭浩强.C程序设计.清华大学出版社,2011
[3] 李群芳,张士军,黄建.单片微型计算机与接口技术.电子工业出版社,2010
[4] 姚燕南,姚向华,乔瑞萍.微型计算机原理(第五版).西安电子科技大学出版社,2008
[5] 电子发烧友论坛.流水灯的设计,2010
[6]曹国清.《数字电路与逻辑设计》.中国矿业大学出版社,2008
[7]伍时和.《数字电子技术基础》.清华大学出版社,2009
本科生课程设计成绩评定表
指导教师签字:
年月日。

相关文档
最新文档