单片机应用实践基于键盘输入单元的单片机实验或仿真和C语言开发.docx
《单片机应用实践基于键盘输入单元的单片机实验或仿真和C语言开发.docx》由会员分享,可在线阅读,更多相关《单片机应用实践基于键盘输入单元的单片机实验或仿真和C语言开发.docx(24页珍藏版)》请在冰点文库上搜索。
![单片机应用实践基于键盘输入单元的单片机实验或仿真和C语言开发.docx](https://file1.bingdoc.com/fileroot1/2023-5/21/0bcc2d1c-a4a6-4120-9c7f-0869bd560464/0bcc2d1c-a4a6-4120-9c7f-0869bd5604641.gif)
单片机应用实践基于键盘输入单元的单片机实验或仿真和C语言开发
课程设计任务书
学生姓名:
专业班级:
指导教师:
工作单位:
题目:
基于键盘输入单元的单片机实验或仿真和C语言开发
初始条件:
具备单片机和C语言的理论知识;具备电子电路的基础知识和设计能力;具备查阅资料的基本方法;熟悉常用的电子器件;熟悉Protues、Keil软件的使用。
要求完成的主要任务:
(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)
1.设计一种基于单片机的行列式键盘输入模块,能检测并判断是否有键按下;对按键开关进行时延的消抖;确定按键的键值,并实现相应状态的输入显示。
2.要求进行电路实验或仿真,使用C语言进行程序的开发。
时间安排:
一周,其中3天程序设计,2天程序调试
指导教师签名:
年月日
系主任(或责任教师)签名:
年月日
目录
摘要I
1概述1
1.151单片机简介1
1.2Keil软件简介2
1.3Protues软件简介3
2总体设计5
2.1功能分析5
2.2系统总体设计5
3硬件模块7
3.1矩阵键盘输入模块7
3.2STC89C51最小系统模块8
3.3LCD1602液晶显示模块9
3.4循环流水灯模块10
4程序代码11
5Protues仿真14
6实物制作及调试15
6.1实物展示15
6.2实物调试17
7心得与体会20
参考文献21
附录:
元件清单表22
摘要
此次单片机应用实践目的是基于键盘输入单元的单片机实验或仿真和C语言开发。
本文先就本次应用实践进行功能分析和系统设计,之后详细介绍了各个硬件模块,给出了程序代码,并通过Protues对设计电路进行仿真。
然后附上了实物制作图及调试结果。
本次应用实践完成了基于单片机的行列式键盘输入模块,能检测并判断是否有键按下;对按键开关进行时延的消抖;确定按键的键值,并实现相应状态的输入显示;同时拓展了控制循环流水灯功能。
关键词:
单片机,矩阵键盘,C语言,Protues
Abstract
ThepurposeofthispracticeistodomicrocontrollerapplicationexperimentorsimulationandClanguagedevelopmentthatbasedonkeyboardinputunit.Thisarticlefirstonthisapplicationpracticefunctionalanalysisandsystemdesign,andthendetailsthevarioushardwaremodules,givestheprogramcodeanddesignbyProtuescircuitsimulation.ThenattachthephysicalproductionandcommissioningresultsinFig.Thecompletedapplicationpracticemicrocontroller-baseddeterminantofthekeyboardinputmodulethatcandetectanddeterminewhetherakeyispressed;thekeyswitchtodebouncedelay;OKbuttonkeys,andentertheappropriatestatetoachievedisplay;atthesametimeexpandthecontrolloopwaterlightsfunction.
Keywords:
Microcontroller,Matrixkeyboard,Clanguage,Protues
1概述
1.151单片机简介
单片机,全称单片微型计算机(single-chipmicrocomputer),又称微控制器(microcontroller),是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。
与应用在个人电脑中的通用型微处理器相比,它更强调自供应(不用外接硬件)和节约成本。
运算器由运算部件——算术逻辑单元、累加器和寄存器等几部分组成。
算术逻辑单元的作用是把传来的数据进行算术或逻辑运算,输入来源为两个8位数据,分别来自累加器和数据寄存器。
算术逻辑单元能完成对这两个数据进行加、减、与、或、比较大小等操作,最后将结果存入累加器;控制器由程序计数器、指令寄存器、指令译码器、时序发生器和操作控制器等组成,是发布命令的“决策机构”,即协调和指挥整个微机系统的操作;主要寄存器包括:
累加器A、数据寄存器DR、指令寄存器IR、指令译码器ID、程序计数器PC、地址寄存器AR等。
51单片机是对所有兼容Intel8031指令系统的单片机的统称。
该系列单片机的始祖是Intel的8031单片机,后来随着Flashrom技术的发展,8031单片机取得了长足的进展,成为应用最广泛的8位单片机之一,其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。
很多公司都有51系列的兼容机型推出,今后很长的一段时间内将占有大量市场。
51单片机是基础入门的一个单片机,还是应用最广泛的一种。
52系列的单片机一般不具备自编程能力。
MCS-51单片机内部包含哪些主要逻辑功能部件有:
(1)一个8位的微处理器CPU。
(2)一个片内振荡电路和时钟电路,只需外面接上一晶振或输入振荡信号就可产生单片机所需要的各种时钟信号。
(3)4KB的片内程序存储器ROM,用于烧录运行的程序、常数数据。
(4)128B的片内数据存储器RAM,在程序运行时可以随时写入数据和读出,用于存放函数相互传递的数据、接收的外部数据、最后结果以及显示的数据等。
(5)可寻址64KB外部数据存储器和64KB外部程序存储空间的控制电路。
(6)4个8位并行I/O端,每个端口既可以用作输入,也可以用于输出。
(7)两个16位的定时器/计数器,每个定时器/计数器可以设置为计数方式,用于对外部事件信号进行计数,也可以设置为定时方式,满足各种定时要求。
(8)一个可编程全双工串行I/O口,用于单片机之间的串行通信,或者单片机与PC机、其它设备、其它芯片之间的串行通信。
(9)5个中断源、两个优先级嵌套中断系统。
1.2Keil软件简介
单片机开发中除必要的硬件外,同样离不开软件,我们写的汇编语言源程序要变为CPU可以执行的机器码有两种方法,一种是手工汇编,另一种是机器汇编,目前已极少使用手工汇编的方法了。
机器汇编是通过汇编软件将源程序变为机器码,用于MCS-51单片机的汇编软件有早期的A51,随着单片机开发技术的不断发展,从普遍使用汇编语言到逐渐使用高级语言开发,单片机的开发软件也在不断发展,Keil软件是目前最流行开发MCS-51系列单片机的软件,这从近年来各仿真机厂商纷纷宣布全面支持Keil即可看出。
Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境将这些部分组合在一起。
(1)系统概述
KeilC51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。
另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到KeilC51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。
在开发大型软件时更能体现高级语言的优势。
下面详细介绍KeilC51开发系统各部分功能和使用。
(2)KeilC51单片机软件开发系统的整体结构
C51工具包的整体结构,uVision与Ishell分别是C51forWindows和forDos的集成开发环境(IDE),可以完成编辑、编译、连接、调试、仿真等整个开发流程。
开发人员可用IDE本身或其它编辑器编辑C或汇编源文件。
然后分别由C51及C51编译器编译生成目标文件(.OBJ)。
目标文件可由LIB51创建生成库文件,也可以与库文件一起经L51连接定位生成绝对目标文件(.ABS)。
ABS文件由OH51转换成标准的Hex文件,以供调试器dScope51或tScope51使用进行源代码级调试,也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如EPROM中。
(3)KeilC51单片机软件开发系统的优点
首先,KeilC51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。
在开发大型软件时更能体现高级语言的优势。
其次,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。
用过汇编语言后再使用C来开发,体会更加深刻。
1.3Protues软件简介
Proteus软件是英国Labcenter electronics公司出版的EDA工具软件,从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计,迄今为止是世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台。
Proteus软件的特点是:
(1)实现了单片机仿真和SPICE电路仿真相结合。
具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统的仿真、RS232动态仿真、I2C调试器、SPI调试器、键盘和LCD系统仿真的功能;有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。
(2)支持主流单片机系统的仿真。
目前支持的单片机类型有:
68000系列、8051系列、AVR系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列以及各种外围芯片。
(3)提供软件调试功能。
在硬件仿真系统中具有全速、单步、设置断点等调试功能,同时可以观察各个变量、寄存器等的当前状态,因此在该软件仿真系统中,也必须具有这些功能;同时支持第三方的软件编译和调试环境,如KeilC51uVision2等软件。
(4)具有强大的原理图绘制功能。
Proteus是一款集单片机和SPICE分析于一身的仿真软件,功能极其强大。
Proteus不仅可将许多单片机实例功能形象化,也可将许多单片机实例运行过程形象化。
前者可在相当程度上得到实物演示实验的效果,后者则是实物演示实验难以达到的效果。
它的元器件、连接线路等却和传统的单片机实验硬件高度对应。
这在相当程度上替代了传统的单片机实验教学的功能,例:
元器件选择、电路连接、电路检测、电路修改、软件调试、运行结果等。
课程设计、毕业设计是学生走向就业的重要实践环节。
由于Proteus提供了实验室无法相比的大量的元器件库,提供了修改电路设计的灵活性、提供了实验室在数量、质量上难以相比的虚拟仪器、仪表,因而也提供了培养学生实践精神、创造精神的平台随着科技的发展,“计算机仿真技术”已成为许多设计部门重要的前期设计手段。
它具有设计灵活,结果、过程的统一的特点。
可使设计时间大为缩短、耗资大为减少,也可降低工程制造的风险。
相信在单片机开发应用中Proteus也能茯得愈来愈广泛的应用。
2总体设计
2.1功能分析
此次课设的题目是基于键盘输入单元的单片机实验或仿真和C语言开发:
设计一种基于单片机的行列式键盘输入模块,能检测并判断是否有键按下;对按键开关进行时延的消抖;确定按键的键值,并实现相应状态的输入显示。
要求进行电路实验或实验,并使用C语言进行程序的开发。
设计电路采用STC89C51单片机作为核心,由矩阵键盘电路、译码电路、显示电路、流水灯电路等模块构成,分别对按键信息和显示电路以及软、硬件各个部分进行控制。
实际运作时,单片机会将检测到的按键信号处理、转换成数字,显示于LCD1602液晶上。
系统主要结构可以拆分如下:
(1)矩阵键盘:
按键传送输入信息;本次设计使用16个独立的按键形成4*4矩阵键盘;
(2)STC89C51:
采用软件编程来实现按键信息的提取和转换;
(3)LCD1602液晶:
用于显示最终被单片机转换过的按键信息。
(4)8个相同的发光二极管:
通过软件程序编写来控制流水灯左右循环移位。
2.2系统总体设计
系统总体设计框图如图1所示,整个系统采用+5V直流供电,由4*4矩阵键盘输入,单片机检测并判断是否有键按下,当有按键被按下时,按键信息被输入到经过编程的单片机STC89C51中进行提取与转换:
对按键开关进行时延的消抖,同时确定按键的键值,最后实现将相应状态的输入显示到LCD1602液晶上以及控制流水灯电路。
4*4矩阵键盘
STC89C51单片机
流水灯电路液晶显示电路
图1系统总体设计框图
系统可以完成检测并判断是否有键按下;对按键开关进行时延的消抖;确定按键的键值,并实现相应状态的输入显示;同时拓展了控制循环流水灯功能。
通过keil编程和protues仿真可以实现并验证系统是否完成相应的功能及其拓展功能。
3硬件模块
图2总体电路图
3.1矩阵键盘输入模块
图3矩阵键盘输入模块
本次设计采用4*4的矩阵键盘,如图3所示。
矩阵键盘的行线和列线分别通过两并行接口和CPU通信,按键设置在行、列交点上,行、列线分别连接到按键开关,行线通过上拉电阻接到+5V上。
在接键盘的行线和列线的两个并行口中,一个输出扫描码,使按键逐行动态接地,另一个并行口输入按键状态,为回馈信号。
由行扫描值和列回馈信号共同形成键编码。
用STC89C51的并行口P1设计4*4矩阵键盘,其
接键盘行线,输出接地信号,
接列线,输入回馈信号,以检测按键是否按下。
此外,还要消除按键在闭合或断开时的抖动。
消除抖动的方法采用延时方式软件消除抖动(延时后再重读,以跳过抖动期)。
K1
K2
K3
K4
K5
K6
K7
K8
显示“1”
显示“2”
显示“3”
显示“4”
显示“5”
显示“6”
显示“7”
显示“8”
K9
K10
K11
K12
K13
K14
K15
K16
显示“9”
选中第一位
选中第二位
选中第三位
加1
减1
灯定时左移
灯定时右移
按键从左至右,从上到下依次记为K1--K16,各键具有的功能如表1所示:
表1矩阵键盘按键含义表
3.2STC89C51最小系统模块
STC89C51单片机的最小系统模块由STC89C51单片机、时钟电路和复位电路构成,如图4所示。
图4STC89C51最小系统模块
1、时钟电路:
单片机的时钟信号用来提供单片机内各种微操作的时间基准。
8XX51单片机的时钟信号通常用两种电路形式得到:
内部振荡方式和外部振荡方式。
在引脚XTAL1和XTAL2外接晶振就构成了内部振荡方式。
由于单片机内部有一个高增益反向放大器,当外接晶振后,就构成了自激振荡器,产生时钟脉冲。
内部振荡中的两个电容器起稳定振荡频、快速起振的作用,电容值一般为5-30pF。
内部振荡方式所得的时钟信号比较稳定实用电路中使用较多。
外部振荡方式是把已有的时钟信号引入单片机内。
这种方式适宜用来使单片机的时钟与外部信号保持一致。
本次课程设计的时钟电路采用内部振荡方式。
2、复位电路:
复位操作完成单片机内电路的初始化,使单片机从一确定的状态开始运行。
当8XX51单片机的复位引脚RST出现5ms以上的高电平时,单片机就完成了复位操作。
如果RST持续为高电平,单片机就处于循环复位状态,而无法执行程序,因此要求单片机复位后能脱离复位状态。
复位操作通常有两种基本形式:
上电复位、开关复位。
上电复位要求接通电源后,自动实现复位操作。
开关复位要求在电源接通的条件下,在单片机运行期间,如果发生死机,用按钮开关操作使单片机复位。
图4中的复位电路为上电且开关复位电路,上电后,由于电容充电,使RST持续一段高电平时间,从而实现上电且开关复位的操作。
通常选择
。
3.3LCD1602液晶显示模块
本方案采用LCD1602液晶来显示按键的键值及键值的变化,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。
它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用。
图5LCD1602液晶显示模块
如图5所示,为LCD1602液晶显示的接线图。
其中RS(数据/命令选择)、RW(读/写选择)、E(使能信号)为控制端,连接至单片机的P0口的5、6、7脚,D0-D7为数据端,连接至单片机的P2口。
3.4循环流水灯模块
循环流水灯模块电路采用8个相同的发光二极管组成,上拉100Ω的电阻的主要目的是起限流保护二极管的作用。
电路接到单片机的P0和P3口,软件程序通过单片机的提取和转换来控制流水灯左循环移位或者右循环移位。
图6流水灯模块
4程序代码
系统主函数如下所示:
#include
#include
#include
unsignedcharj=0;
unsignedchara,b=0,c[3]={0},m=0,LED;
voidmain()
{
LCD1602_Init();//LCD1602初始化
T0_init();//定时器0初始化
LED=0XFE;
while
(1)
{
a=keyscan();//按键扫描
if(a>0&&a<10)//键值为1-9,显示键值
{
c[b]=a;
Disp1Char(b+12,1,c[b]+0x30);
}
if(a==10)b=0;//键值为10,选中百位
if(a==11)b=1;//键值为11,选中十位
if(a==12)b=2;//键值为12,选中个位
if(a==13)//键值为13,进行加1显示
{
a=0;
c[b]+=1;
if(c[b]==10)c[b]=0;
Disp1Char(b+12,1,c[b]+0x30);
}
if(a==14)//键值为14,进行减1显示
{
a=0;
if(c[b]==0)c[b]=10;
c[b]-=1;
Disp1Char(b+12,1,c[b]+0x30);
}
if(a==15)//键值为15,LED流水灯1s循环左移
{
TR0=1;
m=1;
}
if(a==16)//键值为16,LED流水灯1s循环左移
{
TR0=1;
m=2;
}
}
}
voidT0_init()//T0初始化
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
}
voidT0_ser()interrupt1//T0中断服务
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
j++;
if(j==20)//每1s移位一次
{
j=0;
if(m==1)
{
P0=(P0|0x1f)&((LED>>3)|0xe0);
P3=LED;
LED=(LED<<1)|(LED>>7);
}
if(m==2)
{
P0=(P0|0x1f)&((LED>>3)|0xe0);
P3=LED;
LED=(LED>>1)|(LED<<7);
}
}
}
5Protues仿真
图7Protues仿真电路
将程序代码在Keil中进行编译和连接,生成KEX文件,再把Keil生成的HEX文件下载到Protues仿真的单片机中,在元器件都找到后,我们可以先进行排版再按照电路图连接,然后可以点击运行观察现象,看与自己设置的符合否,如果不相符再查找错误进行修改,尤其注意程序的部分。
图8Protues仿真结果
6实物制作及调试
6.1实物展示
矩阵键盘采用印制电路板(PCB线路板)制作:
图9矩阵键盘元件图
图10矩阵键盘焊接电路
主体部分采用万用板手工焊接:
图12单片机最小系统、液晶显示及流水灯元件图
图13单片机最小系统及流水灯焊接电路
6.2实物调试
将各电路板根据电路图用杜邦线连接好,检查电路连接无误后接上直流+5V电源,此时LCD1602液晶显示屏亮起,屏幕显示“Thekeyis:
”。
调试时,首先依次按下K1—K9键时显示屏分别显示数字1—9;按下K10键之后再任意按下数字键,该位数值变为该数字键对应数值;按下K11键之后再任意按下数字键,出现第二位且数值为该数字键对应数值;按下K12键之后再任意按下数字键,出现第三位且数值为该数字键对应数值;按下K10键选中第一位之后再按下K13键,第一位数值加一;按下K10键选中第一位之后再按下K14键,第一位数值减一;按下K15键,流水灯由左至右循环亮起;按下复位键之后再按下K16键,流水灯由右至左循环亮起;在任何状态下按下复位键,显示屏清空、流水灯全灭。
图14—17为实物调试过程记录。
图14调试——按键K3按下
图15调试——流水灯右循环
图16调试——流水灯左循环
图17调试——输入三位数675
所以,各按键的功能为:
K1—K9:
输入数字1—9;
K10:
选中第一位;
K11:
选中第二位;
K12:
选中第三位;
K13:
加一;
K14:
减一;
K15:
流水灯右循环亮起;
K16:
流水灯左循环亮起。
7心得与体会
本次单片机应用实践课题为基于键盘输入单元的单片机实验或仿真和C语言开发,从拿到题到查资料,从完善原理图到写报告文档,我收获了许多。
不仅要运用学过的单片机、C语言编程等知识,还要学会查阅各种图书资料和工具书,并将新知识和所学的结合起来为自己所用。
通过此次单片机应用实践,一方面进一步巩固了所学的知识,理论和实践方面都有了很大的提高,很多无法在课堂上理解的抽象理论知识有了重新的认识,例如矩阵键盘通过行扫描法来检测按键,软件进行延时消抖,再判断键值。
另一方面通过查看书本和网上查阅资料,了解了液晶显示屏LCD1602重点在于它的读写功能,其初始化的设置也尤为重要,这是对现有知识的一种拓展。
在整个课程实践过程中让我意识到耐心、毅力和细心是做好一件事的必须品质,经过了一个星期的课程设计,我感想颇多。
课程设计制作期间,方便的网络给我提供大量的书本上所没有资料。
但是,由于之前的有关内容比如C语言编程方面学的不是很扎实,导致刚动手的时候,遇到很大的阻力。
但在查阅了大