史上最简单的触摸屏电路

2020-02-01 16:34发布

元件:STC12C5A系列单片机一个,12864LCD一块,四线电阻触摸屏一块。电容电阻各一个。要是你还得做通信的话,最好加上晶振。

就是这个样子 (原文件名:DSCN4156.jpg)


可以象手机一样滚屏 (原文件名:DSCN4157.jpg)


这是背面 (原文件名:DSCN4158.jpg)
电路图就不传了,很好接的,P3口的3、4、5、6与对面的P1口连接起来,接到四线触摸屏上。就可以了。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
67条回答
cne53102
1楼-- · 2020-02-01 18:39
楼主不要吊人胃口啊~~~~
hust_netstat
2楼-- · 2020-02-01 19:05
用的什么处理芯片呀
BDXing6
3楼-- · 2020-02-01 19:38
接着发几个有关触摸屏的子程序。全汇编写的。
;---------------进入触摸屏监控状态(通过)------------------------------
;功能:将触摸屏设置到监控状态,准备接收触摸。
;入口:无
;出口:无
;占用:无+2
Inint:  MOV P3M0,#00000000B
        MOV P3M1,#00000000B   ;将R0A、R0B、R1A、R1B配置成准双向口
        CLR P3.4
        CLR P3.6
        SETB P3.3
        SETB P3.5
        MOV ADC_DATA,#0       ;清空AD结果寄存器
        RET
;----------------触摸屏中断处理程序(通过)-------------------------------
;功能:触摸屏中断处理过程
;入口:无
;出口:KEYXX、KEYYY(键值座标)
;占用:工作寄存器一区
InAD:
        CLR EX1                  ;关闭触屏中断
        PUSH ACC
        PUSH B
        PUSH PSW
        SETB RS0
        CLR RS1
        CLR F0                   ;该位用于屏幕移动后的标志
        JB P1.0,InAD2            ;屏在打开状态,移去进行AD转换
InAD1:  JNB P3.3,$               ;等待用户释放触屏
        MOV A,#2                 ;延时20ms
        LCALL DELAY
        JNB P3.3,InAD1           ;确认触摸已释放
        ;CLR P1.2                 ;向主控计算机发送申请,该请求在与主控机建立联系后撤除
        ;SETB RELCD               ;刷屏标志位置位
        ;SETB P3.7                ;打开屏开关
        AJMP InAD4               ;转出退出中断
InAD2:  MOV A,#1                 ;延时10ms
        LCALL DELAY
        JB P3.3,INAD9            ;确认触屏被按下,未按下则退出
InAD3:  LCALL CPAD               ;调AD子程序
        LCALL INInt              ;触屏进入待命状态
        MOV A,#1                 ;延时10ms
        LCALL DELAY
        JB P3.3,INAD7           ;按键已释放,退出中断
        MOV A,KEYXX             ;键区是否有值?
        JB ACC.7,INAD6
        MOV A,KEYYY
        JB ACC.7,INAD6          ;没有,保存健值。再进行AD转换
        JB ACC.6,INAD6
                                ;已有键值,比较缓冲区与键区值大小
        JB F8,INAD10            ;已经开始横向移动,不再进行上下判断

        MOV A,KEYX              ;上下移动判断
        SUBB A,KEYXX
        JNC INAD4
        CPL A
        INC A
INAD4:  MOV F1,C
        CJNE A,#3,INAD5          ;小于3个点的位移作为抖动处理
INAD5:  JC INAD14
        CLR F8                   ;复位F8,表示正在进行高下移动

        SJMP INAD13
inad14: JB F0,INAD3              ;已经开始纵向移动,不再进行左右判断
inad10: MOV A,KEYYY              ;否则进行左右移动判断
        SUBB A,KEYY
        JNC INAD11
        CPL A
        INC A
inad11: MOV F1,C
        CJNE A,#3,INAD12         ;左右位移小于3个点也作为抖动处理
inad12: JC INAD3                 ;转去AD转换
        SETB F8                  ;否则横向移动标志置位
inad13: LCALL MOVELCD            ;调移动屏程序(移动多少在A中,F1中为移动方向)
INAD6:  MOV KEYXX,KEYX           ;键缓冲区值送入键区
        MOV KEYYY,KEYY
        SJMP INAD3               ;继续AD转换
INAD7:
        JNB F0,INAD8             ;不是移动屏幕转移则转去保存键值,退出
        MOV KEYX,#0FFH           ;移动屏幕后清键值缓冲区
        MOV KEYY,#0FFH
        CLR A
        CLR RS0
        LCALL SCAll           ;重绘按纽区
        SETB RS1
        SETB RELCD
        mov R6,#0             ;清除累计移动值(试着用R6,R7作该参数寄存器)
        mov R7,#0
INAD8:  MOV KEYXX,KEYX        ;缓冲区键值送入键区
        MOV KEYYY,KEYY
INAD9:  CLR F0                ;清除屏幕移动标志
        CLR F8                ;清除纵横移动标志
        CLR F1                ;清除上下移动标志
        POP PSW               ;退出并开中断
        POP B
        POP ACC
        SETB EX1
        RETI
;-------------------------屏幕移动子程序---------------------------
;触摸屏拖动处理过程
;入口:ACC(移动点数)、F1(移动方向,复位向下),F8(复位为上下移动,置位为左右移动)
;出口:
;占用:
MOVELCD:
        JB F8,kk
        JNB F1,tt4        ;向上移动时,将移动点转换为带符号数
        CPL A
        INC A
tt4:                      ;ACC中的值为带符号移动点数
        ADD A,R6          ;移动值累计到寄存器
        MOV R6,A
        JNB ACC.7,tt3     ;将A中累计移动点变为绝对值
        CPL A
        INC A
tt3:    SUBB A,#17        ;与半个纽高比较
        JC tts            ;小于等于17不改变指针,转去显示
        JB F1,tt2         ;C复位,改变指针
        LCALL CHandDec    ;向下移动,指针-1
        SUBB A,#17        ;变更移动参数
        MOV R6,A          ;变更后送回保存
        SJMP tts          ;转去显示
tt2:    lcall chandinc    ;向上移动,指针+1
        add a,#17
        mov R6,a          ;送加累计寄存器

tts:    mov a,R6    ;开始移动
        clr rs0
        LCALL scall       ;重绘按纽区
        setb rs0
        SJMP RET_1
kk:     lcall HMove        ;此处转向横向移动屏幕处理
ret_1:  LCALL SHOWLCD
        SETB F0
RET_:   RET
BDXing6
4楼-- · 2020-02-01 20:16
回复【2楼】hust_netstat
-----------------------------------------------------------------------

STC12C5A32S2是唯一的处理芯片。
BDXing6
5楼-- · 2020-02-01 21:57
 精彩回答 2  元偷偷看……
BDXing6
6楼-- · 2020-02-01 22:16
;-------------------------AD采样程序GET_AD----------------------------
;功能:以ACC为通道的IO口进行A/D转换,结果送入ACC
;入口:ACC
;出口:ACC
;占用:无+2字节栈
GET_AD:
            ORL A,#ADC_POWER
            ORL A,#ADC_SPEEDL
            ORL A,#ADC_START
            MOV ADC_CONTR,A
            NOP
            NOP
            NOP
            NOP
AD_WAIT:    MOV A,ADC_CONTR
            JNB ACC.4,AD_WAIT
            ANL ADC_CONTR,#NOT ADC_FLAG
            MOV A,ADC_DATA
            RET
这个AD其实没必要传,STC说明书上都有的。

一周热门 更多>