📄 lcdinit.lst
字号:
183 1 write_cmd2(txtstpd1,txtstpd2,TXT_STP); /*文本区首地址*/
184 1 write_cmd2(txtwid,0x00,TXT_WID); /*文本区宽度*/
185 1 write_cmd2(grhstpd1,grhstpd2,GRH_STP); /*图形区首地址*/
186 1 write_cmd2(grhwid,0x00,GRH_WID); /*图形区宽度*/
187 1 write_cmd2(0x03,0x00,CGR_POS); /*CGRAM首地址*/
188 1 write_cmd0(CUR_SHP | cur); /*光标形状*/
189 1 write_cmd0(mod); /*显示方式*/
190 1 write_cmd0(DIS_SW | sw); /*显示开关*/
191 1 }
192
193 /*清屏 320 = (160/8) * (128/8) = 20 * 16 = 320*/
194 void cls(void){
195 1 int i;
196 1 set_Char_xy(0,0);
197 1 for(i = 0; i < 320; i++)
198 1 write_one(0x00,INC_WR);
199 1 }
200
201 /*将自定义汉字码填充到CGROM */
202 void wirte_cgrom(void){
203 1 int i,j;
204 1 write_cmd2(0x03,0x00,CGR_POS); /*CGRAM首地址*/
205 1 set_adr(0x00,0x1c); // CGRAM offset addr is 00001 , the lower 5 bits of 0x01,which is defined in sente
-nce: write_cmd2(0x01,0x00,CGR_POS);
206 1 //then the user-defined CGRAM's first address is :
207 1 // 0000 0000 0000 0000
208 1 // +0000 1 // the CGRAM offset addr (00001)
209 1 // + 100 0000 0 // user-defined code begin from addr 0x80;
210 1 // + 000
211 1 // = 0000 1100 0000 0000 // the result is just 0x0c00 in: set_adr(0x00,0x0c);
212 1 /*自定义字符写入CGROM*/
213 1 for(i = 0; i < HanZhi_Totals; i++) // 一个汉字占用32个字节
214 1 for(j=0;j<32;j++)
215 1 write_one(GB_16[i].Msk[j],INC_WR);
216 1 }
217
218 char find_chinese(uchar *hz) //在自定义汉字库在查找所要显示的汉字的位置
219 {
220 1 uchar i=0;
221 1 while(GB_16[i].Index[0]<0x80)
222 1 {
223 2 if(*hz==GB_16[i].Index[0])
224 2 if(*(hz+1)==GB_16[i].Index[1])
225 2 return i;
226 2 i++;
227 2 if(i>20)break; // 20 totals
228 2 }
229 1 return -1; // Error !
230 1 }
231
232 //**************************************************************************
233 //= 函数原型: void Point(uchar x,uchar y, bit Mode)
234 //= 功 能: 在指定坐标位置显示一个点
235 //= 参 数: 坐标,显示点或清除点
C51 COMPILER V8.05a LCDINIT 11/09/2008 23:18:20 PAGE 5
236 //= 返 回 值:
237 //= 函数性质:私有函数
238 //= Mode 1:显示 0:清除该点
239 //**************************************************************************
240 void Point(uchar x,uchar y, bit Mode)
241 {
242 1 uint Address;
243 1 uchar dat;
244 1 Address=(uint)y*LCD_CHAR + (x>>3) + GraphHome; //地址转化
245 1 dat=BIT_OP+7-x%8; //产生位操作命令画点的数据
246 1 if(Mode) dat=dat|0x08;
247 1 set_adr(Address&0xff,Address/0xff);
248 1 write_cmd0(dat); // 利用位操作命令画点
249 1 }
250
251 void Char_Wr(uchar x,uchar y, uchar ch,bit Invert)
252 {
253 1 uchar temp;
254 1 temp = y * LCD_CHAR + x + CharHome; // x moves one pixel when add one ;
255 1 // up-left corner is (0,0) , horizontal is x, vertical is y.
256 1 // y moves eight pixel(one char) when add one.
257 1 set_adr(temp&0xff,temp/0xff);
258 1 if(ch<0x80) // Ascii character.
259 1 write_one(ch-0x20,INC_WR); // ASCII :0x30->'0', T6963 internal code :0x10->'0',so 0x30-0x10=0x20;
260 1 else
261 1 write_one(ch,INC_WR);
262 1 }
*** WARNING C280 IN LINE 251 OF LCDINIT.C: 'Invert': unreferenced local variable
263
264 //******************************************************************************
265 //= 函数原型: void hanzhi(uchar x,uchar y, uchar m,uchar n)
266 //= 功 能: 连续写入一个或多个汉字
267 //= 参 数: 坐标,要显示的第一个汉字的位置,连续显示汉字的个数。
268 //= 返 回 值:
269 //= 函数性质:私有函数
270 //当n=1一次性写入一个字符,否则一次性写入多个字符
271 //*****************************************************************************
272
273 void hanzhi(uchar x,uchar y, uchar m, bit Invert)
274 {
275 1 uchar CGRam;
276 1 CGRam=0x80+4*m; //第m个字符
277 1 // find the corresponding address in CGROM. Because 0x00~0x7F is the address of T6963's internal Asc
-ii code.
278 1 // so user-defined code is begin from 0x80,
279 1 Char_Wr(x,y,CGRam,1);
280 1 Char_Wr(x,y+1,CGRam+1,1);
281 1 Char_Wr(x+1,y,CGRam+2,1);
282 1 Char_Wr(x+1,y+1,CGRam+3,1);
283 1 }
*** WARNING C280 IN LINE 273 OF LCDINIT.C: 'Invert': unreferenced local variable
284
285
286 //*****************************************************************************
287 //= 函数原型: void char_wr(uchar x,uchar y, uchar *p,uchar dataa,uchar n)
288 //= 功 能: 连续写入一个或多个字符
289 //= 参 数: 坐标,要显示的字符数组,显示的单个字符,要显示的字符个数
290 //= 返 回 值:
291 //= 函数性质:私有函数
292 //当n=0一次性写入一个字符,否则一次性写入多个字符
293 //*****************************************************************************
294 void Str_Write(uchar x,uchar y, uchar *str,bit Invert)
C51 COMPILER V8.05a LCDINIT 11/09/2008 23:18:20 PAGE 6
295 {
296 1 uchar hz[2],index;
297 1 uchar *p=str;
298 1 uchar xx,yy;
299 1 xx=x;yy=y;
300 1 while(*p!='\0')
301 1 {
302 2 if(*p>=0x80) //汉字
303 2 {
304 3 hz[0]=*p;
305 3 hz[1]=*(p+1);
306 3 index=find_chinese(hz); // fine the index
307 3 hanzhi(x,y,index,1);
308 3 p=p+2; // 占用两个字节 ,每个字节代表半个汉字的编码索引 。
309 3 x+=2;
310 3 if(x==20)
311 3 {
312 4 x=0; //写满一行,从第二行开始
313 4 y+=2;
314 4 }
315 3 }
316 2 else //英文或数字等的ascII码
317 2 {
318 3 Char_Wr(x,y,*p,1);
319 3 p+=1;
320 3 x++;
321 3 if(x==20)
322 3 {
323 4 x=0; //写满一行,从第二行开始
324 4 y+=1;
325 4 }
326 3 }
327 2 }
328 1 }
*** WARNING C280 IN LINE 294 OF LCDINIT.C: 'Invert': unreferenced local variable
329
330 //******************************************************************************
331 //= 函数原型: void Show_num(uchar x1,uchar y1,uchar num)
332 //= 功 能: 在设定的位置显示一个数字
333 //= 参 数: (x1,y1)为位置,num为数字
334 //= 返 回 值:
335 //= 函数性质:公有函数
336 //= 注 意:以字节为单位
337 //*****************************************************************************
338 void Show_num(uchar x1,uchar y1,uchar num)
339 {
340 1 uchar number[10]={0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19};
341 1 set_Char_xy(x1,y1);
342 1 write_cmd1(number[num],INC_WR); //一次写入数据
343 1 }
344
345
346 void Init_LCD()
347 {
348 1 lcd_init(0x00,0x00,0x14,0x50,0x01,0x14,0x00,MOD_XOR,0x0f); ///(0x00,0x00,0x14,0x50,0x01,0x14,0x00,MOD_XOR
-,0x0c)
349 1 cls();
350 1 wirte_cgrom();
351 1 cls();
352 1
353 1 Str_Write(2,4,"广 东 工 业 大 学",1);
354 1 Str_Write(2,6," 嵌入式实验平台 ",1);
C51 COMPILER V8.05a LCDINIT 11/09/2008 23:18:20 PAGE 7
355 1 Str_Write(2,8," ",1);
356 1 Str_Write(2,9," 王日明 ",1);
357 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1021 ----
CONSTANT SIZE = 5514 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 5 38
IDATA SIZE = ---- ----
BIT SIZE = ---- 4
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 3 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -