📄 main.lst
字号:
131 1 //delayms(2);
132 1 led_sel=0x3f; //RW=0,RS=0,E=0 恢复
133 1 delayms(2);
134 1 }
135 /*-----------------------------------------------------------------------------------------------
136 液晶写数据子程序
137 -----------------------------------------------------------------------------------------------*/
138 void wdat(void) //写数据
139 {
140 1 led_sel=0xff; //RW=0,RS=1,E=1 写
141 1 //delayms(2);
142 1 led_data=LCD_cn;
143 1 //delayms(2);
144 1 led_sel=0x7f; //写脉冲Rs=1,wr=0;e=0 恢复
145 1 //led_sel=0x3f; //RW=0,RS=0,E=0 恢复 这句代替上句的话,RS=0,无法显示数据
146 1 delayms(2);
147 1 }
148 /*--------------------------------------------------------------------
149 地址转换子程序
150 第一行: 80H ———87H ,第二行: 90H ———97H 第三行:88H ———8FH 第四行:9
151 --------------------------------------------------------------------*/
152 void changeAddr(uchar lin)
153 {
154 1 switch(lin)
155 1 {
156 2 case 0:
157 2 LCD_cn=0x80; //LINE 1
158 2 break;
159 2 case 1:
160 2 LCD_cn=0x90; //LINE 2
161 2 break;
162 2 case 2:
163 2 LCD_cn=0x88; //LINE 3
164 2 break;
165 2 case 3:
166 2 LCD_cn=0x98; //LINE 4
167 2 break;
168 2 }
169 1 }
170 /*------------------------------------------------------------------------------------------
171 插入字符子程序
172 相应位插入空字符,同时该位以后的所有字符逐位往后退一位
173 ------------------------------------------------------------------------------------------*/
174 void insert(uchar p)
175 {
176 1 uchar p1;
177 1 p1=p;
C51 COMPILER V7.06 MAIN 11/17/2006 10:44:48 PAGE 4
178 1 while(buffer[p]!='\0') //将数组指针移到数组末尾第一个\0处
179 1 {
180 2 p++;
181 2 }
182 1 for(;p>p1;p--) //从第p1+1位开始,逐位往后退一位
183 1 buffer[p]=buffer[p-1];
184 1 buffer[p1]=' '; //p1位补空字符
185 1 }
186 /*----------------------------------------------------------------------------------------
187 数组重排列子程序
188 ----------------------------------------------------------------------------------------*/
189 void changeArr(void)
190 {
191 1 uchar count; //用于计算字母(单字符)个数
192 1 uchar j=0;
193 1 while(buffer[j]!='\0')
194 1 {
195 2 if(buffer[j]<127) //判断是否位字母
196 2 {
197 3 count++;
198 3 j++;
199 3 }
200 2 if(buffer[j]>127) //判断是否位汉字
201 2 {
202 3 if(count%2!=0) //若汉字前字母个数为奇数则调用子函数insert(),作相应的处理
203 3 {
204 4 insert(j);
205 4 j=j+2; //跳到汉字后的字符(一个汉字占用2个字节位置)
206 4 count=0;
207 4 }
208 3 else
209 3 {
210 4 count=0;
211 4 j++;
212 4 }
213 3 }
214 2 }
215 1 }
216 /*---------------------------------------------------------------------------------------------------
217 液晶显示子程序
218 ---------------------------------------------------------------------------------------------------*/
219 void show(void)
220 {
221 1 uchar j=0;
222 1 uchar line;
223 1 LCD_cn=0x80;
224 1 wcom();
225 1 while(buffer[j]!='\0')
226 1 {
227 2 if(j%16==0) //每行智能显示16个字符,到达字符个数自动换行
228 2 {
229 3 line=j/16;
230 3 if(line>4) break;
231 3 changeAddr(line); //改变地址
232 3 wcom();
233 3 }
234 2 LCD_cn=buffer[j];
235 2 wdat();
236 2 j++;
237 2 }
238 1 }
239 /*----------------------------------------------------------------------------------------------
C51 COMPILER V7.06 MAIN 11/17/2006 10:44:48 PAGE 5
240 串口中断子程序
241 ----------------------------------------------------------------------------------------------*/
242 serial()interrupt 4 using 1
243 {
244 1 RI=0;
245 1 buffer[i]=SBUF;
246 1 i++;
247 1 if(SBUF=='*')
248 1 {
249 2
250 2 for(k=i-1;k<100;k++)
251 2 buffer[k]='\0';
252 2 flag=1;
253 2
254 2 }
255 1
256 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 379 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 104 ----
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 + -