📄 touch.lst
字号:
C51 COMPILER V8.09 TOUCH 04/21/2010 21:14:13 PAGE 1
C51 COMPILER V8.09, COMPILATION OF MODULE TOUCH
OBJECT MODULE PLACED IN E:\项目\制袋机\程序\制袋机~1\TOUCH.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE E:\项目\制袋机\程序\制袋机~1\TOUCH.C DB SB OE
line level source
1 /***************************************
2 * 文件名:TOUCH.c
3 * 描述:
4 * 最后修改时间:2010.4.7
5 ****************************************/
6
7 #include "includes.h"
8
9 #define XZERO 160
10 #define YZERO 263
11 #define XFULL 3919
12 #define YFULL 3764
13
14 static uint xdata temp_x[10];
15 static uint xdata temp_y[10];
16
17
18 //====================================================================================
19 //函数名称:uint average(uint* a,uchar len)
20 //函数功能:数据处理程序,采集len次的数据,去掉最大值,去掉最小值,然后求平均
21 //入口参数:数组首地址
22 //出口参数:平均值
23 //====================================================================================
24 uint average(uint * a,uchar len)
25 {
26 1 uint max,min,i,ave=0;
27 1 ulong sum=0;
28 1 max=a[0];
29 1 min=a[0];
30 1 for(i=0;i<len;i++)
31 1 {
32 2 if(max<a[i])
33 2 max=a[i];
34 2 if(min>a[i])
35 2 min=a[i];
36 2 sum+=a[i];
37 2 }
38 1 ave=(sum-min-max)/(len-2);
39 1 return ave;
40 1 }
41
42 bool TOUCH_IsReleased()
43 {
44 1 PENIRQ = 1;
45 1 if(PENIRQ)
46 1 return true;
47 1 else
48 1 return false;
49 1 }
50
51 void Update_TouchPoint()
52 {
53 1 uint temp;
54 1 temp = average(temp_x, 10);
55 1 g_Status.x = (uint)((float)temp *0.21075 - 31.296);
C51 COMPILER V8.09 TOUCH 04/21/2010 21:14:13 PAGE 2
56 1 temp = average(temp_y, 10);
57 1 g_Status.y = (uint)((float)temp*0.17346 - 59.41);
58 1 }
59
60 //====================================================================================
61 //函数名称:void ADS7843_start(void)
62 //函数功能:ADS7843启动
63 //入口参数:无
64 //出口参数:无
65 //====================================================================================
66 void ADS7843_start(void)
67 {
68 1 DCLK=0;
69 1 CS=1;
70 1 DIN=1;
71 1 DCLK=1;
72 1 CS=0;
73 1 }
74
75 //====================================================================================
76 //函数名称:void ADS7843_wr(uchar dat)
77 //函数功能:写ADS7843
78 //入口参数:dat 写入的数据
79 //出口参数:无
80 //====================================================================================
81 void ADS7843_wr(uchar dat)
82 {
83 1 bit temp;
84 1 uchar i;
85 1 DCLK=0;
86 1 for(i=0;i<8;i++)
87 1 {
88 2 DCLK=0;
89 2 temp=(bit)((dat) & 0x80); //DCLK低电平时准备数据
90 2 dat=dat<<1;
91 2 DIN=temp;
92 2 delay_us(2);//_nop_();
93 2 DCLK=1;
94 2 delay_us(2);//_nop_();
95 2 }
96 1 DCLK=0;
97 1 }
98
99 //====================================================================================
100 //函数名称:uint ADS7843_rd(void)
101 //函数功能:读ADS7843
102 //入口参数:无
103 //出口参数:读回的坐标值
104 //====================================================================================
105 uint ADS7843_rd(void)
106 {
107 1 uchar i;
108 1 uint dat=0;
109 1 for(i=0;i<16;i++)
110 1 {
111 2 DCLK=1;
112 2 delay_us(3);//下降沿有效
113 2 DCLK=0;
114 2 delay_us(3);
115 2 DOUT=1;
116 2 if(DOUT)
117 2 dat++;
C51 COMPILER V8.09 TOUCH 04/21/2010 21:14:13 PAGE 3
118 2 if(i<15)
119 2 dat<<=1;
120 2 //delay_us(2);
121 2 }
122 1 dat=(dat&0xFFF0)>>4;
123 1 return dat;
124 1 }
125 //====================================================================================
126
127 void TOUCH_INIT()
128 {
129 1 INT0=1;//INT1输出高电平
130 1 IE0=0;//中断标志位清零
131 1 IT0=1;//下降沿触发
132 1 EX0=1;//INT1打开
133 1
134 1 ADS7843_start();
135 1 ADS7843_wr(0x94);//送控制字 10010000 即用差分方式读X坐标
136 1 delay_us(200);
137 1 ADS7843_rd(); //读X轴坐标
138 1 }
139
140 //====================================================================================
141 //函数名称:void intr0_ISR()
142 //函数功能:外中断0中断服务函数
143 //入口参数:无
144 //出口参数:无
145 //====================================================================================
146
147 void intr0_ISR() interrupt 0
148 {
149 1 uchar i;
150 1 EA=0;//关中断
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -