📄 lcddrive.lst
字号:
ARM COMPILER V2.32a, LCDDRIVE 25/01/07 14:11:01 PAGE 1
ARM COMPILER V2.32a, COMPILATION OF MODULE LCDDRIVE
OBJECT MODULE PLACED IN LCDDRIVE.OBJ
COMPILER INVOKED BY: d:\Keil\ARM\BIN\CA.exe LCDDRIVE.C THUMB BROWSE DEBUG TABS(4)
stmt level source
1
2 /****************************************************************************************
3 * 文件名:LCDDRIVE.C
4 * 功能:图形液晶128*64驱动(型号为MGL(S)-12864T)。62K显示存,0000H-7FFFH地址。显示是横向字节,高位
5 * 在前。
6 * 说明:图形液晶采用T6963C为LCD控制芯片,内带负压产生器,单5伏供电,并行接口(使用LPC2132驱动)。
7
8
9 次页面内的函数只是命令,具体的控制信号需要在主程序调用这些函数前进行定义即使能
10 /****************************************************************************************/
11 #include <includes.h>
12 #include <LPC21xx.H>
13 #include <stdio.h>
14 /***********************************/
15
16 #define GUI_LCM_XMAX 128 /* 定义液晶x轴的点数 */
17 #define GUI_LCM_YMAX 64 /* 定义液晶y轴的点数 */
18
19 #define LCD_CD 0x08000000
20 #define LCD_WR 0x08000000
21 #define LCD_RD 0x10000000
22 #define LCD_CE 0x20000000
23 #define LCD_RST 0x01000000
24 #define LCD_DIR 0x00400000
25 #define BEEPCON 0x80000000
26 #define LCD_BL 0x00800000
27 #define TCOLOR uint8
28 extern uint8 gui_disp_buf[GUI_LCM_YMAX][GUI_LCM_XMAX/8]; // 声明显示缓冲区
29
30
31 uint8 shuzi_0[12]={0x00,0x00,0x1C,0x22,0x22,0x22,0x22,0x22,0x22,0x1C,0x00,0x00,}; // 文字: 0
32 uint8 shuzi_1[12]={0x00,0x00,0x08,0x18,0x08,0x08,0x08,0x08,0x08,0x1C,0x00,0x00,} ; // 文字: 1
33 uint8 shuzi_2[12]={0x00,0x00,0x1C,0x22,0x22,0x04,0x08,0x10,0x20,0x3E,0x00,0x00,} ; // 文字: 2
34 uint8 shuzi_3[12]={0x00,0x00,0x1C,0x22,0x02,0x0C,0x02,0x02,0x22,0x1C,0x00,0x00,}; // 文字: 3
35 uint8 shuzi_4[12]={0x00,0x00,0x04,0x0C,0x14,0x14,0x24,0x3E,0x04,0x0E,0x00,0x00,}; // 文字: 4
36 uint8 shuzi_5[12]={0x00,0x00,0x3E,0x20,0x20,0x3C,0x02,0x02,0x22,0x1C,0x00,0x00, }; // 文字: 5
37 uint8 shuzi_6[12]={0x00,0x00,0x1C,0x22,0x20,0x3C,0x22,0x22,0x22,0x1C,0x00,0x00,}; // 文字: 6
38 uint8 shuzi_7[12]={0x00,0x00,0x3E,0x24,0x04,0x08,0x08,0x08,0x08,0x08,0x00,0x00,}; // 文字: 7
39 uint8 shuzi_8[12]={0x00,0x00,0x1C,0x22,0x22,0x1C,0x22,0x22,0x22,0x1C,0x00,0x00, }; // 文字: 8
40 uint8 shuzi_9[12]={0x00,0x00,0x1C,0x22,0x22,0x22,0x1E,0x02,0x22,0x1C,0x00,0x00,}; // 文字: 9
41 uint8 shuzi_kg[12]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, }; // 空格
42 /* 数字 */
43 uint8 data1[180]={
44 0x00,0x00,0x1C,0x22,0x22,0x22,0x22,0x22,0x22,0x1C,0x00,0x00, // 文字: 0
45 0x00,0x00,0x08,0x18,0x08,0x08,0x08,0x08,0x08,0x1C,0x00,0x00, // 文字: 1
46 0x00,0x00,0x1C,0x22,0x22,0x04,0x08,0x10,0x20,0x3E,0x00,0x00, // 文字: 2
47 0x00,0x00,0x1C,0x22,0x02,0x0C,0x02,0x02,0x22,0x1C,0x00,0x00, // 文字: 3
48 0x00,0x00,0x04,0x0C,0x14,0x14,0x24,0x3E,0x04,0x0E,0x00,0x00, // 文字: 4
49 0x00,0x00,0x3E,0x20,0x20,0x3C,0x02,0x02,0x22,0x1C,0x00,0x00, // 文字: 5
50 0x00,0x00,0x1C,0x22,0x20,0x3C,0x22,0x22,0x22,0x1C,0x00,0x00, // 文字: 6
51 0x00,0x00,0x3E,0x24,0x04,0x08,0x08,0x08,0x08,0x08,0x00,0x00, // 文字: 7
52 0x00,0x00,0x1C,0x22,0x22,0x1C,0x22,0x22,0x22,0x1C,0x00,0x00, // 文字: 8
53 0x00,0x00,0x1C,0x22,0x22,0x22,0x1E,0x02,0x22,0x1C,0x00,0x00, // 文字: 9
54 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00, // 文字: .
55 0x00,0x00,0x1C,0x22,0x22,0x04,0x08,0x08,0x00,0x08,0x00,0x00, // 文字: ?
56 0x04,0x0C,0x1C,0x3C,0x7C,0xFC,0xFC,0x7C,0x3C,0x1C,0x0C,0x04, // 左箭头
57 0x20,0x30,0x38,0x3C,0x3E,0x3F,0x3F,0x3E,0x3C,0x38,0x30,0x20, // 右箭头
58 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 空格
59 } ;
ARM COMPILER V2.32a, LCDDRIVE 25/01/07 14:11:01 PAGE 2
60 uint8 Matrixxie[17]=
61 {
62 /*------------------------------------------------------------------------------
63 ; 源文件 / 文字: /
64 ; 宽×高(像素) : 18×7
65 ------------------------------------------------------------------------------*/
66 0x00,0x00,0x02,0x04,0x04,0x04,0x08,
67 0x08,0x10,0x10,0x20,0x20,0x40,0x40,0x40,
68 0x80,0x00
69 };
70 uint8 MatrixMaohao[12]=
71 {
72 /*------------------------------------------------------------------------------
73 ; 源文件 / 文字: :
74 ; 宽×高(像素) : 18×7
75 ------------------------------------------------------------------------------*/
76 0x00,0x00,
77 0x00,0x10,0x10,0x00,0x00,0x10,0x10,0x00,
78 0x00,0x00
79 };
80
81 /************************************************
82 * 名称:DelayNS()
83 * 功能:长软件延时
84 * 入口参数:dly 延时参数,值越大,延时越长
85 * 出口参数:无
86 ***************************************************/
87 void DelayNs(uint32 dly)
88 { uint32 i;
89 1 for(;dly>0;dly--)
90 1 for(i=0;i<250;i++);
91 1 }
92 /* *************硬件连接:D0--D7 <===> P1.16--P1.23 PINSEL2 =0x0008H P1:25:16 用作GPIO 管脚。
93
94 * /WR <===> P0.27
95 * /RD <===> P0.28
96 * /CE <===> P0.29
97 * /RST <===> P1.24
98 * C/D <===> P1.27/TDO 跳线
99
100
101 /***********************************************************************
102 * 名称:LCD_WriteCommand()
103 * 功能:写命令子程序。(发送命令前,不检查液晶模块的状态)
104 * 入口参数:command 要写入LCM的命令字
105 * 出口参数:无
106 * 说明:函数会设置LCM数据总线为输出方式
107 ***********************************************************************/
108 extern void LCD_WriteCommand(uint8 lcdcommand)
109 {
110 1 uint32 lcdcommand32;
111 1 uint8 lcdcommand8;
112 1 IODIR1=IODIR1|0x00FF0000; /*P1.16--p1.23作为GPIO输出口*/
113 1
114 1 IOSET0|=LCD_DIR; //74HC245 DIR 为高时数据从左到右
115 1 DelayNs(1);
116 1 IOSET1|=LCD_CD; // 指令通道使能=1
117 1 DelayNs(1);
118 1 IOCLR0|=LCD_CE; // 片选使能
119 1 DelayNs(1);
120 1 IOCLR0|=LCD_WR; // LCD写使能
121 1 DelayNs(1);
122 1
123 1 lcdcommand8=lcdcommand;
124 1
125 1 lcdcommand32 = lcdcommand8 << 16; /*数据向左移16位*/
ARM COMPILER V2.32a, LCDDRIVE 25/01/07 14:11:01 PAGE 3
126 1 IOPIN1=(IOPIN1&0xFF00FFFF)|lcdcommand32;
127 1 //IOCLR0|=LCD_WR;
128 1 // LCD写使能
129 1 DelayNs(1);//需要延时
130 1
131 1 IOSET0|=LCD_WR; // LCD写使能停止
132 1 IOSET0|=LCD_CE; // LCD片选停止
133 1 DelayNs(1);
134 1 IOSET1|=LCD_CD; // 写数据使能 终止
135 1 DelayNs(1);
136 1 }
137
138 /***********************************************************************
139 * 名称:LCD_WriteData()
140 * 功能:写数据子程序。(发送数据前,不检查液晶模块的状态)
141 * 入口参数:dat 要写入LCM的数据
142 * 出口参数:无
143 * 说明:函数会设置LCM数据总线为输出方式
144 ***********************************************************************/
145 extern void LCD_WriteData(uint8 lcddat)
146 { uint32 lcddat32;
147 1 lcddat32=lcddat;
148 1
149 1 IODIR1=IODIR1|0x00FF0000; /*P1.16--p1.23作为GPIO输出口*/
150 1
151 1 IOSET0|=LCD_DIR; //74HC245 DIR 为高时数据从左到右
152 1 DelayNs(1);
153 1 IOCLR1|=LCD_CD; //数据通道使能 =0
154 1 DelayNs(1);
155 1 IOCLR0|=LCD_CE;
156 1 DelayNs(1);
157 1 IOCLR0|=LCD_WR; // LCD写使能
158 1 DelayNs(1);
159 1
160 1
161 1 lcddat32=lcddat;
162 1 lcddat32 <<= 16; /*数据向左移16位*/
163 1 IOPIN1=(IOPIN1&0xFF00FFFF)|lcddat32;
164 1
165 1 DelayNs(1); //需要延时
166 1
167 1 IOSET0|=LCD_WR; // LCD写使能停止
168 1 IOSET0|=LCD_CE; //LCD片选停止
169 1 DelayNs(1);
170 1 IOSET1|=LCD_CD; //写数据使能 终止
171 1 DelayNs(1);
172 1 }
173
174
175
176 /***********************************************************************
177 * 名称:LCD_ReadState()
178 * 功能:读取状态字子程序。
179 * 入口参数:无
180 * 出口参数:返回值即为读出的状态字
181 * 说明:函数会设置LCM数据总线为输入方式
182 ***********************************************************************/
183 uint8 LCD_ReadState()
184 { uint32 LCDinSTATE;
185 1 uint8 LCDinSTATE8;
186 1
187 1 IOCLR0|=LCD_DIR; //74HC245 DIR 为低时数据从右到左
188 1 DelayNs(1);
189 1 IODIR1=IODIR1&0xFF00FFFF; /*P1.16--p1.23作为GPIO输入口*/
190 1 DelayNs(1);
191 1 IOSET1|=LCD_CD; //数据通道使能 =0
ARM COMPILER V2.32a, LCDDRIVE 25/01/07 14:11:01 PAGE 4
192 1 DelayNs(1);
193 1 IOCLR0|=LCD_CE; //片选LCD
194 1 DelayNs(1);
195 1 IOCLR0|=LCD_RD; //读使能
196 1
197 1
198 1 LCDinSTATE=IOPIN1;
199 1 LCDinSTATE>>=16;
200 1 LCDinSTATE8=LCDinSTATE;
201 1 DelayNs(1);
202 1
203 1 IOSET0|=LCD_RD; //读使能关闭
204 1 DelayNs(1);
205 1 IOSET0|=LCD_CE; //片选LCD 结束
206 1 DelayNs(1);
207 1 IODIR1=IODIR1|0xFFFF0000; // 重新定义P1.16--P1.23为输出
208 1
209 1 IOSET0|=LCD_DIR; //74HC245 DIR 为高时数据从左到右
210 1 DelayNs(1);
211 1 return LCDinSTATE8;
212 1 }
213
214 /***********************************************************************
215 * 名称:LCD_ReadData()
216 * 功能:读取数据子程序。
217 * 入口参数:无
218 * 出口参数:返回值即为读出的数据
219 * 说明:函数会设置LCM数据总线为输入方式
220 ***********************************************************************/
221 extern uint8 LCD_ReadData()
222 {uint32 LCDinData;
223 1 uint8 LCDinData8;
224 1
225 1 IOCLR0|=LCD_DIR; //74HC245 DIR 为低时数据从右到左
226 1 DelayNs(1);
227 1 IODIR1=IODIR1&0xFF00FFFF; /*P1.16--p1.23作为GPIO输入口*/
228 1
229 1 DelayNs(1);
230 1 IOSET1|=LCD_CD; //数据通道使能 =0
231 1 DelayNs(1);
232 1 IOCLR0|=LCD_CE; //片选LCD
233 1 DelayNs(1);
234 1 IOCLR0|=LCD_RD; //读使能
235 1
236 1
237 1 LCDinData=IOPIN1;
238 1 LCDinData>>=16;
239 1 LCDinData8=LCDinData;
240 1 DelayNs(1);
241 1
242 1 IOSET0|=LCD_RD; //读使能关闭
243 1 DelayNs(1);
244 1 IOSET0|=LCD_CE; //片选LCD 结束
245 1 DelayNs(1);
246 1 IODIR1=IODIR1|0xFFFF0000; // 重新定义P1.16--P1.23为输出
247 1 DelayNs(1);
248 1 IOSET0|=LCD_DIR; //74HC245 DIR 为高时数据从左到右
249 1 DelayNs(1);
250 1 return LCDinData8;
251 1 }
252
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -