📄 lcd12864.lst
字号:
C51 COMPILER V7.50 LCD12864 10/31/2007 12:04:35 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE LCD12864
OBJECT MODULE PLACED IN lcd12864.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE lcd12864.c LARGE BROWSE DEBUG OBJECTEXTEND
line level source
1 #include "LCD12864.h"
2
3 void LCDStatusLeft(void) //判断左边屏幕的状态
4 {
5 1 while((LCD1_RS&0x80)|(LCD1_RS&0x10));//等待LCD完成复位并且空闲
6 1 }
7
8
9 void LCDStatusRight(void) //判断右边屏幕的状态
10 {
11 1 while((LCD2_RS&0x80)|(LCD2_RS&0x10));//等待LCD完成复位并且空闲
12 1 }
13
14
15 void LCD12864WriteCmdLeft(unsigned char cmd)
16 {
17 1 LCDStatusLeft();
18 1 LCD1_ORG=cmd;
19 1 }
20 void LCD12864WriteCmdRight(unsigned char cmd)
21 {
22 1 LCDStatusRight();
23 1 LCD2_ORG=cmd;
24 1 }
25
26 void LCD12864WriteDataLeft(unsigned char lcddata)
27 {
28 1 LCDStatusLeft();
29 1 LCD1_WD=lcddata;
30 1 }
31 void LCD12864WriteDataRight(unsigned char lcddata)
32 {
33 1 LCDStatusRight();
34 1 LCD2_WD=lcddata;
35 1 }
36
37 void LCD12864Init(void) //LCD初始化
38 {
39 1 /*
40 1 delay(100);
41 1 CS2=1; CS1=0;
42 1 delay(100);
43 1 write_cmd(DISP_OFF);
44 1 write_cmd(PAGE);
45 1 write_cmd(START_LINE);
46 1 write_cmd(COL);
47 1 write_cmd(DISP_ON);
48 1 CS2=0; CS1=1;
49 1 delay(100);
50 1 write_cmd(DISP_OFF);
51 1 write_cmd(PAGE);
52 1 write_cmd(START_LINE);
53 1 write_cmd(COL);
54 1 write_cmd(DISP_ON);*/
55 1 //左半屏幕
C51 COMPILER V7.50 LCD12864 10/31/2007 12:04:35 PAGE 2
56 1 LCD12864WriteCmdLeft(DISP_OFF);
57 1 LCD12864WriteCmdLeft(PAGE);
58 1 LCD12864WriteCmdLeft(START_LINE);
59 1 LCD12864WriteCmdLeft(COL);
60 1 LCD12864WriteCmdLeft(DISP_ON);
61 1 //右半屏幕
62 1 LCD12864WriteCmdRight(DISP_OFF);
63 1 LCD12864WriteCmdRight(PAGE);
64 1 LCD12864WriteCmdRight(START_LINE);
65 1 LCD12864WriteCmdRight(COL);
66 1 LCD12864WriteCmdRight(DISP_ON);
67 1
68 1 }
69
70
71
72 void LCD12864Cls(void) //清屏函数
73 {
74 1 /*
75 1 uchar j,k;
76 1 CS2=1;CS1=0;
77 1 for(k=0;k<8;k++)
78 1 {
79 1 write_cmd(PAGE+k);
80 1 write_cmd(COL); //列地址0
81 1 for(j=0;j<64;j++) //列地址自动加一
82 1 write_data(0x00);
83 1 }
84 1 CS2=0;CS1=1;
85 1 for(k=0;k<8;k++)
86 1 {
87 1 write_cmd(PAGE+k);
88 1 write_cmd(COL); //列地址0
89 1 for(j=0;j<64;j++) //列地址自动加一
90 1 write_data(0x00);
91 1 }*/
92 1 unsigned char j,k;
93 1 for(k=0;k<8;k++)
94 1 {
95 2 LCD12864WriteCmdLeft(PAGE+k);
96 2 LCD12864WriteCmdLeft(COL); //列地址0
97 2 for(j=0;j<64;j++) //列地址自动加一
98 2 LCD12864WriteDataLeft(0x00);
99 2 }
100 1
101 1
102 1 for(k=0;k<8;k++)
103 1 {
104 2 LCD12864WriteCmdRight(PAGE+k);
105 2 LCD12864WriteCmdRight(COL); //列地址0
106 2 for(j=0;j<64;j++) //列地址自动加一
107 2 LCD12864WriteDataRight(0x00);
108 2 }
109 1
110 1 }
111
112
113
114 /**************************************************************************************************
115 *
116 *显示12*16点阵的汉字函数
117 *函数声明:void LCDDisplayChinese(uchar page,uchar col,uchar code *str,uchar n);
C51 COMPILER V7.50 LCD12864 10/31/2007 12:04:35 PAGE 3
118 *函数参数:page为页地址(0-7),col为列地址(0-127),str为数组名,n为要显示第n个汉字点阵
119 *函数作用:
120 *
121 **************************************************************************************************/
122 void LCDDisplayChinese(unsigned char page,unsigned char col,unsigned char code *str,unsigned char n)
123 {
124 1 unsigned char i,j;
125 1 unsigned char num;
126 1 if(col<=52)
127 1 {
128 2 for(j=0;j<2;j++)
129 2 {
130 3 LCD12864WriteCmdLeft(PAGE+page+j);LCD12864WriteCmdLeft(COL+col);
131 3 for(i=0;i<12;i++)
132 3 LCD12864WriteDataLeft(str[n*24+12*j+i]);
133 3 }
134 2 }
135 1 else if(col>=64)
136 1 {
137 2 col=col-64;
138 2 for(j=0;j<2;j++)
139 2 {
140 3 LCD12864WriteCmdRight(PAGE+page+j); LCD12864WriteCmdRight(COL+col);
141 3 for(i=0;i<12;i++)
142 3 LCD12864WriteDataRight(str[n*24+12*j+i]);
143 3 }
144 2 }
145 1
146 1
147 1 else if(col>52&&col<64) //处理跨屏幕的汉字书写的函数
148 1 {
149 2 num=64-col;
150 2 for(j=0;j<2;j++)
151 2 {
152 3 LCD12864WriteCmdLeft(PAGE+page+j); LCD12864WriteCmdLeft(COL+col);
153 3 for(i=0;i<num;i++)
154 3 LCD12864WriteDataLeft(str[n*24+12*j+i]);
155 3 }
156 2 col=0;
157 2 for(j=0;j<2;j++)
158 2 {
159 3 LCD12864WriteCmdRight(PAGE+page+j);LCD12864WriteCmdRight(COL+col);
160 3 for(i=num;i<12;i++)
161 3 LCD12864WriteDataRight(str[n*24+12*j+i]);
162 3 }
163 2
164 2
165 2 }
166 1
167 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 498 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- 7
PDATA SIZE = ---- ----
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 + -