专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
51单片机
史上最简单的触摸屏电路
2020-02-01 16:34
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
51单片机
10870
68
68
元件: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说明书上都有的。
加载中...
1
2
3
4
5
6
7
8
下一页
最后一页
一周热门
更多
>
相关问题
【东软载波ESF0654 PDS开发板活动】开箱
1 个回答
东软载波ESF0654 PDS开发板外部中断
1 个回答
东软载波ESF0654 PDS开发板高级控制定时器AD16C4T
1 个回答
用串口调试助手为什么只能在hex模式接收发送而在文本模式不行
9 个回答
触摸芯片SC02B/SC04B在地砖灯的设计方案
1 个回答
东软载波ESF0654 PDS开发板串口USART0代码分享
1 个回答
普通32位单片机使用linux的应用代码
5 个回答
东软载波ESF0654 PDS开发板AT24C04的调试
9 个回答
相关文章
51单片机与蓝牙模块连接
0个评论
51单片机的硬件结构
0个评论
基于51单片机的无线遥控器制作
0个评论
51单片机 AD转换
0个评论
51单片机数码管递增显示
0个评论
如何实现对单片机寄存器的访问
0个评论
基于51单片机的指纹密码锁
0个评论
×
关闭
采纳回答
向帮助了您的网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
51单片机
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
关闭
您已邀请
15
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
;---------------进入触摸屏监控状态(通过)------------------------------
;功能:将触摸屏设置到监控状态,准备接收触摸。
;入口:无
;出口:无
;占用:无+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
-----------------------------------------------------------------------
STC12C5A32S2是唯一的处理芯片。
;功能:以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说明书上都有的。
一周热门 更多>