GND:接地 VCC:接+5V电压 3.2.4按键 当单价等信息需要进行修改时,就要用到键盘进行修改。由于调节信息不多,故采用4个独立键盘即可,可实现语音、打印、增大、减小等功能作用。电路原理如图3.2.4所示。 Number0.1ufS20.1ufS30.1ufS4SW-PBSW-PBSW-PBSW-PBTitlePA1PA2PA30.1ufS1PA0 图3.2.4 独立键盘电路原理图 S1:接P2.0口,外部模式切换键,允许进行时钟修改。 S2:接P2.1口,单价和时钟加键,及乘客上车语音播报键。 S3:接P2.2口,单价和时钟减键,及乘客下车语音播报和票据打印键。 S4:接P2.3口,内部模式切换键,专业人员进行时钟、单价修改。 3.2.5显示单元 ST7920是台湾矽创电子公司生产的中文图形控制芯片,它是一种内置128×64 - 12汉字图形点阵的液晶显示控制模块,用于显示汉字及图形。该芯片共内置8192个中文汉字(16×16点阵)、128个字符的ASCII字符库(8×16点阵)及64×256点阵显示RAM(GDRAM)。 为了能够简单、有效地显示汉字和图形,该模块内部设计有 2MB 的中文字型CGROM和64×256点阵的GDRAM绘图区域;同时,该模块还提供有4组可编程控制的16×16点阵造字空间;除此之外,为了适应多种微处理器和单片机接口的需要,该模块还提供了4位并行、8位并行、2线串行以及、3线串行等多种接口方式。 11 SizeC4C5C6C7Revision12 VCCDR34520k67U3VCCVDDLED+LED-ST7920CLKSIDCS1P102P113P12 图3.7 ST7920电路原理图 在对ST7920读或写时,会用到两个8位的寄存器,一个是数据寄存器DR , 另一个是指令寄存器IR。通过数据寄存器DR可以存取DDRAM、CGRAM、CGROM及IRAM的值。待存取的目标RAM的地址可通过命令来选择,每次数据寄存器DR的操作应以上次选择的目标RAM为主体来进行读出或写入。通过 RS和RW的状态可以选择不同的读写模式,具体配置方法如表3.1所列。忙标志位BF为“1”时,表示内部操作正在进行,即处于忙状态而不接受新的指令,所以,每次接受新指令前,都要读取BF标志,只有当其为“0”时才可接受。 RS 低电平0 低电平0 高电平1 高电平1 C表3.1 ST7920的寄存器读写状态 RW 低电平0 高电平1 低电平0 高电平1 功能说明 MPU写指令到指令寄存器IR 读出忙标志及地址计数器的状态 MPU写指令到数据寄存器DR MPU从数据寄存器DR读出指令 在本设计中,单片机采用串口方式访问ST7920,只用两根线(SID与SCLK)完成数据传输。通过ST7920实现时钟、单价、里程、总金额及模式的显示。 3.2.6实时时钟单元 DS1302是DALLAS公司推出的涓流充电时钟芯片内含有一个实时时钟/日历和31字节静态 B3.2.7票据打印单元 TPUP-AT系列打印机是最新设计的一种面板安装式微型点阵打印机。整机体积小,重量轻,功能完备,外形美观,操作简单,连接方便。它特别适于安装在机器或设备的面板上,使打印机和仪器浑然一体,提高整机的结构水平。 A12 U8VCC12VCCGNDTPUP-40STXD3INT14TXDCTSTPUP-40S 图3.11 TPUP-40S微型打印机串行接口电路 引脚说明: TXD:单片机的串口输出端,同时,对于TPUP-40S微型打印机而言是数据串行输入端口。 CTS:允许发送信号,在标志控制握手方式下使用。 第四章系统软件设计 本次软件设计采用Keil C51单片机软件。Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部分组合在一起。运行Keil软件需要WIN98、NT、WIN2000、WINXP等操作系统。 4.1系统主程序 在主程序模块中,需要完成对各参量和接口的初始化、出租车起价和单价的初始化以及中断、计算、循环等工作。另外,在主程序模块中还需要设置启动/清除标志寄存器、里程寄存器和价格寄存器,并对它们进行初始化。然后,主程序将根据各标志寄存器的内容,分别完成启动、清除、计程和计价等不同的操作。 Title 13 SizeBDate:File:NumberRevision2-Jun-2011 Sheet of F:\\桌面\\huangweiPCB1.6\\MyDesign1.ddbDrawn By:
开始初始化液晶显示读取时间键盘扫描里程计数图3.1 主程序流程图
当汽车发动时,就启动计价,根据里程寄存器中的内容计算和判断行驶里程是否已超过起步价公里数。若已超过,则根据里程值、每公里的单价数和起步价数来计算出当前的总金额,并将结果存于总金额寄存器中;中途等待时,无脉冲输入,不产生中断,当时间超过等待设定值时,开始进行计时,并把等待价格加到总金额里,然后将总金额、里程和单价送数码管显示出来。
计算程序根据里程数分别进入不同的计算公式。如果里程大于3公里,则执行公式:总金额=起步价+(里程-3)*单价+等待时间*等待单价;否则,执行公式:总金额=起步价+等待时间*等待单价。程序流程图如图3.2所示。
入口里程>3YESNO总金额=起步价+等待时间*等待单价总金额=起步价+(里程-3)*单价+等待时间*等待单价返回图3.2 总金额计算程序流程图
14
4.2中断程序
中断程序包括外部中断0和外部中断1,其中外部中断0用于霍尔传感器里程计数,外部中断1用于等待时间计费。
4.2.1里程计数中断程序
每当霍尔传感器输出一个低电平信号就使单片机中断一次,当里程计数器对里程脉冲计满12次时,进入里程计数中断服务程序中,里程加1m,当里程计满1000次,里程变量加一。
入口中断12次?YesNodis++dis==1000?YesNo里程++
图3.3 里程计数中断程序流程图
返回4.2.2中途等待中断程序
在中途等待中断程序中,每5ms产生一次中断,将当前里程值送入某个缓存变量,每1分钟将缓存变量中的值和当前里程值比较,当汽车停止,霍尔传感器超过10分钟没有输出信号,当前里程值和缓存变量内的值相同,则进入等待计时,每1分钟记一次价格。
15