首 页 学 苑 例 子 工 具 下 载 商 城 论 坛
     
 

    这个例子是我在OURAVR上发表的,现在只是重新注释整理一下。

  工作原理:因为avr的输出是推挽式的并且带负载能力比较强,我先将垂直线Y一个置高一个置低,然后对水平线X做AD转换得到Y坐标,相同的方法得到X坐标,坐标值的稳定性取决于电源的稳定性,这种方式完全能做小屏幕的块识别,比如菜单什么的,至于提高稳定性我们可以每次在转换之前先测量I/O口的空载电压,然后与标定值比较来确定怎么去补偿,还可以多转换几次做平均值,这个方法最大的优点是成本低无需额外的硬件,对于某些产品省钱才是硬道理,如果用51的话就没有这么幸运,当然如果你的屏幕很大,比如15寸,那么就只能选择较高分辨率的专用触摸屏芯片,如果只是5寸左右的小屏并且不做手写识别,那么就完全可以这样做。

电路原理图:

 

实物图片:由于手要拿照相机,所以用钳子夹了个螺丝压在触摸屏上。

 

'/////////////////////////////////////////////////////////////////////////////////////
'///工程:FastAVR Basic AVR读手机触摸屏试验
'///芯片:mega16
'///简介:读出触摸屏受按压位置的坐标,并在240×128pix的LCD上显示出来(T6963控制器)
'///编译:通过
'///实践:实物测试通过
'///作者:agui2008
'///时间:2005/8/22整理
'/////////////////////////////////////////////////////////////////////////////////////

$Device= m16                           
'声明器件型号
$Stack = 32                            
 '声明堆栈大小
$Clock = 12                            
 '声明时钟频率
$Source= On                             
'声明注释转移 ,也就是所有的注释转移到汇编文件里面
$Baud=9600                             
 '声明串口波特率 ,后面有将坐标值通过串口输出
$GLCD T6963C, Data=PORTC, ctrl=PORTA, 240, 128, 1 
'声明LCD和AVR的连接关系以及LCD的规格    
$Gctrl CD=7, CE=6, RD=5, WR=4, FS=0     
'FS无需I/O控制,请自己连接到gnd or vcc ,这个地方比BASCOM有优势
$LeadChar=" ",Format(3,0)             
 '声明显示的数据要格式化
$Def YH=PORTA.0                       
 '触摸屏有4条线,在这里指明连接关系
$Def YL=PORTA.2
$Def XH=PORTA.1
$Def XL=PORTA.3

Dim x As Word             
 'x坐标
Dim y As Word             
 'y坐标  
Dim cu As Flash Byte      
 '字符串“触”保存在Flash
Dim mo As Flash Byte     
  '字符串“摸”保存在Flash  
Dim pin As Flash Byte     
 '字符串“屏”保存在Flash  
Dim ce As Flash Byte      
 '字符串“测”保存在Flash  
Dim si As Flash Byte      
 '字符串“试”保存在Flash  

Set DDRB.0                 
 '设置portb.0=1,为输出口接LCD RESET      
Reset PORTB.0             
 '复位LCD
WaitMs 1                  
 'lcd复位1MS
Set PORTB.0
WaitMs 200                 
'延时200ms
               
GrpHomeSet &h200            
'设置图形显示区首地址
TxtHomeSet &h00          
  '设置文本显示区首地址
TxtAreaSet &h20            
 '设置文本显示区页宽
GrpAreaSet &H20             
'设置图形显示区页宽fs=0,8×8,8×30=240
Gcommand &h80               
'显示方式文本和图形相或
Gcommand &h9c             
 '
Gcommand &ha7             
 '
Gcommand &h9a            
   '文本on,图形on
GCls                       
'清屏绘画页
Tcls                     
  '清屏文本页,因为基于T6963的LCD有文本和绘画二个页面
WaitMs 250                
 '延时250ms

TLcd(0,15),"Email:agui868@21cn.net"  
'在文本页0列15行显示字符串“Email:agui868@21cn.net”
TLcd(7,1),"test t6963c DEMO"        
 '在文本页7列01行显示字符串“test t6963c DEMO”
ImgSet(10,50),cu                    
 '在绘画页10列50行显示字符串“触”
ImgSet(12,50),mo                   
  '在绘画页12列50行显示字符串“摸”
ImgSet(14,50),pin                   
 '在绘画页14列50行显示字符串“屏”
ImgSet(16,50),ce                     
'在绘画页16列50行显示字符串“测”
ImgSet(18,50),si                     
'在绘画页18列50行显示字符串“试”
Wait 1                               
'延时1s                     
Do
Reset DDRA.1
Reset DDRA.3
Set DDRA.0
Set DDRA.2
Set YH
Reset YL
WaitMs 2
Start Adc,Vref=Int   
 '开始ADC转换,使用内部基准
x=Adc(1)              
'得到ADC通道1的值,它就是x坐标
Stop Adc              
'停止ADC
If x=1023 Then x=0      
Reset DDRA.0
Reset DDRA.2
Set DDRA.1
Set DDRA.3
Set XH
Reset XL
WaitMs 2
Start Adc,Vref=Int 
y=Adc(0)             
 '同样得到y坐标
Stop Adc
If y=1023 Then y=0
TLcd(0,6),"x="        
'在文本页0列6行显示字符串“x=”
TLcd(2,6),x           
'在文本页2列6行显示变量x的值
TLcd(0,8),"y="
TLcd(2,8),y
Print "x=";x         
 '通过串口输出坐标值
Print "y=";y
WaitMs 50
Loop

$Include "c:\fastavr\ks0108b\cu.bas"   
'字符串“触”的字模存放的路径      
$Include "c:\fastavr\ks0108b\mo.bas"   
'字符串“摸”的字模存放的路径
$Include "c:\fastavr\ks0108b\pin.bas
 '字符串“屏”的字模存放的路径
$Include "c:\fastavr\ks0108b\ce.bas"  
 '字符串“测”的字模存放的路径
$Include "c:\fastavr\ks0108b\si.bas"  
 '字符串“试”的字模存放的路径,其实这几个字模我们可以做在一起
End

 

 
 

链接:

 

周立功  AVR单片机DIY 21IC社区 正强单片坊 电子资料城
双龙电子 ICCAVR 力源信息 www.atmel.com 电子之城
华强电子世界 AVR与虚拟仪器 美信中国 www.fastavr.com ARM开发网
宁波三和壳体公司 杭州福芯电子 芯艺设计室 www.mcselec.com 东创科技

Copyright©2005 Basicavr.com Email:agui2008@21cn.net  TEL:13798456680 FAX:075584717022

地址:深圳市华强北路赛格电子市场一楼1B105柜 QQ:543527753 粤ICP备05079885号