📄 main.lst
字号:
C51 COMPILER V8.01 MAIN 10/10/2008 10:19:48 PAGE 1
C51 COMPILER V8.01, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*
2 [文件名] Touch.c
3 [功 能] 8051单片机驱动ADS7846/ADS7843芯片
4 [简 介] ADS7846/7843芯片 适合用在4线制触摸屏,它通过标准SPI协议和CPU通信,操作简单,精度高,
5 当触摸屏被按下时(即有触摸事件发生)则ADS7846向CPU发中断请求,CPU接到请求后,应延时一下再
6 响应其请求,目的是为了消除抖动使得采样更准确。如果一次采样不准确。
7 */
8 #include"reg51.h"
9 #include"intrins.h"
10 #include"math.h"
11
12 sbit DCLK=P1^0;
13 sbit CS=P1^1;
14 sbit DIN=P1^2;
15 sbit DOUT=P1^7;
16 // sbit BUSY=P2^5;
17
18 void delay(unsigned char i)
19 {
20 1 while(i--);
21 1 }
22
23 void start() //SPI开始
24 {
25 1 DCLK=0;
26 1 CS=1;
27 1 DIN=1;
28 1 DCLK=1;
29 1 CS=0;
30 1 }
31 void WriteCharTo7843(unsigned char num) //SPI写数据
32 {
33 1 unsigned char count=0;
34 1 DCLK=0;
35 1 for(count=0;count<8;count++)
36 1 {
37 2 DCLK=0; _nop_();_nop_();_nop_(); //上升沿有效
38 2 num<<=1;
39 2 DIN=CY;
40 2 DCLK=1; _nop_();_nop_();_nop_();
41 2 }
42 1 }
43
44
45 unsigned int ReadFromCharFrom7843() //SPI 读数据
46 {
47 1 unsigned char count=0;
48 1 unsigned int Num=0;
49 1 for(count=0;count<12;count++)
50 1 {
51 2 Num<<=1;
52 2 DCLK=0; _nop_();_nop_();_nop_(); //下降沿有效
53 2 DCLK=1; _nop_();_nop_();_nop_();
54 2 if(DOUT) Num++;
55 2 }
C51 COMPILER V8.01 MAIN 10/10/2008 10:19:48 PAGE 2
56 1 return(Num);
57 1 }
58
59 void Isr_EX1() interrupt 2 using 1//外部中断0 用来接受键盘发来的数据
60 {
61 1 unsigned int X=0,Y=0;
62 1 delay(10000); //中断后延时以消除抖动,使得采样数据更准确
63 1 start(); //启动SPI
64 1 delay(2);
65 1 WriteCharTo7843(0x90); //送控制字 10010000 即用差分方式读X坐标 详细请见有关资料
66 1 // while(BUSY); //如果BUSY信号不好使可以删除不用
67 1 delay(2);
68 1 DCLK=1; _nop_();_nop_();_nop_();_nop_();
69 1 DCLK=0; _nop_();_nop_();_nop_();_nop_();
70 1 X=ReadFromCharFrom7843();
71 1 WriteCharTo7843(0xD0); //送控制字 11010000 即用差分方式读Y坐标 详细请见有关资料
72 1 // while(BUSY); //如果BUSY信号不好使可以删除不用
73 1 DCLK=1; _nop_();_nop_();_nop_();_nop_();
74 1 DCLK=0; _nop_();_nop_();_nop_();_nop_();
75 1 Y=ReadFromCharFrom7843();
76 1 CS=1;
77 1
78 1 SBUF = 0xaa;
79 1 while(!TI);
80 1 TI = 0 ;
81 1 /* if(X>=0x00a6 && X<=0x0140)
82 1 {
83 1 if(Y>=0x00ed && Y<=0x01a0)
84 1 {
85 1 SBUF = 3;
86 1 while(!TI);
87 1 TI = 0 ;
88 1 }
89 1 else if(Y>=0x02f0 && Y<=0x03d0)
90 1 {
91 1 SBUF = 2;
92 1 while(!TI);
93 1 TI = 0 ;
94 1 }
95 1 else if(Y>=0x04d0 && Y<=0x05d0)
96 1 {
97 1 SBUF = 1;
98 1 while(!TI);
99 1 TI = 0 ;
100 1 }
101 1
102 1 }
103 1 else if(X>=0x04c0 && X<=0x05f0)
104 1 {
105 1 if(Y>=0x0450 && Y<=0x04d0)
106 1 {
107 1 SBUF = 4;
108 1 while(!TI);
109 1 TI = 0 ;
110 1 }
111 1 else if(Y>=0x02b0 && Y<=0x03b0)
112 1 {
113 1 SBUF = 5;
114 1 while(!TI);
115 1 TI = 0 ;
116 1 }
117 1
C51 COMPILER V8.01 MAIN 10/10/2008 10:19:48 PAGE 3
118 1 } */
119 1 SBUF = (unsigned char)(X>>8);
120 1 while(!TI);
121 1 TI = 0 ;
122 1 SBUF = (unsigned char)X;
123 1 while(!TI);
124 1 TI = 0 ;
125 1
126 1 SBUF = (unsigned char)(Y>>8);
127 1 while(!TI);
128 1 TI = 0 ;
129 1 SBUF = (unsigned char)Y;
130 1 while(!TI);
131 1 TI = 0 ;
132 1 // IE1 = 0;
133 1 }
134 /*===================================
135 函数功能:初始化串行通讯
136 ====================================*/
137 void iniscon()
138 {
139 1 TMOD=0X20; // GATA C/T M1 M0 GATE C/T M1 M0
140 1 /* | | | |___________模式控制
141 1 | | |______________
142 1 | |__________________ 定时、计数方式选择位
143 1 |______________________ 门控位
144 1
145 1 |____________| |____________|
146 1 T1方式控制 T0方式控制
147 1
148 1 */
149 1 SCON=0X50; // SM0 SM1 SM2 REN TB8 RB8 TI RI
150 1 PCON|=0X80; // SMOD - - - GF1 GF0 PD IDL
151 1 TH1=TL1=0XFA; //9600bps@11.0592Mhz
152 1 TR1=1;
153 1 TI=0; // 清发送完成标志
154 1 RI=0; //清接收完成标志
155 1
156 1 IT1=1; //边沿触发
157 1 IE1=0; //
158 1 EX1=1; //外部中断允许
159 1
160 1 EA=1; //中断控制寄存器 IE: EA _ _ ES ET1 EX1 ET0 EX0
161 1 }
162
163
164 main()
165 {
166 1 iniscon();
167 1 SBUF = 0xa5;
168 1 while(!TI);
169 1 TI = 0 ;
170 1 while(1);
171 1 }
172
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 241 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
C51 COMPILER V8.01 MAIN 10/10/2008 10:19:48 PAGE 4
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -