3 软件设计分析
对于按键的处理, 系统采用中断方式, 流程如图5所示。
图5按键流程图
主要相关程序如下:
/* 触摸屏写控制指令、读数据子程序* /
LDB R6, # 08H ; 写8位控制指令代码
CLRC; LDB AL, COM ; 指令代码准备发送
ADS7843_W: SHLB AL, # 1 ; 数据串行发送
JC S_D I_1; JMP S_DI_0
S_DI_1: LDB BL, IOPORT1 ; 将P1 口状态保存在BL 寄存器中
ORB BL, # 03H ; 将数据出DOUT置高, 数据入DIN 为信号输入状态
LDB IOPORT1, BL ; 将修改后的状态送至P1口
JMP SKCLK
S_DI_0: LDB BL, IOPORT1 ; 将P1 口状态保存在BL 寄存器中
ANDB BL, # 0FEH ; 将数据出DOUT 置低
ORB BL, # 02H ; 数据入D IN为信号输入状态
LDB IOPORT1, BL; 将修改后的状态送至P1口
SKCLK: LDB BL, IOPORT1 ; 将P1口状态保存在BL寄存器中
ANDB BL, # 0F7H ; 时钟信号DCLK为低
ORB BL, # 01H ; 将数据出DOUT 置高
LDB IOPORT1, BL ; 将修改后的状态送至P1口
LDB BL, IOPORT1 ; 将P1口状态保存在BL寄存器中
ORB BL, # 09H ; 时钟信号DCLK 为高, 将数据出DOUT置高
LDB IOPORT1, BL ; 将修改后的状态送至P1口
DJNZ R6, ADS7843_W ; 8位指令送完
LDB BL, IOPORT1 ; 将P1口状态保存在BL寄存器中
ANDB BL, # 0F7H ; 时钟信号DCLK为低
ORB BL, # 01H ; 将数据出DOUT 置高
LDB IOPORT1, BL ; 将修改后的状态送至P1口
/* 准备接受触摸屏按键读14 位数据数据, 先接受低8位数据* /
LDB R6, # 08H ; 键值设定方向读低8位数据程序
DATA_OUT: LDB BL, IOPORT1 ; 将P1口状态保存在BL寄存器中
ORB BL, # 09H ; 时钟信号DCLK 为高, 将数据出DOUT置高
LDB IOPORT1, BL ; 将修改后的状态送至P1口
LDB BL, IOPORT1 ; 将P1口状态保存在BL寄存器中
ANDB BL, # 0F7H ; 时钟信号DCLK为低
ORB BL, # 01H ; 将数据出DOUT 置高
LDB IOPORT1, BL ; 将修改后的状态送至P1口
SHLB AL, # 1 ; 数据左移一位
JBS IOPORT1, 0, DI_O_1 ; 判数据入DIN 高?
ANDB AL, # 0FEH ; 数据入DIN低, 输入0
JMP DATA_OUT1
DI_O_1: ORB AL, # 01H ; 数据入DIN高, 输入1
DATA_OUT1: DJNZ R6, DATA_OUT ; 8位数据读完
STB AL, FIRST ; 低8位数据保存至FIRST单元同样处理接受数据高4位数据
…… …… ; 4位数据读完, 数据保存。读14 位数据程序完成后返回
程序上机调试后再没有出现触摸屏与单片机之间指令不执行, 烧坏触摸芯片的问题。也许你会发现, 在程序编程中, 我们使用了BL寄存器作P1口的过渡保护单元, 对输出信号采用了对位的或、与方式达到输出“1”、 “0”电平。保证P1的输入端口不会因其他P1 端口的操作而改变其状态, 在信号线上出现两个输出、争抢信号的现象。这就是触摸屏出问题的主要原因。
4 结语
在项目鉴定时, 专家们给出了系统设计新颖、结构合理、功能比较完善, 扩展性强, 有一定的市场空间。特别提到了每个触摸键设计合理、反映正确的结论。
在本项目结束时还有一个关于按键的遗留问题: 由于是使用单端模式工作, 且CPU 接到请求后, 为了消除抖动、防止误触发, 延时后再响应其请求, 造成了按键反映迟缓, 这是一个硬件、软件都需改进的问题, 硬件需换模拟数据转换芯片,软件上延时可以短一些。
评论
查看更多