📄 5.2.3-2.lst
字号:
C51 COMPILER V6.20c 5_2_3_2 09/02/2001 14:50:30 PAGE 1
C51 COMPILER V6.20c, COMPILATION OF MODULE 5_2_3_2
OBJECT MODULE PLACED IN 5.2.3-2.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 5.2.3-2.c DEBUG OBJECTEXTEND
stmt level source
1 #include<reg51.h>
2 #include<stdlib.h>
3 #define uchar unsigned char
4 uchar data Column; /*定义"列"变量*/
5 uchar data Page;
6 sbit D_I=P3^2;
7 sbit R_W=P3^3;
8 sbit E=P3^4;
9 sbit CSA=P3^1;
10 sbit CSB=P3^0;
11 sbit BUSY=P1^7;
12 sbit Page_4=P1^4;
13 char code Hanzi[4][32]=
14 {
15 0x40,0xB0,0x92,0x96,0x9A,0x92,0xF2,0x9E,0x92,0x91,0x99,0x95,0x91,0x50,0x30,0x00, /*爱*/
16 0x00,0x00,0x40,0x30,0x8C,0x83,0x46,0x2A,0x12,0x2A,0x26,0x42,0xC0,0x40,0x00,0x00,
17 0x20,0x24,0x24,0x24,0xFE,0x23,0x22,0x20,0xFF,0x20,0x22,0xAC,0x20,0x30,0x20,0x00, /*我*/
18 0x00,0x08,0x48,0x84,0x7F,0x02,0x21,0x10,0x09,0x06,0x1A,0x61,0x80,0xE0,0x00,0x00,
19 0x00,0xF8,0x08,0x08,0x08,0x08,0x08,0xFF,0x08,0x08,0x08,0x08,0x08,0xFC,0x08,0x00, /*中*/
20 0x00,0x03,0x01,0x01,0x01,0x01,0x01,0xFF,0x01,0x01,0x01,0x01,0x01,0x03,0x00,0x00,
21 0x00,0x40,0x20,0x10,0xFC,0x03,0x40,0x20,0x10,0xFF,0x08,0x04,0x06,0xC0,0x00,0x00, /*华*/
22 0x04,0x04,0x04,0x04,0x05,0x04,0x04,0xFF,0x04,0x04,0x05,0x05,0x05,0x05,0x04,0x00
23 };
24 void Inquire_Busy_L(); /*左半屏查询是否"忙"*/
25 void Send_Dat_L(uchar d); /*送左半屏指令*/
26 void Inquire_Busy_R(); /*右半屏查询是否"忙"*/
27 void Send_Dat_R(uchar d); /*送右半屏指令*/
28 void Clear(); /*清屏*/
29 void Ini(); /*初始化*/
30 void Send_Dat_Disp_L(uchar d); /*送左半屏显示*/
31 void Send_Dat_Disp_R(uchar d); /*送右半屏显示*/
32 void Lcd_Disp(char *p); /*显示*/
33 void Hanzi_Disp();
34 void Delay();
35
36 /***************************************主程序******************************************/
37 void main()
38 {
39 1 Delay();Delay();Delay(); /*延时*/
40 1 IE=0x81;TCON=0x00;
41 1 Ini(); /*初始化*/
42 1 Clear(); /*清屏*/
43 1 Hanzi_Disp(); /*显示汉字*/
44 1 }
45
46 /*********************************查询左半屏是否"忙"子程序******************************/
47 void Inquire_Busy_L()
48 {
49 1 R_W=1; R_W=1;D_I=0;D_I=0; /*读取状态字*/
50 1 CSA=0;CSA=0; CSB=1;CSB=1; /*选左半屏*/
51 1 Loop:
52 1 P1=0xFF;
53 1 E=1;E=1; /*使能*/
54 1 E=0;E=0;
55 1 if(BUSY){goto Loop;}
C51 COMPILER V6.20c 5_2_3_2 09/02/2001 14:50:30 PAGE 2
56 1 CSA=1; CSA=1; /*是CSA为高电平,为选择左半区作准备*/
57 1 D_I=1;D_I=1; R_W=1;R_W=1; /*读数据*/
58 1 }
59
60 /**********************************送左半屏指令子程序***********************************/
61 void Send_Dat_L(uchar d)
62 {
63 1 R_W=0; R_W=0;D_I=0;D_I=0; /*设置显示开头*/
64 1 CSA=0;CSA=0; /*左半屏*/
65 1 E=1;E=1;
66 1 P1=d;P1=d;
67 1 E=0;E=0;
68 1 CSA=1;CSA=1;
69 1 D_I=1;D_I=1; R_W=1;R_W=1; /*读数据*/
70 1 }
71
72 /*********************************查询右半屏是否"忙"子程序******************************/
73 void Inquire_Busy_R()
74 {
75 1 R_W=1;R_W=1; D_I=0;D_I=0; /*读状态字*/
76 1 CSB=0;CSB=0; /*右半屏*/
77 1 Loop2:
78 1 P1=0xFF;
79 1 E=1;E=1;
80 1 E=0;E=0;
81 1 if(BUSY){goto Loop2;}
82 1 CSB=1; CSB=1; /*为访问左区作准备*/
83 1 D_I=1;D_I=1;R_W=1;R_W=1; /*读数据*/
84 1 }
85
86 /**********************************送右半屏指令子程序***********************************/
87 void Send_Dat_R(uchar d)
88 {
89 1 R_W=0; R_W=0; D_I=0;D_I=0; /*设置显示开头*/
90 1 CSB=1;CSB=1; /*右半屏*/
91 1 E=1;E=1;
92 1 P1=d;P1=d;
93 1 E=0;E=0;
94 1 CSB=0;CSB=0;
95 1 D_I=1;D_I=1; R_W=1;R_W=1; /*读数据*/
96 1 }
97
98 /*********************************送左半屏显示字符子程序********************************/
99 void Send_Dat_Disp_L(uchar d)
100 {
101 1 R_W=0; R_W=0; D_I=1;D_I=1; /*写数据*/
102 1 CSA=1;CSA=1;
103 1 E=1;E=1;
104 1 P1=d;P1=d;
105 1 E=0;E=0;
106 1 CSA=0;CSA=0;
107 1 D_I=1;D_I=1; R_W=1;R_W=1; /*读数据*/
108 1 }
109
110 /*********************************送右半屏显示字符子程序********************************/
111 void Send_Dat_Disp_R(uchar d)/**/
112 {
113 1 R_W=0; R_W=0; D_I=1;D_I=1; /*写数据*/
114 1 CSB=1;CSB=1;
115 1 E=1;E=1;
116 1 P1=d;P1=d;
117 1 E=0;E=0;
C51 COMPILER V6.20c 5_2_3_2 09/02/2001 14:50:30 PAGE 3
118 1 CSB=0;CSB=0;
119 1 D_I=1;D_I=1; R_W=1;R_W=1; /*读数据*/
120 1 }
121
122 /*************************************延时子程序****************************************/
123 void Delay()
124 {
125 1 uchar data i,j;
126 1 for(i=0;i<255;i++)
127 1 {for(j=0;j<255;j++);}
128 1 }
129
130 /************************************初始化子程序***************************************/
131 void Ini()
132 {
133 1 E=0;R_W=1;D_I=1;CSA=CSB=0;Delay();
134 1 Inquire_Busy_L();
135 1 Send_Dat_L(0x3e); /*关显示指令*/
136 1 Inquire_Busy_R();
137 1 Send_Dat_R(0x3e); /*开显示指令*/
138 1 Inquire_Busy_L();
139 1 Send_Dat_L(0x3f); /*设置起始行*/
140 1 Inquire_Busy_R();
141 1 Send_Dat_R(0x3f);
142 1 Inquire_Busy_L();
143 1 Send_Dat_L(0xc0);
144 1 Inquire_Busy_R();
145 1 Send_Dat_R(0xc0);
146 1 }
147
148 /****************************************清屏子程序*************************************/
149 void Clear()
150 {
151 1 uchar data i,j,Disp_Page;
152 1 for(i=0;i<8;i++)
153 1 {
154 2 Disp_Page=i;
155 2 Disp_Page=Disp_Page|0xb8; /*设置页地址*/
156 2 Inquire_Busy_L();
157 2 Send_Dat_L(Disp_Page);
158 2 Inquire_Busy_L();
159 2 Send_Dat_L(0x40); /*设置列地址*/
160 2 for(j=0;j<64;j++)
161 2 {Send_Dat_Disp_L(0x00);}
162 2 }
163 1 for(i=0;i<8;i++)
164 1 {
165 2 Disp_Page=i;
166 2 Disp_Page=Disp_Page|0xb8; /*设置页地址*/
167 2 Inquire_Busy_R();
168 2 Send_Dat_R(Disp_Page);
169 2 Inquire_Busy_R();
170 2 Send_Dat_R(0x40); /*设置列地址*/
171 2 for(j=0;j<64;j++)
172 2 {Send_Dat_Disp_R(0x00);}
173 2 }
174 1 }
175
176 /***********************************液晶显示子程序**************************************/
177 void Lcd_Disp(char *p)
178 {
179 1 uchar idata i;
C51 COMPILER V6.20c 5_2_3_2 09/02/2001 14:50:30 PAGE 4
180 1 char idata ch;
181 1 for(i=0;i<8;i++)
182 1 {
183 2 ch=*p;
184 2 p++;
185 2 Send_Dat_Disp_L(ch);
186 2 Send_Dat_Disp_R(ch);
187 2 }
188 1 }
189
190 /*************************************汉字显示子程序************************************/
191 void Hanzi_Disp()
192 {
193 1 uchar data i;
194 1 Clear();
195 1 P1=0xbc; /*页地址*/
196 1 Column=0x40; /*列地址*/
197 1 Inquire_Busy_L();
198 1 Send_Dat_L(Page);
199 1 Inquire_Busy_L();
200 1 Send_Dat_L(Page);
201 1 Inquire_Busy_L();
202 1 Send_Dat_L(Column);
203 1 for(i=0;i<4;i++) /*显示汉字上半部分*/
204 1 {
205 2 Lcd_Disp(&Hanzi[i][0]);
206 2 Lcd_Disp(&Hanzi[i][8]);
207 2 }
208 1 Page=0xbd; /*页地址加1*/
209 1 Column=0x40; /*列地址*/
210 1 Inquire_Busy_L();
211 1 Send_Dat_L(Page);
212 1 Inquire_Busy_L();
213 1 Send_Dat_L(Page);
214 1 Inquire_Busy_L();
215 1 Send_Dat_L(Column);
216 1 for(i=0;i<4;i++) /*显示汉字下半部分*/
217 1 {
218 2 Lcd_Disp(&Hanzi[i][0]);
219 2 Lcd_Disp(&Hanzi[i][8]);
220 2 }
221 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 565 ----
CONSTANT SIZE = 128 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 2 4
IDATA SIZE = ---- 2
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 + -