NULL的技术资料库nullshcn复制地址
控制面板
推荐博客圈
您的消息:
日历
<2008年12月>
SuMoTuWeThFrSa
30123456
78910111213
14151617181920
21222324252627
28293031123
45678910
留言簿(2)
随笔档案
     四、程序设计

     下面以售卡机为主介绍软件设计方法。

     考虑到售卡金额的安全管理,公交公司事先必须制作好两种IC票卡:一种是用户IC票卡,另一种是售卡员的售票IC卡。这两种卡可使用相同区号,但密码和访问条件完全不同,不会混淆。售卡员要进行售卡时,必须先到公交公司办理一张售票IC卡,才有售卡的资格。售票IC卡内存放了售卡员身份号、允许售卡的最大金额、两套6字节密码和4字节读写访问条件。售卡员售卡时,每充值一张卡必须从自己的售票IC卡中减去售卡金额,加到用户IC卡中。当售票IC卡金额减到零后,要到公交公司结账,并再对售票IC卡充值记账。这样,可使公交公司的售卡网点分布得多而不乱,又可方便用户充值加卡,可有效地防止售票人员账日不清而造成的资金流失。程序主要包括IC卡读写操作程序、键盘扫描程序、显示程序、存储器读写程序和通信程序。

     1.主程序

     主程序主要完成系统变量的初始化,循环扫描键盘,检测操作IC卡,将操作结果存储和显示。在售卡机中使用了8KB的24C64作存储器,主要存储的内容有:售卡机机号(1字节)、售卡总金额(3字节)和总记录(2字节)。售出的每张卡的记录包含:用户卡身份号(4字节)、售卡日期(2字节)、加卡金额(1字节)和售卡人编号1字节)。因此最大能存储1023张售卡记录。主程序流程如图2所示,读写器对IC卡的操作流程如图3所示。



     2.键盘扫描程序

     键盘扫描采用反转法读键:先从P2口的高4位输出零电平,从P2口的低4位读取键盘状态;再从P2口的低4位输出零电平,从P2口的高4位读取键盘状态,将两次读取的结果组合起来就可以得到当前按键的特征码(见程序中TABLE表)。有了这张表就可以编程,将已们转换成顺序码。用当前读得的特征码来顺序查表,用一单元记录查找次数。当在表中查到有该特征码时,已的位置(即查找次数)就是对应的顺序码。对应的键盘查键程序如下:

KEY: MOV P2, #OFH;用反转法查键
MOV A, P2
ANL A, #OFH
MOV B, A
MOV P2, #OFOH
MOV A, P2
ANL A, #OFOH
ORL A, B
CJNE A, #OFFH, KEY1
RET;无键按下
KEY1: MOV B, A;有键按下,存键码
MOV DPTR, #TABLE
MOV R3, #OFFH;存顺序码单元初始化
KEY2:INC R3
MOV A, R3
MOVC A, @A+DPTR
CJNE A, B, KEY3;判键码,求顺序码
MOV A, R3;若找到键码,存顺序码
RET
KEY3:CJNE A, #OFFH, KEY2;判是否查完
RET;己查完,键码未找到,以无按键处理
TABLE : DB 77H, 7BH, OBBH;按键特征码表
DB ODBH, 7DH, OBDH
DB ODDH, 7EH, OBEH
DB ODEH, OB7H, OD7H
DB OEEH, OEDH, OEBH
DB OE7H.OC7H.OFFH

      3.显示程序

      根据图1,在显示电路中,用P1口的3根I/0口线(P1.0. P1.1. P1.2)分别提供时钟信号(CLK) 。

      串行数据CDA)和使能信号(EN)。MC14499每一次可接收20位串行输入数据,前4位用于控制数码管的小数点显示,后16位是4个数码管的BCD码输入数据。在每帧数据传送之前,必须将EN置0;然后传送20位数据,数据传送完后,丙将EN置1。

      显示程序如下:

DISP:CLR P1. 0;清CLK
CLR P1. 2;清EN
MOV R2, #04;置传送位数
MOV A, #00
LCALL W14499;调送数显示
MOV A, @R1;读要显T的数
MOV R2, #08;置传送位数
LCALL W14499
工NC R1
MOV A, @R1
MOV R2,#08;置传送位数
LCALL W14499
SETS P1. 2;置EN位
RET
W14499:SETS P1. 0;清CLK
RLC A;准各逐位送数显T
NtOV P1.1, C;将数移入DA
CLR P1.0;清CLK
DJNZ R2, W14499
RET

      4.串行E2PROM读写程序

      24C64为I2C总线的E2PROMo SCL为400kHz时钟线,SDA为双向数据线,A2. A1. AO三位为片选地址,即I2C总线上最多可并联8个串行E2PROM芯片。对E2PROM的操作方式由读写控制命令字决定,如图4所示其中”1010”为4位读写控制码,R/W为读写控制位: 0 为写操作,"1”为读操作。所以结合图1可知A2H为写控制命令字,A3H为读控制命令字。



     对存储器写操作,首先,单片机向24C64发一个START命令,产生开始条件。然后,发写命令控制字(如A2H)。当24C64接到命令后,进入一个写周期,再由单片机发送存储地址,即确定数据写入到存储器的哪个地址,随后,单片机将要存储的数据送入到SDA数据线上。写周期结束时,甲一片机再发一停止位(STOP)。

     对存储器读操作,首先,单片机向24C64发一个START命令,产生开始条件。然后发写命令控制字(如A2H)。当24C64接到命令后,进入一个写周期,再由单片机发送存储地址。存储地址发送成功后,单片机又向24C64发一个START命令,产生开始条件,然后发读命令控制字(A3H)。当24C64接到命令后,进入一个读周期,单片机从SDA数据线上读出指定存储地址中的数据。读周期结束时,单片机再发一停止位(STOP)。(程序略)

     值得注意的是,对存储器操作时,每读写一个字节,单片机必须送一个应答位(ACK),释放一下SDA数据线,以便存储器能继续接收数据。

     5.通信程序

     在读写器中,单片机与PC机之间的通信主要由TC232来实现TTL电平( 0-5V>与RS232电平(正10-负10V)的转换(电路见图1),以完成售卡机保存的售卡记录的传送。通信格式设置为:采用串行工作方式1,波特率为9600baud,  1个起始位,8位数据位,1个停止位,采取和校验方式。读写器中,单片机程序可采用C语言进行编程。C语言有功能丰富的库函数,运算速度快、编译效率高、可移植性好、软件的可读性强,便于改进和扩充(程序略)。

     为提高在公交系统的适应能力,包括用户的各类特殊要求,抗干扰,抗恶劣环境,除硬件上采用监控电路外,在软件上还采取了指令冗余和软件陷阱。

作者: 阅读() 评论()  编辑 发表于:2006-05-26 11:06
版权声明:天极是本Blog托管服务提供商。如本文牵涉版权问题,天极不承担相关责任,请版权拥有者直接与文章作者联系解决。
Powered by:

Copyright ©