微型计算机课程设计报告.docx
- 文档编号:27220811
- 上传时间:2023-06-28
- 格式:DOCX
- 页数:18
- 大小:305.03KB
微型计算机课程设计报告.docx
《微型计算机课程设计报告.docx》由会员分享,可在线阅读,更多相关《微型计算机课程设计报告.docx(18页珍藏版)》请在冰豆网上搜索。
微型计算机课程设计报告
微型计算机技术
课程设计报告
专业:
通信工程
班级:
通信072班
姓名:
徐宗志
学号:
200727067
指导教师:
吴泽举
时间:
2010-03-08~19
通信与电子工程学院
键盘接口和显示设计
课程设计报告
一、1.课设目的
为了进一步巩固学习的理论知识,增强学生对所学知识的实际应用能力和运用所学的知识解决实际问题的能力,开始为期两周的课程设计。
通过设计使学生在巩固所学知识的基础之上具有初步的单片机系统设计与应用能力。
1、通过本设计,使学生综合运用《微型计算机技术》、《C语言程序设计》以及《数字电路》、《模拟电路》等课程的内容,为以后从事电子产品设计、软件编程、系统控制等工作奠定一定的基础。
2、学会使用KEILC和PROTEUS等软件,用C语言或汇编语言编写一个较完整的实用程序,并仿真运行,保证设计的正确性。
3、了解单片机接口应用开发的全过程:
分析需求、设计原理图、选用元器件、布线、编程、调试、撰写报告等。
2.课设内容
设计并实现一个4×4键盘的接口,并在两个数码管上显示键盘所在的行与列。
二、1.问题分析、方案的提出
键盘可以分为独立联接式和行列式两类,每一类有可根据对键盘的译码方法分为编码键盘和非编码键盘两种类型。
编码键盘主要是通过硬件电路产生被按按键的键码和一个选通脉冲,这种键盘使用方便,但硬件电路复杂,常常不被微型计算机采用。
在非编码键盘中,每个按键的作用只是使相应节点接通和断开,每个按键的键码并非由硬件电路产生,而是由相应扫描处理程序对它扫描形成的。
因此,非编码键盘硬件电路极为简单。
在独立联接式非编码键盘中,每个啊年都是彼此独立的,均需占用CPU的一条I/O输入数据线。
4×4键盘的每个按键菌核单片机的P1口的两条相连。
若没有按键按下时,单片机从P1口读得的引脚电平为“1”;若某一按键被按下,则该键所对应的端口线变为地电平。
单片机定时对P1口进行程序查询,即可发现键盘上是否有按键按下以及哪个按键被按下。
实现4×4键盘的接口需要用到单片机并编写相应的程序来识别键盘的十六个按键中哪个按键被按下。
因为此题目还要求将被按下的按键显示出来,因此可以用两个数码管来分别显示被按下的按键的行与列。
我们可以将4×4键盘的八个接口与单片机的P1端口相连,两个数码管分别与单片机的P0口和P2口相连。
从而编写相应的程序使P1口能够识别出4×4键盘中的哪个按键被按下并且将被按下的按键的这一信息通过P0口和P2口的两个数码管显示出来。
(我们选择P1口作为输入口(将按键信息从此端口输入)和选择P0口和P2口作为输出口(从该端口将哪个按键被按下的信息传出来送到数码管上)是根据PROTEUS软件所提供的芯片的引脚排列及布线方便美观来考虑的。
其实P1端口、P2端口和P3端口都是输入输出端口,都可以输入输出数据!
)
对于数码管的连接,采用了共阳极的接法,其下拉电阻应保证芯片不会因为电流过大而烧坏。
2.设计思路及原因
对于4×4键盘,共有十六个按键。
如果每个按键与单片机的一个引脚相连,就会占用16个引脚,这样会使的单片机的接口不够用(即使够用,也是对单片机端口的极大浪费)。
因此我们应该行列式的接法。
行列式非编码键盘是一种吧所有按键排列成行列矩阵的键盘。
在这种键盘中,每根行线和列线的交叉处都接有一个按键,每当某个按键被按下时,与这个按键相连的行线和列线就会接通,否则是断开状态。
。
因此4×4行列式非编码键盘只需4条行线和4条列线,总共占用8条I/O端口线。
大大减少了I/O端口线的利用。
若没有按键按下时,单片机从P1口读得的引脚电平为“1”;若某一按键被按下,则该键所对应的端口线变为地电平。
因此0xEX(X表示任意一个十六进制数)表示4×4键盘的第一行中的某个按键被按下,相应的0xDX、0xBX、0x7X(X表示任意一个十六进制数)分别表示键盘的第二行、第三行、第四行;0xXE、0xXD、0xXB、0xX7(X表示任意一个十六进制数)则分别表示键盘的第一列、第二列、第三列和第四列。
例如0xD7是键盘的第二行第四列的按键
三、1.电路设计及功能说明
4×4键盘的十六个按键分成四行四列分别于P1端口的八条I/O数据线相连;两个七段数码管分别与单片机的P0口和P2口的低七位I/O数据线相连。
数码管采用共阳极的接法,所以需要下拉电阻来分流。
(在单片机的P3端口上安装了一个喇叭,通过编程实现当有按键按下的时候喇叭出现响声予以提示。
)结合软件程序,即可实现4×4键盘的接口及显示的设计。
当按下键盘其中的一个按键时,数码管上会显示出该按键在4×4键盘上的行值和列值。
所以实现了数码管显示按键位置的功能。
2.硬件原理框图及电路图(包括接口芯片简介);
电路原理框图
电路图
接口芯片简介
at89c51芯片管脚图引脚图
AT89C51内部功能图
AT89C51简介
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器,俗称单片机。
单片机的可擦除只读存储器可以反复擦除100次。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器。
1.主要特性:
•与MCS-51兼容
•4K字节可编程闪烁存储器
•全静态工作:
0Hz-24MHz
•三级程序存储器锁定
•128×8位内部RAM
•32可编程I/O线
•两个16位定时器/计数器
•5个中断源
•可编程串行通道
•低功耗的闲置和掉电模式
•片内振荡器和时钟电路
2.主要管脚说明:
VCC:
供电电压。
GND:
接地。
P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为AT89C51的一些特殊功能口,如下表所示:
口管脚备选功能
P3.0RXD(串行输入口)
P3.1TXD(串行输出口)
P3.2/INT0(外部中断0)
P3.3/INT1(外部中断1)
P3.4T0(记时器0外部输入)
P3.5T1(记时器1外部输入)
P3.6/WR(外部数据存储器写选通)
P3.7/RD(外部数据存储器读选通)
P3口同时为闪烁编程和编程校验接收一些控制信号。
ALE/PROG:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:
每当用作外部数据存储器时,将跳过一个ALE脉冲。
如想禁止ALE的输出可在SFR8EH地址上置0。
此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,置位无效。
/PSEN:
外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。
但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
3.芯片擦除:
整个PEROM阵列和三个锁定位的电擦除可通过正确的控制信号组合,并保持ALE管脚处于低电平10ms来完成。
在芯片擦操作中,代码阵列全被写“1”且在任何非空存储字节被重复编程以前,该操作必须被执行。
此外,AT89C51设有稳态逻辑,可以在低到零频率的条件下静态逻辑,支持两种软件可选的掉电模式。
在闲置模式下,CPU停止工作。
但RAM,定时器,计数器,串口和中断系统仍在工作。
在掉电模式下,保存RAM的内容并且冻结振荡器,禁止所用其他芯片功能,直到下一个硬件复位为止。
数码管简介
数码管按段数分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示);按能显示多少个“8”可分为1位、2位、4位等等数码管;按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。
共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管。
共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮。
当某一字段的阴极为高电平时,相应字段就不亮。
。
共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管。
共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮。
当某一字段的阳极为低电平时,相应字段就不亮。
数码管的驱动方式
数码管要正常显示,就要用驱动电路来驱动数码管的各个段码,从而显示出我们要的数字,因此根据数码管的驱动方式的不同,可以分为静态式和动态式两类。
①静态显示驱动:
静态驱动也称直流驱动。
静态驱动是指每个数码管的每一个段码都由一个单片机的I/O端口进行驱动,或者使用如BCD码二-十进制译码器译码进行驱动。
静态驱动的优点是编程简单,显示亮度高,缺点是占用I/O端口多,如驱动5个数码管静态显示则需要5×8=40根I/O端口来驱动,要知道一个89S51单片机可用的I/O端口才32个呢:
),实际应用时必须增加译码驱动器进行驱动,增加了硬件电路的复杂性。
②动态显示驱动:
数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。
通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。
在轮流显示过程中,每位数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。
四、软件部分的程序流程图,算法和使用的编程技巧
1.程序流程图
2.编程技巧
1.在按键扫描程序中,通过for循环语句实现被按下的按键的行值的确定,用switch语句实现列值的确定。
0xEX(X表示任意一个十六进制数)表示4×4键盘的第一行中的某个按键被按下,相应的0xDX、0xBX、0x7X(X表示任意一个十六进制数)分别表示键盘的第二行、第三行、第四行;0xXE、0xXD、0xXB、0xX7(X表示任意一个十六进制数)则分别表示键盘的第一列、第二列、第三列和第四列;
2.ucRow+ucLine+1即为被按下的按键的行列值;
3.用十六个switch语句实现对单片机P0端口和P2口的I/O数据线的控制,来控制数码管显示被按下按键的行值和列值;
4.硬件设备中还在AT89C51芯片的P3口安装一喇叭,并且在源程序中编写了相应程序段使当按键被按下时喇叭会发出声音来提示按键被按下。
五、源程序代码(C语言编写)
#include
#defineucharunsignedchar
#defineuintunsignedint
#defineSCANPORTP1
sbitspk=P3^0;
ucharcodetable[]={0xF9,0xA4,0xB0,0x99};//1,2,3,4的共阳字形码
ucharuca_LineScan[]={0xEF,0xDF,0xBF,0x7F};//
ucharucKeyScan()
{
ucharTemp=0;
ucharucRow=0,ucLine=0;//给行列值赋初值0
for(ucRow=0;ucRow<4;ucRow++)//对P1端口扫描来确定键盘行值
{
SCANPORT=uca_LineScan[ucRow];
Temp=SCANPORT&0x0F;
if(Temp!
=0x0F)
{
switch(Temp)
{
case0x0E:
ucLine=10;break;//若为0x0E,则选中键盘第一列
case0x0D:
ucLine=20;break;//若为0x0D则选中键盘第二列
case0x0B:
ucLine=30;break;
case0x07:
ucLine=40;break;
default:
ucLine=50;break;//未选中键盘列值
}
break;
}
}
SCANPORT=0x0F;
returnucRow+ucLine+1;//返回被按下键盘的行列值,即确定被按下的按键的位置
}
voidvKeyProcess(unsignedcharucKeyCode)
{
switch(ucKeyCode)
{
case11:
P0=table[0];P2=table[0];spk=1;break;//按键K1-1被按下
case12:
P0=table[1];P2=table[0];spk=1;break;
case13:
P0=table[2];P2=table[0];spk=1;break;
case14:
P0=table[3];P2=table[0];spk=1;break;
case21:
P0=table[0];P2=table[1];spk=1;break;//按键K2-1被按下
case22:
P0=table[1];P2=table[1];spk=1;break;
case23:
P0=table[2];P2=table[1];spk=1;break;
case24:
P0=table[3];P2=table[1];spk=1;break;//按键K2-4被按下
case31:
P0=table[0];P2=table[2];spk=1;break;
case32:
P0=table[1];P2=table[2];spk=1;break;//按键K3-2被按下
case33:
P0=table[2];P2=table[2];spk=1;break;
case34:
P0=table[3];P2=table[2];spk=1;break;
case41:
P0=table[0];P2=table[3];spk=1;break;
case42:
P0=table[1];P2=table[3];spk=1;break;//按键K4-2被按下
case43:
P0=table[2];P2=table[3];spk=1;break;//按键K4-3被按下
case44:
P0=table[3];P2=table[3];spk=1;break;
default:
break;
}
}
voidmain()//主程序
{
spk=0;
while
(1)//开始循环
{
vKeyProcess(ucKeyScan());//调用扫描键盘并确定按键行列值的子程序
spk=0;
}
}
六、仿真过程综述
1.按照设计思路在PROTEUS软件中找到相应元器件,按照正确的连线方法将各个元器件连起来。
再用PROTEUS软件仿真时,为避免连线的复杂性,可以使用在要连线的引脚上标注相同的符号的方法。
这样可以使PROTEUS软件窗口中的连线少一些,使电路图更加清晰;
2.按照硬件电路在KEILC软件中编写程序,对编写的程序进行编译,在确定没有错误后生成十六进制文件并加载到PROTEUS软件中原理图的AT89C51芯片中;
3.在PROTEUS软件中点击运行按钮,实现仿真:
按下键盘上的按键,观察数码管显示的是否正确。
七、调试过程中的主要难点(自己遇到的)及解决思路和办法
因为上网查到的资料与题目要求的有一定的差别,自己需要修改其硬件电路部分和程序,这样就会产生一定的问题:
1.在硬件电路连线时用到了总线,造成了单线与总线虚连和错连的现象。
使得自己感觉硬件与软件都没问题但就是仿真不出来。
2.程序写好,编译好后忘记加载到单片机芯片上就开始仿真,走了不少的弯路,
3.单线与总线连接时应该确保单线准确的连在总线上,而且应该避免两条单线连在总线的同一点处。
否则产生的错误是非常致命的,而且还不容易找出;因此在单线与总线连接时一定要注意连接是否正确得当,并且将该标注的标号正确标注;
4.为避免电路图中连线过多,可以采用将需要连线的引脚标注上相同的符号的方法。
这样可以尽可能少的减少连线错误,并是电路图清晰,美观;
5.因为该数码管是用的共阳极的接法,其下拉电阻起到分流的作用,应该接地,但是在仿真的过程中却不知道哪里出了问题,这种接法始终不能仿真出结果。
将下拉电阻与电源相连时却仿真成功,数码管显示出了按键的正确的行值和列值?
?
6.编写程序时需要用到1.2.3.4共阳字形码,不能与共阴字形码混淆。
八、课设结果及分析、收获、体会和建议
本次为期两周的课程设计,学会了用PROTEUS软件和KEILC软件设计键盘接口和显示,基本上完成了题目中所给出的要求,设计出了4×4键盘的接口,并且在两个数码管上能够显示键盘所在的行值与列值。
收获
通过本次课设,使我学会PROTEUS软件和KEILC软件的基本使用。
使我能够综合运用《微型计算机技术》、《C语言程序设计》以及《数字电路》、《模拟电路》等课程中学到的知识做一些简单的电子产品的仿真,使我对C语言有了更好的掌握和运用,用其进行软件编程更加顺手。
初步掌握了KEILC和PROTEUS等软件,可以用C语言或汇编语言编写一个较完整的实用程序。
本次课设使我初步了解了单片机接口应用开发的全过程:
分析需求、设计原理图、选用元器件、布线、编程、调试等。
本次课设教会了我如何利用PROTEUS和KEILC等软件通过硬件连接和编程实现简单电子产品的仿真,以及当出现问题时如何进行修改等。
体会
这次课设,使我体会到:
无论是设计硬件电路还是编写相应的软件程序,我们应该时刻都要仔细认真。
因为在这个过程中哪怕是出现一个小小的错误,都会导致不能仿真出正确的结果甚至根本不会出结果。
通过本次课设,我真正的体会到了为什么要根据实际的硬件电路来编写相应的程序。
同样,实际中的电子产品也是需要软硬结合的。
课程设计的过程是一个不断学习的过程,我们需要充分利用好网络资源来解决我们在课设过程中遇到的问题,只有将遇到的问题解决好,才能真正的学到一些知识。
本专业要求我们应该有基本的专业知识和较强的动手操作能力。
因此能够熟练使用PROTEUS和KEILC等软件对于我们未来的就业非常重要。
本次课设仅仅使我们对PROTEUS和KEILC等软件有了一个简单的了解,会做一些简单的电子产品的仿真,但这是远远不够的。
我们应该利用课余时间了解一些对我们专业有用的软件,做到能够掌握并熟练使用。
课余时间多多做一些电子产品的仿真,这对我们将来找工作有一定的好处!
通过这次课程设计我发现了自己的不足之处:
虽然书本上的知识都能看懂,但是真正应用到实际当中时却却发现有一定的难度。
现在学习专业知识,就像是纸上谈兵,空有理论。
我们应该把专业知识理论能够应用到实践当中,做到活学活用。
这次课设,仅仅是让我们能够利用相关软件仿真出简单的电子产品,这与动手设计制作一个电子产品要容易得多,因为做一个实际的东西需要考虑进去的因素远比用相关软件简单的仿真要多得多。
所以如果有机会我们应该去培养一下我们的实际动手能力!
!
!
九、参考文献:
【1】阎石.数字电子技术基础(第五版)高等教育出版社
【2】华成英童诗白模拟电子技术基础高等教育出版社
【3】胡汉才.单片机原理及其接口技术.北京:
清华大学出版社
【4】严蔚敏.数据结构(C语言版)清华大学出版社
教师评语:
教师:
日期:
设计过程30﹪
课设报告40﹪
答辩30﹪
总成绩
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微型计算机 课程设计 报告