吉林工程技术师范学院毕业论文
4.3.4 时钟程序设计
对DS1302进行读写的程序流程图如图4-6所示:
图4-6读写程序流程图
向该地址写入数据 数据写完了 将读出的数据暂存,待显示 结束 写DS1302地址 数据读完了 RST—端送高电平 将该地址数据读出 去除写保护 写入DS1302读地址 开始 将DS1302写保护 变量初始化 RST—端送高电平 在对DS1302进行读操作时,读出的数据为BCD码,同样在写操作时,写入的数据一也必须为BCD码,这就需要在数据写入之前、读出之后进行必要的数据进制之间的转换,以便与系统其它数据在比较时相对应。在本系统中,因设定的时间参数一般都为二进制或十六进制数,为了便于同DS1302的时钟数据进行比较,故在程序中需进行二进制与BCD码之间的转换,其相互间的转换程序如下;
;二进制转换为BCD码 ;Function: DisTimeBCD ;DisTimeBCD: Mov A, @R0 An 1 A, #0FH
31
第4章 控制模块软件设计与开发
Mov Rl,AInc Rl Mov A, @R0 Swap A Anl A, #0FH Mov @R1,A Inc Rl Inc R0 Ret
;BCD码转换为二进制
;Function: DisTimeHex DisTimeHex: Mov A,@R0 Mov B, #10 Div AB Mov @R1,B Inc R1 Mov @R1,A Inc R1 Inc R0 Ret
4.4 显示驱动模块
系统运行过程中的数据显示是人机交互对话的一个重要通道。通过系统数据的显示,我们才可以更好的了解系统运行的状态,从而便于对整个系统进行必要的操作。本系统中采用共阳极的数码管,其中采用ULN2803作为驱动数码管的段选的芯片,采用简单又便宜的9012三极管来驱动数码管的位选,节约成本,程序编写简单。
32
吉林工程技术师范学院毕业论文
4.4.1 ULN2803驱动器的应用
考虑到数码管驱动信号要求的驱动电流较大,采用功率驱动器件ULN2803,芯片外形如图4.7所示。此芯片是八组NPN型达林顿功放三极管集成芯片,典型的输入电压是5V,集电极输出功率可达50VX600mA。因此采用ULN2803作为共阳数码管的段信号驱动器,而共阳数码管的位信号驱动则采用8个晶体管9012来实现。又由于ULN2803为低电平驱动,所以数据送到单片机端口之前,应在程序中先将数据取反,然后将数据送到与ULN2803输入端口相连接单片机的PO端口即可,简化软件程序。
图4.7芯片外形
4. 4. 2显示程序设计
其显示子程序如下:
Display: Mov R0 , DisBufptr Mov A, @R0
DisPlayl: Mov Dptr, #DisTab Movc A, @A+Dptr Cpl a
Mov DisModPort, A Mov A, DisCSPtr
Mov DisCSPort, A RL A Mov DisCSPtr, A
33
第4章 控制模块软件设计与开发
Inc DisBufPtr Jb Acc. 0, DisQuit
InitDisO: Mov DisCSPtr, #11111110B Mov DisBufPtr, #DisBuf DisQuit: R
每次先送一位要显示的数据字节,然后再送该位LED的位地址字节,直到8位显示完全。本系统在运行过程中需要显示察看的数据有时钟及遥控器键盘显示数值。正常工作中8位显示器显示实时时钟,时间显示小时、分钟和秒钟,其中有两位用来显示“----”,用以分隔小时、分钟和秒钟,这样显示更加清晰。当然,在测试期间,数码管用来显示遥控器的键值。
4.5 系统键功能
4.5.1 键功能处理程序
在执行完键盘采集工作后,如果有键按下,程序转入键处理功能程序。系统根据键采集过程中得到的键号,散转到相应的键处理子程序,通过键盘设置修改系统工作参数。其程序如下:
DoKey: Mov a, KeyGet Rl a
Mov dptr, #KeySub Jmp @a+dptr
KeySub: Ajmp Key0 ;0 Ajmp Keyl ;1 Ajmp Key2 ;2 Ajmp Key3 ;3 Ajmp Key4 ;4 Ajmp Key5 ;5 Ajmp Key6 ;6 Ajmp Key6 ;7
34
吉林工程技术师范学院毕业论文
Ajmp Key6 ;8 Ajmp Key6 ;9
35