📄 main.lst
字号:
C51 COMPILER V7.20 MAIN 04/03/2008 10:40:57 PAGE 1
C51 COMPILER V7.20, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: D:\setup\keil\C51\BIN\C51.EXE main.c LARGE DEBUG OBJECTEXTEND
line level source
1 /************************** ************************************************
2 Copyright (c) HUST ESRI 1999-2007. All Rights Reserved.
3 文件名: main.c
4
5 摘要:LCD测试程序(RTX51 FULL)
6 作者: turtle
7 完成日期: 2008.03.28
8
9 源版本:
10 **************************************************************************/
11
12 #include "inc\ConstDef.h" //硬件相关常数定义
13 #include "inc\main.h" //硬件相关常数定义
14 //X向中断模式测量命令字,0x90
15 #define CODE_INT_X 0x90
16 //Y向中断模式测量命令字
17 #define CODE_INT_Y 0xd0
18 uchar temp;
19 long Tx;
20 long Ty;
21 void main (void)
22 {
23 1 long tempx,tempy;//注意类型和Tx,Ty保持一致
24 1 int i,r,x[6],y[6],xmin,xmax,ymin,ymax;
25 1 int SETX=0,SETY=0,X_temp[2],Y_temp[2];
26 1 //通过多次读数据取平均来提高精
27 1 //=========系统初始化
28 1 WDTCN = 0xDE;
29 1 WDTCN = 0xAD; //关闭看门狗
30 1
31 1 SysClkInit(); //初始化系统时钟
32 1 PortInit(); //初始化GPIO和交叉开关
33 1 DelayL(10);
34 1 //=========外设与变量初始化
35 1
36 1 P7 = 0x00; //打开指示灯
37 1
38 1 LCD_Reset();
39 1 lcd_initial();
40 1 lcd_clear();
41 1 lcd_regwrite(0x00,0xcD);//打开屏
42 1 temp=lcd_regread(0x00);
43 1 SetXY(4,24);
44 1 lcd_datawrite(0xD1);
45 1 lcd_datawrite(0xEE);
46 1 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
47 1 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
48 1 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
49 1 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
50 1 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
51 1 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
52 1 SetXY(8,24);
53 1 lcd_datawrite(0xD1);
54 1 lcd_datawrite(0xEE);
55 1
C51 COMPILER V7.20 MAIN 04/03/2008 10:40:57 PAGE 2
56 1
57 1
58 1 /* lcd_regwrite(0x00,0xc5);
59 1 DelayS(1);
60 1 lcd_photo(tab2);
61 1 */
62 1 while(1)
63 1 {
64 2 if(INT2==0)
65 2 {
66 3 DelayS(200);
67 3 DelayS(200);
68 3 if(INT2==0)
69 3 {
70 4 while(INT2==0);
71 4 CS=0;
72 4 for(i=0;i<2;i++)
73 4 {
74 5 for(r=0;r<6;r++)//X,Y的坐标读取六次
75 5 {
76 6 WriteCharTo7843(CODE_INT_X);
77 6 //Step2. Receive X-dir locating information
78 6 x[r] = ReadFromCharFrom7843();
79 6 //Step3. Send out Y-dir locating command
80 6 WriteCharTo7843(CODE_INT_Y);
81 6 //Step4. Receive Y-dir locating information
82 6 y[r] = ReadFromCharFrom7843();//读Y轴坐标
83 6 }
84 5 xmin=x[0];xmax=x[0];ymin=y[0];ymax=y[0];
85 5 for(r=1;r<6;r++)
86 5 {
87 6 if(x[r]<xmin)
88 6 xmin=x[r];
89 6 if(x[r]>xmax)
90 6 xmax=x[r];
91 6 if(y[r]<ymin)
92 6 ymin=y[r];
93 6 if(y[r]>ymax)
94 6 ymax=y[r];
95 6 }
96 5 //坐标中去掉最大的和最小的
97 5 X_temp[i]=(x[0]+x[1]+x[2]+x[3]+x[4]+x[5]-xmin-xmax)/4;
98 5 Y_temp[i]=(y[0]+y[1]+y[2]+y[3]+y[4]+y[5]-ymin-ymax)/4;
99 5
100 5 }
101 4 //将处理后的触摸屏坐标取平均,得到较准确的触摸屏坐标X,Y
102 4 SETX=(X_temp[0]+X_temp[1])/2;
103 4 SETY=(Y_temp[0]+Y_temp[1])/2;
104 4
105 4 // tempx=TS_X-385;//这里TS_X,TS_Y是获取的触摸屏坐标
106 4 tempx=SETX-375;//这里X,Y是经过处理的触摸屏的坐标
107 4 if(tempx<0)
108 4 tempx=0;
109 4 else
110 4 Tx=(tempx*320)/(1800-375);
111 4 tempy=SETY-500;
112 4 if(tempy<0)
113 4 tempy=0;
114 4 else
115 4 Ty=tempy*240/(1800-590);
116 4 }
117 3 SETX=0;
C51 COMPILER V7.20 MAIN 04/03/2008 10:40:57 PAGE 3
118 3 }
119 2
120 2 }
121 1 }
122
123
124
125
126
127
128 // ===============================================================
129 // 子函数
130 // ===============================================================
131 /*-------------------------------------------------------------------
132 * 功能: 长时间延时
133 * 调用: NULL
134 * 输入: NULL
135 * 返回: NULL
136 * 说明: 长时间延时,工作在11.0592M时,此函数近似延时28ms
137 -------------------------------------------------------------------*/
138 void DelayL(uchar Time)
139 {
140 1 uchar i,j,k;
141 1 while(Time--)
142 1 {
143 2 for(k=0; k<CLK_BASE; k++)
144 2 for(j=0; j<100; j++)
145 2 for(i=0; i<100; i++)
146 2 _nop_();
147 2 }
148 1 }
149
150 /*-------------------------------------------------------------------
151 * 功能: 短时间延时
152 * 调用: NULL
153 * 输入: NULL
154 * 返回: NULL
155 * 说明: 工作在11.0592M时,此函数近似延时0.11ms
156 -------------------------------------------------------------------*/
157 void DelayS(uchar Time)
158 {
159 1 uchar i;
160 1 while(Time--)
161 1 {
162 2 for(i=0; i<250; i++)
163 2 {_nop_(); _nop_(); _nop_(); _nop_(); _nop_();}
164 2 }
165 1 }
166
167 /*-------------------------------------------------------------------
168 * 功能: 系统时钟初始化
169 * 调用: NULL
170 * 输入: NULL
171 * 返回: NULL
172 * 说明: 切换至11.0592M外部晶振
173 -------------------------------------------------------------------*/
174 void SysClkInit (void)
175 {
176 1 int i;
177 1 OSCXCN = 0x67; // 使用22MHz的外部晶振
178 1 for(i=0; i<3000; i++); // 延时,等待外部晶振起振
179 1 while(!(OSCXCN&0x80)); // 等待外部晶振起振完成
C51 COMPILER V7.20 MAIN 04/03/2008 10:40:57 PAGE 4
180 1 OSCICN = 0x08; // 启用外部晶振,启用时钟丢失检测器
181 1 }
182
183 /*-------------------------------------------------------------------
184 * 功能: C8051端口初始化
185 * 调用: NULL
186 * 输入: NULL
187 * 返回: NULL
188 * 说明: 配置各端口输入输出状态。如非必要,关闭不相关端口的弱上拉
189 -------------------------------------------------------------------*/
190 void PortInit (void)
191 {
192 1 XBR0 = 0x07; //允许SMBus、UART0、SPI0
193 1 XBR2 = 0x46; //允许交叉开关和弱上拉,允许UART1
194 1
195 1 P0MDOUT = 0x1D; // Output configuration for P0
196 1 P1MDOUT = 0xF9; // Output configuration for P1
197 1 P2MDOUT = 0x0D; // Output configuration for P2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -