一乐电子

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

微信扫码登录

手机号码,快捷登录

手机号码,快捷登录

搜索
查看: 3387|回复: 4

[其他综合] 发个触摸芯片ADS7843 的驱动,汇编的,

[复制链接]
发表于 2011-2-27 17:18 | 显示全部楼层 |阅读模式
本帖最后由 老弹弓 于 2011-2-27 17:25 编辑

MOSI            EQU P1.5                         ; spi
               MISO            EQU P1.6                         ; SPI            
               SCLK            EQU P1.7                         ; 时钟
               F_CS            EQU P1.0                         ; DATAFLASH片选
               TP_CS           EQU P1.2                        ; 触摸芯片片选
               SD_CS          EQU P1.1                        ; SD卡片选                          
               TP_X_DATA   EQU  50H                        ; 8位x值
               TP_Y_DATA   EQU  51H                        ; 8位y值
               TP_CONTOR   EQU  52H                        ; 放tp 的控制字

               ORG     0058H
MAIN:     
               LCALL  TP_Take_X                              ; 获取x通道的值
               LCALL  TP_Take_Y                              ; 获取y通道的值
               jmp     $  
;***************************************************************************************
;子程序名称:TP_Take_X
;功能:  读取X  通道的值
;入口: ,
;出口:  读到的数放在 TP_X_DATA  中
;***************************************************************************************
TP_Take_X:     
               MOV       TP_CONTOR, #98H               ;  送x通道的控制字   1001 0100  差分 x    8位模式  
               LCALL     TP_SEND                            ;  发送x通道的控制字
               LCALL     DELAY1US                          ;  延时或检测忙信号   实际是0.5us           
               LCALL     TP_TAKE                            ;  获取x通道的值
               MOV       TP_X_DATA ,A                     ;  保存x通道的值
               ret
;***************************************************************************************
;子程序名称:TP_Take_Y
;功能:  读取X  通道的值
;入口: ,
;出口:  读到的数放在 TP_X_DATA  中
;***************************************************************************************
TP_Take_Y:     
               MOV       TP_CONTOR, #0d8H              ; 送Y通道的控制字   1101 0100  差分 Y    8位
               LCALL     TP_SEND                             ; 发送Y通道的控制字
               LCALL     DELAY1US                           ; 延时或检测忙信号  实际是0.5us
               LCALL     TP_TAKE                             ; 获取Y通道的值
               MOV       TP_Y_DATA ,A                     ; 保存Y通道的值
               ret
;***************************************************************************************
;子程序名称:?TP_SEND
;功能:  发送获取 通道的控制字
;入口:  R1 放发送次数 8 ,TP_CONTOR 放发送控制字 用到 A
;***************************************************************************************
TP_SEND:      
               CLR       TP_CS                           ; 片选
               CLR       SCLK
               MOV       R1,#8                          ; 发送次数
               MOV       A,TP_CONTOR              ; 通道的控制字
TP_SEND8:      MOV       C,ACC.7                ; 控制字的第七位送到 c
               MOV       MOSI,  C                      ; 第一位送到 数据输出
               NOP
               NOP
               NOP
               NOP
               SETB      SCLK                          ; 上升沿数据被读入
               NOP
               NOP
               NOP
               NOP
               CLR      SCLK
               RL       A                                   ; 左移A
               DJNZ     R1 , TP_SEND8
               RET   
;***************************************************************************************
;子程序名称:TP_Take           7843 在下降沿移出数据,可利用上升沿读取。  脉冲宽度 要大于 200ns
;功能:  读取X 或Y 通道的值
;入口:  R1 放发送次数 8 ,
;出口:  读到的数放在 A 中
;***************************************************************************************
TP_Take:      
               MOV      R1,#8                          ; 放入读取次数,这里是8位所以放8 如果是12位就放12
               SETB     MISO                           ; 置高,准备读取
               SETB     SCLK                           ; CLK =1
               NOP
               NOP
               NOP
               NOP
               NOP
               CLR       SCLK                          ; CLK=0  7843 在下降沿移出数据  第一位可以在这里读取 也可以在下一个时钟的上升沿后
               NOP
               NOP
               NOP
               NOP                                        ; 额外增加的时钟,让第一个数据先发送的DOUT 上。
               NOP
TP_TAKE8:      
               SETB      SCLK                          ; CLK=1
               MOV       C, MISO                       ; 读取 3时钟
               RLC       A                                ; 左移一位 到A 中   1 时钟
               NOP                                         ; 1时钟
               NOP                                        ; 共计 6 时钟延时  0.045*6= 270ns 大于 200ns         
               CLR       SCLK                          ; CLK=0   数据被送到数据线上
               NOP
               NOP
               NOP                                                      
               DJNZ     R1,TP_TAKE8                ; 读取8次              
               SETB     TP_CS                          ; 禁止片选
               RET
delay1us:  
               nop  
               nop                 
               nop
               nop                 
               nop
               nop                 
               nop
               nop
               nop
               nop            ;22m 晶振
               ret
               end


为什么代码以发上来就乱了?
发表于 2011-4-9 17:05 | 显示全部楼层
支持一下。最近也在捣腾TFT和触摸。这段代码可以正确使用么?
回复

使用道具 举报

发表于 2011-4-10 08:30 | 显示全部楼层
谢谢老弹弓 的资料!

  学习!支持!
回复

使用道具 举报

发表于 2011-4-10 19:20 | 显示全部楼层
可以配合手机用的触摸屏吗?
回复

使用道具 举报

发表于 2013-2-22 22:36 | 显示全部楼层
好吧,俺挖坟了··
谢楼主分享!!
回复

使用道具 举报

本版积分规则

QQ|一淘宝店|手机版|商店|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2025-11-2 20:57 , Processed in 0.034775 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表