📄 lcd12864.lst
字号:
C51 COMPILER V6.12 LCD12864 07/30/2005 03:09:00 PAGE 1
C51 COMPILER V6.12, COMPILATION OF MODULE LCD12864
OBJECT MODULE PLACED IN .\lcd12864.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE .\lcd12864.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 //lcd12864.c
2 #include"general.h"
3 #include"lcd12864.h"
4 #include"lcd_code.h"
5 #include"sys12M.h"
6 #include"cm27c04.h"
7 #include<math.h>
8 sbit EN = P1^0;
9 //********************************
10 extern BYTE code char_code[95][16];
11 extern BYTE code motor_icon[6][32];
12 extern BYTE bdata tempchar[8];
13 //********************************
14 void lcd_init(void)
15 {
16 1 lcd_cmd1_send(0x3F);
17 1 lcd_cmd1_send(0xC0);
18 1
19 1 lcd_cmd2_send(0x3F);
20 1 lcd_cmd2_send(0xC0);
21 1 }
22 //********************************
23 void start_row(BYTE nrow)
24 {
25 1 lcd_cmd1_send(nrow|0xC0);
26 1 lcd_cmd2_send(nrow|0xC0);
27 1 }
28 //********************************
29 void lcd_cmd1_send(BYTE cmd)
30 {
31 1 BYTE state;
32 1 do
33 1 {
34 2 ADDR_LCD = E1_state_r;
35 2 EN = 1;
36 2 state = DATA_LCD;
37 2 EN = 0;
38 2 state = state & 0x80;
39 2 }while(state);
40 1 ADDR_LCD = E1_cmd_w;
41 1 EN = 1;
42 1 DATA_LCD = cmd;
43 1 _nop_();
44 1 EN = 0;
45 1
46 1 }
47 //***********************************
48 void lcd_cmd2_send(BYTE cmd)
49 {
50 1 BYTE state;
51 1 do
52 1 {
53 2 ADDR_LCD = E2_state_r;
54 2 EN = 1;
55 2 state = DATA_LCD;
C51 COMPILER V6.12 LCD12864 07/30/2005 03:09:00 PAGE 2
56 2 EN = 0;
57 2 state = state & 0x80;
58 2 }while(state);
59 1 ADDR_LCD = E2_cmd_w;
60 1 EN = 1;
61 1 DATA_LCD = cmd;
62 1 _nop_();
63 1 EN = 0;
64 1 }
65 //*************************************
66 void lcd_data1_send(BYTE dat)
67 {
68 1 BYTE state;
69 1 do
70 1 {
71 2 ADDR_LCD = E1_state_r;
72 2 EN = 1;
73 2 state = DATA_LCD;
74 2 EN = 0;
75 2 state = state & 0x80;
76 2 }while(state);
77 1 ADDR_LCD = E1_data_w;
78 1 EN = 1;
79 1 DATA_LCD = dat;
80 1 _nop_();
81 1 EN = 0;
82 1 }
83 //***********************************
84 void lcd_data2_send(BYTE dat)
85 {
86 1 BYTE state;
87 1 do
88 1 {
89 2 ADDR_LCD = E2_state_r;
90 2 EN = 1;
91 2 state = DATA_LCD;
92 2 EN = 0;
93 2 state = state & 0x80;
94 2 }while(state);
95 1 ADDR_LCD = E2_data_w;
96 1 EN = 1;
97 1 DATA_LCD = dat;
98 1 _nop_();
99 1 EN = 0;
100 1 }
101 //************************************
102 //*************************LCD清屏
103 void lcd_clear()
104 {
105 1 BYTE page;
106 1 BYTE i,j;
107 1 for(i=0;i<8;i++)
108 1 {
109 2 page = i | 0xB8;
110 2 lcd_cmd1_send(page);
111 2 lcd_cmd1_send(0x40);
112 2 lcd_cmd2_send(page);
113 2 lcd_cmd2_send(0x40);
114 2 for(j=0;j<64;j++)
115 2 {
116 3 lcd_data1_send(0x00);
117 3 lcd_data2_send(0x00);
C51 COMPILER V6.12 LCD12864 07/30/2005 03:09:00 PAGE 3
118 3 }
119 2 }
120 1 }
121 //***********************LCD写字符子程序
122 BYTE lcd_char_send(BYTE *dat,BYTE page/*0,2,4or8*/,BYTE line_num,bit bclr)
123 {
124 1 BYTE temp,cur_line;
125 1 BYTE i;
126 1 temp = page | 0xB8;
127 1 for(i=0,cur_line=line_num;i<8;i++,cur_line++)
128 1 {
129 2 if(cur_line<64)
130 2 {
131 3 lcd_cmd1_send(temp);
132 3 lcd_cmd1_send(cur_line|0x40);
133 3 if(bclr) lcd_data1_send(dat[i]);
134 3 else lcd_data1_send(~dat[i]);
135 3 }
136 2 else
137 2 {
138 3 lcd_cmd2_send(temp);
139 3 lcd_cmd2_send((cur_line-64)|0x40);
140 3 if(bclr) lcd_data2_send(dat[i]);
141 3 else lcd_data2_send(~dat[i]);
142 3 }
143 2 }
144 1 temp = (page+1) | 0xB8;
145 1
146 1 for(i=8,cur_line=line_num;i<16;i++,cur_line++)
147 1 {
148 2 if(cur_line<64)
149 2 {
150 3 lcd_cmd1_send(temp);
151 3 lcd_cmd1_send(cur_line|0x40);
152 3 if(bclr) lcd_data1_send(dat[i]);
153 3 else lcd_data1_send(~dat[i]);
154 3 }
155 2 else
156 2 {
157 3 lcd_cmd2_send(temp);
158 3 lcd_cmd2_send((cur_line-64)|0x40);
159 3 if(bclr) lcd_data2_send(dat[i]);
160 3 else lcd_data2_send(~dat[i]);
161 3 }
162 2 }
163 1 line_num += 8;
164 1 return line_num;
165 1 }
166 //*************************打印字符
167 BYTE print_char(BYTE the_char,BYTE page,BYTE line_num,bit bclr)
168 {
169 1 line_num = lcd_char_send(char_code[the_char-32],page,line_num,bclr);
170 1 return line_num;
171 1 }
172 //*************************打印字符串
173 BYTE print_string(BYTE *string,BYTE page,BYTE line_num,bit bclr)
174 {
175 1 BYTE i;
176 1 BYTE char_test;
177 1 i = 0;
178 1 while(1)
179 1 {
C51 COMPILER V6.12 LCD12864 07/30/2005 03:09:00 PAGE 4
180 2 char_test = string[i];
181 2 if(char_test == '$') break;
182 2 if(char_test >0xA0)
183 2 {
184 3 line_num = print_chs(string+i,page,line_num,bclr);
185 3 i++;
186 3 i++;
187 3 }
188 2 else
189 2 {
190 3 line_num = print_char(char_test,page,line_num,bclr);
191 3 i++;
192 3 }
193 2 }
194 1 return line_num;
195 1 }
196 //*************************打印图标或汉字
197 BYTE print_icon(BYTE *icon,BYTE page,BYTE line_num,BYTE iheight,BYTE iwidth,bit bclr)
198 {
199 1 BYTE temp,cur_line;
200 1 BYTE i,j;
201 1 for(j=0;j<iheight;j++)
202 1 {
203 2 temp = (page+j) | 0xB8;
204 2 for(i=0,cur_line=line_num;i<iwidth;i++,cur_line++)
205 2 {
206 3 if(cur_line<64)
207 3 {
208 4 lcd_cmd1_send(temp);
209 4 lcd_cmd1_send(cur_line|0x40);
210 4 if(bclr) lcd_data1_send(icon[i+j*iwidth]);
211 4 else lcd_data1_send(~icon[i+j*iwidth]);
212 4 }
213 3 else
214 3 {
215 4 lcd_cmd2_send(temp);
216 4 lcd_cmd2_send((cur_line-64)|0x40);
217 4 if(bclr) lcd_data2_send(icon[i+j*iwidth]);
218 4 else lcd_data2_send(~icon[i+j*iwidth]);
219 4 }
220 3 }
221 2 }
222 1 line_num += iwidth;
223 1 return line_num;
224 1 }
225 //******************************打印整型数字
226 BYTE print_num(WORD srcnum,BYTE page,BYTE line_num,bit bclr)
227 {
228 1 BYTE i;
229 1 WORD j,digit;
230 1 if(srcnum==0) print_string(" $",page,line_num,bclr);
231 1 else if(srcnum<10)
232 1 {
233 2 digit = srcnum;
234 2 line_num = lcd_char_send(char_code[digit+16],page,line_num,bclr);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -