人机交互的四则运算计算器应用程序设计报告解读.docx
《人机交互的四则运算计算器应用程序设计报告解读.docx》由会员分享,可在线阅读,更多相关《人机交互的四则运算计算器应用程序设计报告解读.docx(22页珍藏版)》请在冰豆网上搜索。
![人机交互的四则运算计算器应用程序设计报告解读.docx](https://file1.bdocx.com/fileroot1/2023-7/9/cb25e32e-ea0a-4a0e-835c-94ecaa43a040/cb25e32e-ea0a-4a0e-835c-94ecaa43a0401.gif)
人机交互的四则运算计算器应用程序设计报告解读
嵌入式原理及应用综合实训报告
题目:
人机交互的四则运算计算器
院别:
自动化学院
专业:
电气工程及其自动化(职教师资)
姓名:
梁柱槐
学号:
2010105144118
指导教师:
肖蕾、刘克江
实训日期:
2013.06.10—2013.06.16
人机交互的四则运算计算器应用程序设计
摘要
实验借用实验板XS128-80PIN核心板中MC9S12XS256芯片与4*4小键盘模块接口以及LCD1602液晶显示模块接口,学会根据外围电路设计进行软件编程及调试,练习撰写实训总结报告,进而培养学生运用专业知识设计实际系统的能力。
具体效果如下:
A.输入模块使用4*4小键盘,系统可以检测用户按下某个按键;
B.输出模块使用液晶显示模块"LCD1602",将用户按下的按键值显示出来;
C.系统具备有特殊功能按键,例如:
A->'+'B->'-'F->'*'D->'/'E->'='C->'清屏'
D.其他扩展功能。
关键词:
XS128-80PIN核心板、MC9S12XS256芯片、4*4小键盘、液晶显示模块"LCD1602"
目录
摘要0
一、人机交互的四则运算计算器硬件电路设计1
1.1硬件电路总体概述1
1.2硬件电路模块化介绍2
1.2.1电源模块2
1.2.2MC9S12XS256芯片及其最小系统3
1.2.3LCD1602液晶显示模块电路6
1.2.44*4小键盘模块电路9
二.人机交互的四则运算计算器软件设计11
2.1程序流程图11
2.2系统初始化程序设计12
2.2.1μC/OS系统移植12
2.2.2MC9S12XS256芯片内核初始化13
2.2.3LCD1602初始化程序设计13
2.44*4按键扫描程序设计16
2.3主程序及任务调度设计16
2.3.1主程序设计16
2.3.2任务调度设计17
心得体会18
参考文献19
程序代码19
一、人机交互的四则运算计算器硬件电路设计
1.1硬件电路总体概述
本项目是基于MC9S12XS256芯片的人机交互的四则运算计算器应用程序设计,整个电路是以MC9S12XS256芯片为核心,所以整个电路是由以下几大模块组成的:
(1)电源模块;
(2)MC9S12XS256芯片及其最小系统:
.MC9S12XS256芯片;
.晶振电路;
.复位电路;
(3)LCD1602液晶显示模块电路。
(4)4*4小键盘模块电路
另外,这次的设计是运用了我们学校自动化学院飞思卡尔实验室的单片机实验学习板。
因此,在以上的电路外还要加入I/O口的拓展电路。
整个系统的电路组成如图1(原理图见附件1):
图1
1.2硬件电路模块化介绍
1.2.1电源模块
扩展板使用12伏直流电源供电,通过开关型可调降压稳压器LM2576T-ADJ输出5伏和3.3伏两种电源,电路原理图分别如图2-3和图2-4所示。
根据实际电路(如AD采集)的需要,拨动扩展板上的电源选择开关可选择其中的一种使用。
图212V转换为5V的电路原理图
LM2576T-ADJ采用TO-220封装,输入电压范围为7V至40V,输出电流为3.0A。
P2-C1为120uF/75V铝电解电容;P2-C2为1000uF/25V铝电解电容;P2-D1为肖特基二极管。
输出电压Vref=1.23V。
图312V转换为3.3V电路原理图
图2与图3相比,唯一不同的是P2-R2和P3-R2的阻值不同。
输出电压Vref=1.23V。
1.2.2MC9S12XS256芯片及其最小系统
(1)MCX9S12XS256芯片
图4XS128核心板最小系统原理图
图5引出的IO端口
MC9S12XS256芯片的管脚分布原理图如图4和图5所示。
MC9S12XS256芯片是在一块芯片上集成了CPU、RAM、ROM、定时/计数器和多功能I/O口等基本功能部分的一台计算机。
MC9S12XS256芯片必须配备部分外围元件才能使用。
(2)晶振电路
图6
MC9S12XS256芯片晶振电路原理图如图6所示。
MC9S12XS256芯片晶振电路是一种时序电路,必须为其提供脉冲信号才能正常工作。
由于MC9S12XS256芯片内部已集成了时钟电路,所以在使用时只要外接晶体振荡器和电容就可以产生脉冲信号。
晶体振荡器和电容所组成的电路称为晶振电路
如图5,这次的设计是将16Mhz的晶振和两个电容并联再接入MC9S12XS256芯片机的XTAL1和XTAL2这两个功能管脚,组成一个外部晶振电路。
XTAL1和XTAL2分别用作晶振电路的反相器输入端和输出端。
在使用外部晶振电路时,这两个端子来外接石英晶体,振荡频率为晶体振荡频率,振荡信号送至内部时钟电路产生脉冲信号。
当晶振发生振荡时,C15和C18对频率有微调作用,晶振或陶瓷谐振器的频率可在1.2-12Mhz之间选择。
为了减少寄生电容,更好地保证振荡器稳定可靠工作,振荡器和电容应尽可能安装与单片机引脚XTAL1和XTAL2靠近。
(3)复位电路
图7
MC9S12XS256芯片复位电路原理图如图7所示。
单片机在启动运行时,都需要先复位,即是使CPU和系统中的其他部件都处于一个确定的初始状态,并从这个状态开始工作。
MC9S12XS256芯片本身,一般不能自动进行复位,必须配合相应的外部电路才能实现。
复位电路的作用就是使单片机在上电时能够复位或运行出错时进入复位状态。
如图7,在这次设计所用到的实验板上,通过复位按键RST-K来再通过RES引脚接入MC9S12XS256芯片的RST引脚,以达到控制MC9S12XS256芯片复位的功能。
RST为单片机复位信号输入端。
当RST端保持两个机器周期(24个时钟周期)以上的高电平时,单片机完成复位操作。
1.2.3LCD1602液晶显示模块电路
图8.LCD1602原理图
图9.LCD1602管脚分布表
(1)LCD1602液晶显示模块概述
1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。
它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形(用自定义CGRAM,显示效果也不好)。
1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。
目前市面上字符液晶绝大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。
(2)LCD1602液晶显示模块管脚说明
在这次设计中所用到的实验板上,LCD1602液晶显示模块的管脚分布如图9所示,原理图如图8所示。
LCD1602采用标准的16脚接口,其中:
第1脚:
VSS为电源地
第2脚:
VDD接5V电源正极
第3脚:
V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。
第4脚:
RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。
第5脚:
RW为读写信号线,高电平
(1)时进行读操作,低电平(0)时进行写操作。
第6脚:
E(或EN)端为使能(enable)端。
第7~14脚:
D0~D7为8位双向数据端。
第15~16脚:
空脚或背灯电源。
15脚背光正极,16脚背光负极
(3)LCD1602液晶显示模块字符集
LCD1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:
阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”。
因为1602识别的是ASCII码,试验可以用ASCII码直接赋值,在单片机编程中还可以用字符型常量或变量赋值,如'A’。
(4)LCD1602液晶显示模块工作原理
LCD1602液晶显示模块工作原理会在软件设计时候详细说明。
1.2.44*4小键盘模块电路
扩展板上的4*4键盘模块包括4*4键盘、键盘自动接线插座KeyBoard-ZD、键盘手动接线插座KeyBoard-SD以及手动接线的插孔KeyBoard-SD-JK,原理图如图2-21所示。
其中,Key1、key2、Key3和Key4为行线,与MCU的输出端口连接;Key5、key6、Key7和Key8为列线,与MCU的输入端口连接。
图10键盘模块原理图图114*4小键盘实图
若行线与列线连接在同一个MCU端口,且行线为第四位,列线为高四位,则4*4键盘的键面符号与键值的对应关系如表2-11所示。
符号
键值
符号
键值
符号
键值
符号
键值
1
0xEE
2
0xDE
3
0xBE
A
0x7E
4
0xED
5
0xDD
6
0xBD
B
0x7D
7
0xEB
8
0xDB
9
0xBB
C
0x7B
*
0xE7
0
0xD7
#
0xB7
D
0x77
表1键面符号与键值的对应关系
键盘是一组按钮式开关的集合,常采用软件来识别。
键盘的操作步骤:
①识键。
判断是否有键按下(键入),若有,则需进一步译键。
②译键。
在有键入的情况下,进一步识别是哪一个键,以便作进一步处理。
③键义分析。
根据识别的结果,明确相应的键义。
如果是数字键,应得出输出的数值;如果是功能键,则应知道具体的操作要求。
键盘构成:
①独立联接式非编码键盘。
特点:
每个键相互独立,各自接通一条输入数据线。
键未按下时,相应的数据线处于高电平,即为“1”态。
当某键按下时,该键所连之数据线接地,即为“0”态。
②独立联接式编码键盘。
特点:
在键数较多时,可采用独立式编码键盘,由4线-16线编码电路进行编码。
③矩阵联接式非编码。
特点:
先使一行线接地,然后检查列线。
如果某条列线也是低电位,则可判别两线相交处的某号键已按下。
假如在扫描时没有发现有列线为地电位,则说明此行中无键按下。
那么可将下一行线接地,如此逐一扫描列线,直到查完最后一行为止。
实验板中键盘电路设计是独立联接式编码键盘,见图10所示。
具体应用也将会在软件设计中详细说明。
二.人机交互的四则运算计算器软件设计
2.1程序流程图
编写程序之前先绘制程序流程图,理清思路,使之能简明、直观指示程序流向,且很容易由此编写出具体的源程序。
将程序以模块方式分割成具有相应功能的子程序。
根据系统功能,合理安排主程序和子程序任务。
人机交互的四则运算计算器程序流程图如图11所示。
图11
2.2系统初始化程序设计
2.2.1μC/OS系统移植
嵌入式操作系统与通用操作系统的最显著的区别之一就是它的可移植性。
一款嵌入式操作系统通常可以运行在不同体系结构的处理器和开发板上。
为了使嵌入式操作系统可以在某款具体的目标设备上运行,嵌入式操作系统的编写者通常无法一次性完成整个操作系统的代码,而必须把一部分与具体硬件设备相关的代码作为抽象的接口保留出来,让提供硬件的OEM厂商来完成。
这样才可以保证整个操作系统的可移植性。
这些代码通常是板级支持包(BoardSupportPackage,BSP)的一部分。
例如:
不同处理器和开发板通常都会提供实时钟支持,用来得到当前的时间日期,但是实时钟的实现方式却不胜枚举。
如何告诉嵌入式操作系统当前的时间,就是操作系统移植者要完成的任务了。
而在这次实训中,我们是要完成μC/OS的系统移植。
图12移植后μC/OS工程文件目录
2.2.2MC9S12XS256芯片内核初始化
MC9S12XS256芯片内核初始化主要包括中断初始化和晶振时间初始化。
软件程序设计请看程序里面的“MCUInit.C”。
2.2.3LCD1602初始化程序设计
1602模块的设定,读写,与光标控制都是通过指令来完成,共有11条指令,如下:
指令
RS
RW
D7
D6
D5
D4
D3
D2
D1
D0
1
清屏
0
0
0
0
0
0
0
0
0
1
2
光标返回
0
0
0
0
0
0
0
0
1
*
3
输入模式
0
0
0
0
0
0
0
1
I/D
S
4
显示控制
0
0
0
0
0
0
1
D
C
B
5
光标/字符移位
0
0
0
0
0
1
S/C
R/L
*
*
6
功能
0
0
0
0
1
DL
N
F
*
*
7
置字符发生器地址
0
0
0
1
字符发生存贮器地址
8
置数据存贮器地址
0
0
1
显示数据存贮器地址
9
读忙标志和地址
0
1
BF
计数器地址
10
写数据到指令7.8所设地址
1
0
要写的数据
11
从指令7.8所设的地址读数据
1
1
读出的数据
指令1:
清显示,光标复位到地址00H位置。
指令2:
光标复位,光标返回到地址00H。
指令3:
光标和显示模式设置
I/D:
光标移动方向,高电平右移,低电平左移,
S:
屏幕上所有文字是否左移或者右移。
高电平表示有效,低电平则无效。
指令4:
显示开关控制。
D:
控制整体显示的开与关,高电平表示开显示,低电平表示关显示
C:
控制光标的开与关,高电平表示有光标,低电平表示无光标
B:
控制光标是否闪烁,高电平闪烁,低电平不闪烁。
指令5:
光标或显示移位
S/C:
高电平时移动显示的文字,低电平时移动光标。
R/L,高向左,低向右。
指令6:
功能设置命令
DL:
高电平时为4位总线,低电平时为8位总线
N:
低电平时为单行显示,高电平时双行显示
F:
低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符。
(有些模块是DL:
高电平时为8位总线,低电平时为4位总线)
指令7:
字符发生器RAM地址设置,地址:
字符地址*8+字符行数。
(将一个字符分成5*8点阵,一次写入一行,8行就组成一个字符)
指令8:
置显示地址,第一行为:
00H——0FH, 第二行为:
40H——4FH。
指令9:
读忙信号和光标地址BF:
为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。
指令10:
写数据。
指令11:
读数据。
LCD1602-8位并行连接时序图:
MPU写资料到模块
LCD1602口定义及初始化程序可见“LCD1602.C”。
2.44*4按键扫描程序设计
我们的识别思路是这样的,初使化时我们先让P1口的低四位输出低电平,高四位输出高电平,即让P1口输出0xF0。
扫描键盘的时候,我们读P1口,看P1是否还为0xF0,如果仍为0xF0,则表示没有按键按下;如果不0xF0,我们先等待10ms左右,再读P1口,再次确认是否为0xF0,这是为了防止是抖动干扰造成错误识别,如果不是那就说明是真的有按键按下了,我们就可以读键码来识别到底是哪一个键按下了。
识别的过程是这样的,初使化时我们让P1口的低四位输出低电平,高四位输出高电平,确认了真的有按键按下时,我们首先读P1口的高四位,然后P1口输出0x0F,即让P1口的低四位输出高电平,高四位输出低电平,然后读P1口的低四位,最后我们把高四位读到的值与低四位读到的值做或运算就得到了该按键的键码。
就可以知道是哪个键按下了。
以0键为例,初使化时P1输出0xF0,当0键按下时,我们读高四位的状态应为1110,即P1为0xE0,然后让P1输出0x0F,读低四位产状态应为0111,即P1为0x07,让两次读数相与得0xE7。
实现的程序可见“calculator.c”。
2.3主程序及任务调度设计
2.3.1主程序设计
主程序如下:
/****************************************************************/
#include"INCLUDES.H"//UCOS系统头文件
#include"MCUInit.h"//初始化函数头文件
#include"TASK.H"//用户任务函数头文件
/********************声明系统相关变量****************************/
OS_STKTaskStart_Stack1[OS_TASK_STAT_STK_SIZE];//任务函数1堆栈
OS_STKTaskStart_Stack2[OS_TASK_STAT_STK_SIZE];//任务函数2堆栈
voidmain(void){
XS128_INIT_DEV();
OSInit();
OSTaskCreate(Get_key,(void*)0,&TaskStart_Stack1[OS_TASK_STAT_STK_SIZE-1],6);
OSTaskCreate(LCD_display,(void*)0,&TaskStart_Stack2[OS_TASK_STAT_STK_SIZE-1],4);
OSStart();
EnableInterrupts;
for(;;){
_FEED_COP();/*feedsthedog*/
}
}
2.3.2任务调度设计
任务调度设计可见“TASK.C”。
心得体会
本次设计实训,我是第一次接触嵌入式的硬件和软件。
万事开头难,很多东西都是重头开始学的,所以进程很慢。
硬件上,设计是通过实验板来完成的,不能像以前用仿真软件那样忽略硬件的结构,而是要按照实验板的原理图,确定好每个模块的位置;查找各类芯片资料,弄懂每钟涉及到的芯片使用原理和方法。
只有这样,把硬件弄懂了,在软件商编程也就没多大难题了。
软件上,通过这个学期的多次小程序项目独立编程,在这次设计时,我编的程序也较以前来说,更有思路,更简洁了。
在设计完成后,报告的撰写,我觉得也非常重要。
报告不仅是体现我自己设计思路的,也是让外人看明白你设计的载体。
这次设计实训虽然已经结束了,但是嵌入式的学习是没有止境的,在以后的学习生活,我会继续研究嵌入式,重视硬件,优化软件。
参考文献
《嵌入式系统设计与实例开发王田苗魏洪非主编
《嵌入式实时操作系统μC/OS-II原理及应用》任哲主编
程序代码
见附件1
读书的好处
1、行万里路,读万卷书。
2、书山有路勤为径,学海无涯苦作舟。
3、读书破万卷,下笔如有神。
4、我所学到的任何有价值的知识都是由自学中得来的。
——达尔文
5、少壮不努力,老大徒悲伤。
6、黑发不知勤学早,白首方悔读书迟。
——颜真卿
7、宝剑锋从磨砺出,梅花香自苦寒来。
8、读书要三到:
心到、眼到、口到
9、玉不琢、不成器,人不学、不知义。
10、一日无书,百事荒废。
——陈寿
11、书是人类进步的阶梯。
12、一日不读口生,一日不写手生。
13、我扑在书上,就像饥饿的人扑在面包上。
——高尔基
14、书到用时方恨少、事非经过不知难。
——陆游
15、读一本好书,就如同和一个高尚的人在交谈——歌德
16、读一切好书,就是和许多高尚的人谈话。
——笛卡儿
17、学习永远不晚。
——高尔基
18、少而好学,如日出之阳;壮而好学,如日中之光;志而好学,如炳烛之光。
——刘向
19、学而不思则惘,思而不学则殆。
——孔子
20、读书给人以快乐、给人以光彩、给人以才干。
——培根