4.3.3.2 任务的实现 键盘是最重要的一种输入设备。一般在设计应用系统时,需要按键较少时采用独立式按键键盘,而在需要按键较多时,采用行列式键盘。但行列式键盘不仅硬件接线复杂,键号的判断和识别程序也较为繁琐。在此介绍使用软件将多个按键功能压缩至3个按键上,该键盘在硬件上使用独立式按键键盘的硬件结构,而在软件上实现了使用矩阵式键盘的功能。该键盘不仅在硬件上接口简单,软件实现也非常容易。 其实现原理是:对于矩阵式键盘,如果它有3行4列,则可以构成一个34 键盘,共有12个功能键。在设计的键盘中,行线使用一个按键实现,行线数由该键的按键次数确定,列线则由其它几个按键提供。假如一个键盘使用3个按键,3个按键中1个用于提供行线,设置其它2个键的功能,当该键按键次数为1时,其它2个键为P11、P12功能,而当该键按键次数为2时,其它2个键为P21、P22功能,当该键按键次数为3 时,其它2个键又为P31、P32功能,根据此原理,使用3个按键可以实现N行2列共N2个键的功能,这里的N为用做行线的键即功能设置键的按键次数。将该键的按键次数存于一内存单元(或寄存器)中,每按一次,该单元加1,读出该单元内容,就可知道其它2个键处于何种功能。 共定义了8个功能键:单选择键,确认键,数值增加键,数值减少键,左移、右移、上移、下移键。程序流程图如图所示 LCD显示任务只是接收其它任务发来的信号量,经分析判断后刷新相应的显示区。其实现简单在此不再叙述。 4.3.4 串行通信模块的详细设计 串行通信模块是系统设计中的一个重要部分。它要实现与PC机通信,接收PC机发来的命令帧,在确认正确后进行分析执行,并向PC机发送相关信息和数据。通信协议的详细规定见下一章。 4.3.4.1 串口设备驱动程序设计 系统串行口工作方式和波特率的计算 1).串行口的工作方式 串行口的工作方式由串行口控制寄存器SCON来确定。特殊功能寄存器SCON字节地址为98H,可以位寻址。通过对SCON.7和SCON.6进行设置可以确定串行口的工作方式,它有四种工作方式,如表4 - 1所示。 表4 - 1 串行口工作方式 SM0(SCON.7) SM1(SCON.6) 方式 功能说明 0 0 0 移位寄存器方式(用于I/O口扩展) 0 1 1 8位UART,波特率可变(T1溢出率/N) 1 0 2 9位UART,波特率为fosc/64或fosc/32 1 1 3 9位UART,波特率可变(T1溢出率/N) SCON结构如图4-9所示。 图4-9串行口控制字寄存器SCON 2).波特率的计算 串行口工作在方式0和方式2时,其波特率为固定值。工作在方式1和方式3时波特率可变,与溢出率有关,设计中常用定时/计数器1作为波特率发生器。计数器的工作模式共有4种,模式0~模式3,但是当串行口选择工作模式1时,计数器必须工作在模式2,自动载入计数模式,在模式2的计时下,使用的计数器寄存器为推理,而TH1则是在做自动载入计时值的设定。波特率的计算公式为: 波特率= (4-1) 设计时我们是先定出波特率再求TH1的值,将上式加以整理可得: TH1=256- (4-2) 在设计中,串行口(工作在)工作方式1且允许接收,通过语句SCON=0x50来实现。计数器工作在模式2能够自动载入计数值,通过语句TMOD=TMOD|0x20来实现。为便于使用 ,我设计了初始化串行口函数void Uart_Init (INT16U mclk, INT16U baud),利用此函数可根据系统工作频率和设定波特率完成串行口的初始化。 串行口输入输出驱动设计 采用异步通信时,如波特率为1200,则每传送一个字符约需10ms,所以串行口的接收和发送应采用中断方式来实现,否则会浪费大量的CPU时间。为了可靠的接收和发送数据,专门设定了接收和发送缓冲区,在具体实现时,缓冲区采用环形缓冲区,它的大小按照任务的执行时间、通信速率和报文长短来定,一般为16至255字节,在系统中其值设为30。 1).串行口输入程序和串行口输入中断流程图如图4-10所示 图4-10串行口输入程序和串行口输入中断流程图 2). 串行口输出程序和串行口输出
首页 上一页 11 12 13 14 15 16 17 下一页 尾页 14/20/20