1、广东技术师范学院设计报告人机交互的四则运算计算器应用程序设计报告 嵌入式原理及应用综合实训报告题目:人机交互的四则运算计算器院 别: 自动化学院 专 业:电气工程及其自动化(职教师资)姓 名: 学 号: 指导教师: 肖蕾、 实训日期: 2013.06.102013.06.16 人机交互的四则运算计算器应用程序设计摘 要实验借用实验板XS128-80PIN核心板中MC9S12XS256芯片与4*4小键盘模块接口以及LCD1602液晶显示模块接口,学会根据外围电路设计进行软件编程及调试,练习撰写实训总结报告,进而培养学生运用专业知识设计实际系统的能力。具体效果如下:A.输入模块使用4*4小键盘,系
2、统可以检测用户按下某个按键;B.输出模块使用液晶显示模块LCD1602,将用户按下的按键值显示出来;C.系统具备有特殊功能按键,例如: A-+ B- F-* D-/ E-= C-清屏 D.其他扩展功能。关键词:XS128-80PIN核心板、MC9S12XS256芯片、4*4小键盘、液晶显示模块LCD1602目录摘 要 0一、人机交互的四则运算计算器硬件电路设计 11.1硬件电路总体概述 11.2硬件电路模块化介绍 21.2.1电源模块 21.2.2 MC9S12XS256芯片及其最小系统 31.2.3 LCD1602液晶显示模块电路 61.2.4 4*4小键盘模块电路 9二人机交互的四则运算计
3、算器软件设计 112.1程序流程图 112.2 系统初始化程序设计 122.2.1 C/OS系统移植 122.2.2 MC9S12XS256芯片内核初始化 132.2.3 LCD1602初始化程序设计 132.4 4*4按键扫描程序设计 162.3 主程序及任务调度设计 162.3.1主程序设计 162.3.2 任务调度设计 17心得体会 18参考文献 19程序代码 19一、人机交互的四则运算计算器硬件电路设计1.1硬件电路总体概述本项目是基于MC9S12XS256芯片的人机交互的四则运算计算器应用程序设计,整个电路是以MC9S12XS256芯片为核心,所以整个电路是由以下几大模块组成的:(1
4、) 电源模块;(2) MC9S12XS256芯片及其最小系统:.MC9S12XS256芯片;.晶振电路;.复位电路;(3) LCD1602液晶显示模块电路。(4) 4*4小键盘模块电路另外,这次的设计是运用了我们学校自动化学院飞思卡尔实验室的单片机实验学习板。因此,在以上的电路外还要加入I/O口的拓展电路。 整个系统的电路组成如图1(原理图见附件1):图11.2硬件电路模块化介绍1.2.1电源模块 扩展板使用12伏直流电源供电,通过开关型可调降压稳压器LM2576T-ADJ输出5伏和3.3伏两种电源,电路原理图分别如图2-3和图2-4所示。根据实际电路(如AD采集)的需要,拨动扩展板上的电源选
5、择开关可选择其中的一种使用。 图2 12V转换为5V的电路原理图LM2576T-ADJ 采用TO-220 封装,输入电压范围为7 V至40 V, 输出电流为3.0 A。P2-C1 为120 uF /75V铝电解电容;P2-C2为1000 uF / 25V铝电解电容;P2-D1 为肖特基二极管。输出电压Vref = 1.23 V。 图3 12V转换为3.3V电路原理图图2与图3相比,唯一不同的是P2-R2和P3-R2的阻值不同。输出电压Vref = 1.23 V。 1.2.2 MC9S12XS256芯片及其最小系统(1)MCX9S12XS256芯片图4 XS128核心板最小系统原理图图5引出的I
6、O端口MC9S12XS256芯片的管脚分布原理图如图4和图5所示。MC9S12XS256芯片是在一块芯片上集成了CPU、RAM、ROM、定时/计数器和多功能I/O口等基本功能部分的一台计算机。MC9S12XS256芯片必须配备部分外围元件才能使用。(2)晶振电路图6MC9S12XS256芯片晶振电路原理图如图6所示。MC9S12XS256芯片晶振电路是一种时序电路,必须为其提供脉冲信号才能正常工作。由于MC9S12XS256芯片内部已集成了时钟电路,所以在使用时只要外接晶体振荡器和电容就可以产生脉冲信号。晶体振荡器和电容所组成的电路称为晶振电路如图5,这次的设计是将16Mhz的晶振和两个电容并
7、联再接入MC9S12XS256芯片机的XTAL1和XTAL2这两个功能管脚,组成一个外部晶振电路。XTAL1和XTAL2分别用作晶振电路的反相器输入端和输出端。在使用外部晶振电路时,这两个端子来外接石英晶体,振荡频率为晶体振荡频率,振荡信号送至内部时钟电路产生脉冲信号。当晶振发生振荡时,C15和C18对频率有微调作用,晶振或陶瓷谐振器的频率可在1.2-12Mhz之间选择。为了减少寄生电容,更好地保证振荡器稳定可靠工作,振荡器和电容应尽可能安装与单片机引脚XTAL1和XTAL2靠近。(3)复位电路图 7MC9S12XS256芯片复位电路原理图如图7所示。单片机在启动运行时,都需要先复位,即是使C
8、PU和系统中的其他部件都处于一个确定的初始状态,并从这个状态开始工作。MC9S12XS256芯片本身,一般不能自动进行复位,必须配合相应的外部电路才能实现。复位电路的作用就是使单片机在上电时能够复位或运行出错时进入复位状态。如图7,在这次设计所用到的实验板上,通过复位按键RST-K来再通过RES引脚接入MC9S12XS256芯片的RST引脚,以达到控制MC9S12XS256芯片复位的功能。RST为单片机复位信号输入端。当RST端保持两个机器周期(24个时钟周期)以上的高电平时,单片机完成复位操作。1.2.3 LCD1602液晶显示模块电路图8. LCD1602原理图图9.LCD1602管脚分布
9、表(1)LCD1602液晶显示模块概述1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形(用自定义CGRAM,显示效果也不好)。1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。目前市面上字符液晶绝大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780写的控制程序可以很方便地应用于市面上大部分
10、的字符型液晶。(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)端
11、。第714脚:D0D7为8位双向数据端。第1516脚:空脚或背灯电源。15脚背光正极,16脚背光负极(3)LCD1602液晶显示模块字符集LCD1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”。因为1602识别的是ASCII码,试验可以用ASCII码直接赋值,在单片机编程中还可以用字符型常量或变量赋值,如A。(4)LCD1602
12、液晶显示模块工作原理 LCD1602液晶显示模块工作原理会在软件设计时候详细说明。1.2.4 4*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 键盘模块原理图 图11 4*4小键盘实图若行线与列线连接在同一个MCU端口,且行线为第四位,列线为高四位,则4*4键盘的键面符号与键值的对应
13、关系如表2-11所示。 符号键值符号键值符号键值符号键值10xEE20xDE30xBEA0x7E40xED50xDD60xBDB0x7D70xEB80xDB90xBBC0x7B*0xE700xD7#0xB7D0x77表1 键面符号与键值的对应关系键盘是一组按钮式开关的集合,常采用软件来识别。键盘的操作步骤:识键。判断是否有键按下(键入),若有,则需进一步译键。 译键。在有键入的情况下,进一步识别是哪一个键,以便作进一步处理。键义分析。根据识别的结果,明确相应的键义。如果是数字键,应得出输出的数值;如果是功能键,则应知道具体的操作要求。 键盘构成:独立联接式非编码键盘。 特点:每个键相互独立,各
14、自接通一条输入数据线。键未按下时,相应的数据线处于高电平,即为“1”态。当某键按下时,该键所连之数据线接地,即为“0”态。独立联接式编码键盘。 特点:在键数较多时,可采用独立式编码键盘,由4线-16线编码电路进行编码。 矩阵联接式非编码。特点:先使一行线接地,然后检查列线。如果某条列线也是低电位,则可判别两线相交处的某号键已按下。假如在扫描时没有发现有列线为地电位,则说明此行中无键按下。那么可将下一行线接地,如此逐一扫描列线,直到查完最后一行为止。 实验板中键盘电路设计是独立联接式编码键盘,见图10所示。 具体应用也将会在软件设计中详细说明。二人机交互的四则运算计算器软件设计2.1程序流程图编
15、写程序之前先绘制程序流程图,理清思路,使之能简明、直观指示程序流向,且很容易由此编写出具体的源程序。将程序以模块方式分割成具有相应功能的子程序。根据系统功能,合理安排主程序和子程序任务。 人机交互的四则运算计算器程序流程图如图11所示。 图112.2 系统初始化程序设计2.2.1 C/OS系统移植 嵌入式操作系统与通用操作系统的最显著的区别之一就是它的可移植性。一款嵌入式操作系统通常可以运行在不同体系结构的处理器和开发板上。为了使嵌入式操作系统可以在某款具体的目标设备上运行,嵌入式操作系统的编写者通常无法一次性完成整个操作系统的代码,而必须把一部分与具体硬件设备相关的代码作为抽象的接口保留出来
16、,让提供硬件的OEM厂商来完成。这样才可以保证整个操作系统的可移植性。这些代码通常是板级支持包(Board Support Package, BSP)的一部分。例如:不同处理器和开发板通常都会提供实时钟支持,用来得到当前的时间日期,但是实时钟的实现方式却不胜枚举。如何告诉嵌入式操作系统当前的时间,就是操作系统移植者要完成的任务了。而在这次实训中,我们是要完成C/OS的系统移植。图12 移植后C/OS工程文件目录2.2.2 MC9S12XS256芯片内核初始化 MC9S12XS256芯片内核初始化主要包括中断初始化和晶振时间初始化。软件程序设计请看程序里面的“MCUInit.C”。2.2.3 L
17、CD1602初始化程序设计 1602模块的设定,读写,与光标控制都是通过指令来完成,共有11条指令,如下:指令RSRWD7D6D5D4D3D2D1D01清屏00000000012光标返回000000001*3输入模式00000001I/DS4显示控制0000001DCB5光标/字符移位000001S/CR/L*6功能00001DLNF*7置字符发生器地址0001字符发生存贮器地址8置数据存贮器地址001显示数据存贮器地址9读忙标志和地址01BF计数器地址10写数据到指令7.8所设地址10要写的数据11从指令7.8所设的地址读数据11读出的数据指令1:清显示,光标复位到地址00H位置。指令2:光
18、标复位,光标返回到地址00H。指令3:光标和显示模式设置 I/D:光标移动方向,高电平右移,低电平左移, S:屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效。指令4:显示开关控制。 D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示 C:控制光标的开与关,高电平表示有光标,低电平表示无光标 B:控制光标是否闪烁,高电平闪烁,低电平不闪烁。指令5:光标或显示移位 S/C:高电平时移动显示的文字,低电平时移动光标。R/L,高向左,低向右。指令6:功能设置命令 DL:高电平时为4位总线,低电平时为8位总线 N:低电平时为单行显示,高电平时双行显示 F: 低电平时显示5x7的点
19、阵字符,高电平时显示5x10的点阵字符。(有些模块是 DL:高电平时为8位总线,低电平时为4位总线)指令7:字符发生器RAM地址设置,地址:字符地址*8+字符行数。(将一个字符分成5*8点阵,一次写入一行,8行就组成一个字符)指令8:置显示地址,第一行为:00H0FH, 第二行为:40H4FH。指令9:读忙信号和光标地址 BF:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。指令10:写数据。指令11:读数据。LCD1602-8位并行连接时序图:MPU写资料到模块 LCD1602口定义及初始化程序可见“LCD1602.C”。2.4 4*4按键扫描程序设计我们的识别
20、思路是这样的,初使化时我们先让P1口的低四位输出低电平,高四位输出高电平,即让P1口输出0xF0。扫描键盘的时候,我们读P1口,看P1是 否还为0xF0,如果仍为0xF0,则表示没有按键按下;如果不0xF0,我们先等待10ms左右,再读P1口,再次确认是否为0xF0,这是为了防止是抖动干扰造成错误识别,如果不是那就说明是真的有按键按下了,我们就可以读键码来识别到底是哪一个键按下了。识别的过程是这样的,初使化时我们让P1口的低四位输出低电平,高四位输出高电平,确认了真的有按键按下时,我们首先读P1口的高四位,然后P1口输出 0x0F,即让P1口的低四位输出高电平,高四位输出低电平,然后读P1口的
21、低四位,最后我们把高四位读到的值与低四位读到的值做或运算就得到了该按键的 键码。就可以知道是哪个键按下了。 以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 /用户任务函数头文件/*声明系统相
22、关变量*/OS_STK TaskStart_Stack1OS_TASK_STAT_STK_SIZE; /任务函数1堆栈OS_STK TaskStart_Stack2OS_TASK_STAT_STK_SIZE; /任务函数2堆栈void main(void) XS128_INIT_DEV(); OSInit(); OSTaskCreate(Get_key, (void *)0, &TaskStart_Stack1OS_TASK_STAT_STK_SIZE-1, 6); OSTaskCreate(LCD_display, (void *)0, &TaskStart_Stack2OS_TASK_ST
23、AT_STK_SIZE-1, 4); OSStart(); EnableInterrupts; for(;) _FEED_COP(); /* feeds the dog */ 2.3.2 任务调度设计 任务调度设计可见“TASK.C”。心得体会本次设计实训,我是第一次接触嵌入式的硬件和软件。万事开头难,很多东西都是重头开始学的,所以进程很慢。硬件上,设计是通过实验板来完成的,不能像以前用仿真软件那样忽略硬件的结构,而是要按照实验板的原理图,确定好每个模块的位置;查找各类芯片资料,弄懂每钟涉及到的芯片使用原理和方法。只有这样,把硬件弄懂了,在软件商编程也就没多大难题了。软件上,通过这个学期的多次小程序项目独立编程,在这次设计时,我编的程序也较以前来说,更有思路,更简洁了。在设计完成后,报告的撰写,我觉得也非常重要。报告不仅是体现我自己设计思路的,也是让外人看明白你设计的载体。这次设计实训虽然已经结束了,但是嵌入式的学习是没有止境的,在以后的学习生活,我会继续研究嵌入式,重视硬件,优化软件。参考文献嵌入式系统设计与实例开发 王田苗 魏洪非 主编嵌入式实时操作系统C/OS-II原理及应用 任哲 主编程序代码见附件1
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1