📄 main.lst
字号:
C51 COMPILER V7.20 MAIN 04/03/2008 10:48:30 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 文件名: main.c
3
4 摘要:LCD测试程序
5 作者: turtle
6 完成日期: 2008.04.03
7
8 源版本:
9 **************************************************************************/
10
11 #include "inc\ConstDef.h" //硬件相关常数定义
12 #include "inc\main.h" //硬件相关常数定义
13 //X向中断模式测量命令字,0x90
14 #define CODE_INT_X 0x90
15 //Y向中断模式测量命令字
16 #define CODE_INT_Y 0xd0
17 uchar temp;
18 long Tx;
19 long Ty;
20 void main (void)
21 {
22 1 //通过多次读数据取平均来提高精
23 1 //=========系统初始化
24 1 WDTCN = 0xDE;
25 1 WDTCN = 0xAD; //关闭看门狗
26 1
27 1 SysClkInit(); //初始化系统时钟
28 1 PortInit(); //初始化GPIO和交叉开关
29 1 DelayL(10);
30 1 //=========外设与变量初始化
31 1
32 1 P7 = 0x00; //打开指示灯
33 1
34 1 LCD_Reset();
35 1 lcd_initial();
36 1 lcd_clear();
37 1 lcd_regwrite(0x00,0xcD);//打开屏
38 1 temp=lcd_regread(0x00);
39 1 SetXY(4,24);
40 1 lcd_datawrite(0xD1);
41 1 lcd_datawrite(0xEE);
42 1 DelayS(1);
43 1 SetXY(4,56);
44 1 lcd_datawrite(0xD1);
45 1 lcd_datawrite(0xEE);
46 1 DelayS(1);
47 1 SetXY(4,88);
48 1 lcd_datawrite(0xD1);
49 1 lcd_datawrite(0xEE);
50 1
51 1 /* lcd_regwrite(0x00,0xc5);
52 1 DelayS(1);
53 1 lcd_photo(tab2);
54 1 */
55 1 while(1)
C51 COMPILER V7.20 MAIN 04/03/2008 10:48:30 PAGE 2
56 1 {
57 2 if(INT2==0)
58 2 {
59 3 DelayS(200);
60 3 if(INT2==0)
61 3 {
62 4 XY_Position_change();//完成触摸屏坐标到lcd坐标的转换
63 4 MouseDown(Tx,Ty);//根据转换的坐标做相应的操作
64 4 while(INT2==0)
65 4 {
66 5 DelayS(100);
67 5 }
68 4 // MouseUp();//按键释放时候的操作
69 4 }
70 3 }
71 2 }
72 1 }
73
74
75
76
77
78
79 // ===============================================================
80 // 子函数
81 // ===============================================================
82 /*-------------------------------------------------------------------
83 * 功能: 长时间延时
84 * 调用: NULL
85 * 输入: NULL
86 * 返回: NULL
87 * 说明: 长时间延时,工作在11.0592M时,此函数近似延时28ms
88 -------------------------------------------------------------------*/
89 void DelayL(uchar Time)
90 {
91 1 uchar i,j,k;
92 1 while(Time--)
93 1 {
94 2 for(k=0; k<CLK_BASE; k++)
95 2 for(j=0; j<100; j++)
96 2 for(i=0; i<100; i++)
97 2 _nop_();
98 2 }
99 1 }
100
101 /*-------------------------------------------------------------------
102 * 功能: 短时间延时
103 * 调用: NULL
104 * 输入: NULL
105 * 返回: NULL
106 * 说明: 工作在11.0592M时,此函数近似延时0.11ms
107 -------------------------------------------------------------------*/
108 void DelayS(uchar Time)
109 {
110 1 uchar i;
111 1 while(Time--)
112 1 {
113 2 for(i=0; i<250; i++)
114 2 {_nop_(); _nop_(); _nop_(); _nop_(); _nop_();}
115 2 }
116 1 }
117
C51 COMPILER V7.20 MAIN 04/03/2008 10:48:30 PAGE 3
118 /*-------------------------------------------------------------------
119 * 功能: 系统时钟初始化
120 * 调用: NULL
121 * 输入: NULL
122 * 返回: NULL
123 * 说明: 切换至11.0592M外部晶振
124 -------------------------------------------------------------------*/
125 void SysClkInit (void)
126 {
127 1 int i;
128 1 OSCXCN = 0x67; // 使用22MHz的外部晶振
129 1 for(i=0; i<3000; i++); // 延时,等待外部晶振起振
130 1 while(!(OSCXCN&0x80)); // 等待外部晶振起振完成
131 1 OSCICN = 0x08; // 启用外部晶振,启用时钟丢失检测器
132 1 }
133
134 /*-------------------------------------------------------------------
135 * 功能: C8051端口初始化
136 * 调用: NULL
137 * 输入: NULL
138 * 返回: NULL
139 * 说明: 配置各端口输入输出状态。如非必要,关闭不相关端口的弱上拉
140 -------------------------------------------------------------------*/
141 void PortInit (void)
142 {
143 1 XBR0 = 0x07; //允许SMBus、UART0、SPI0
144 1 XBR2 = 0x46; //允许交叉开关和弱上拉,允许UART1
145 1
146 1 P0MDOUT = 0x1D; // Output configuration for P0
147 1 P1MDOUT = 0xF9; // Output configuration for P1
148 1 P2MDOUT = 0x0D; // Output configuration for P2
149 1 P3MDOUT = 0xFF; // Output configuration for P3
150 1 P74OUT = 0xF3; // Output configuration for P4-7
151 1
152 1 P1MDIN = 0xFF; // Input configuration for P1
153 1 }
154 /*-------------------------------------------------------------------
155 * 功能: 液晶屏的相关程序
156 * 调用: NULL
157 * 输入: NULL
158 * 返回: NULL
159 * 说明: 对LCD的寄存器和DDRAM
160 -------------------------------------------------------------------*/
161 void lcd_regwr(uchar regnada)
162 {
163 1 LCD_DB = regnada;
164 1 LCD_COMMAND &=LCD_CS1_ENABLE; // chip enable.
165 1 LCD_COMMAND |=LCD_CS2_ENABLE;
166 1 LCD_COMMAND |=LCD_RD_DISABLE;
167 1 LCD_COMMAND &=LCD_RS_REG;
168 1 LCD_COMMAND &=LCD_WR_ENABLE;
169 1 ;
170 1 LCD_COMMAND |=LCD_WR_DISABLE;
171 1 LCD_COMMAND |=LCD_RS_DDRAM;
172 1 LCD_COMMAND |=LCD_CS1_DISABLE;
173 1
174 1 }
175 //.............................................
176 void lcd_datawrite(uchar wrdata)
177 { //写资料到DDRAM
178 1 //while(LCD_BUSY == 1);
179 1 LCD_DB = wrdata;
C51 COMPILER V7.20 MAIN 04/03/2008 10:48:30 PAGE 4
180 1 LCD_COMMAND &=LCD_CS1_ENABLE; // chip enable.
181 1 LCD_COMMAND |=LCD_CS2_ENABLE;
182 1 LCD_COMMAND |=LCD_RD_DISABLE;
183 1 LCD_COMMAND |=LCD_RS_DDRAM;
184 1 LCD_COMMAND &=LCD_WR_ENABLE;
185 1 ;
186 1 LCD_COMMAND |=LCD_WR_DISABLE;
187 1 LCD_COMMAND |=LCD_RS_REG;
188 1 LCD_COMMAND |=LCD_CS1_DISABLE;
189 1 }
190
191 uchar lcd_regread(uchar regname)
192 { //读缓存器
193 1 uchar reg_rddata;
194 1 lcd_regwr(regname);
195 1 LCD_DB= 0xff;
196 1 P74OUT = 0x03; // Output configuration for P4-7
197 1 DelayS(10);
198 1 LCD_COMMAND &=LCD_CS1_ENABLE; // chip enable.
199 1 LCD_COMMAND |=LCD_CS2_ENABLE;
200 1 LCD_COMMAND |=LCD_WR_DISABLE;
201 1 LCD_COMMAND &=LCD_RS_REG;
202 1 LCD_COMMAND &=LCD_RD_ENABLE;
203 1 ;
204 1 reg_rddata=LCD_DB;
205 1 LCD_COMMAND |=LCD_RD_DISABLE;
206 1 LCD_COMMAND |=LCD_RS_DDRAM;
207 1 LCD_COMMAND |=LCD_CS1_DISABLE;
208 1 ;
209 1 P74OUT = 0xF3;
210 1 DelayS(10);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -