📄 main.lst
字号:
C51 COMPILER V7.20 MAIN 07/23/2008 16:20:10 PAGE 1
C51 COMPILER V7.20, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include<reg51.h>
2 #include"omc12864.h"
3
4 #define disp_off 0x3e //显示关指令
5 #define disp_on 0x3f //显示开指令
6 #define disp_x 0xb8 //地址页初值bin000
7 #define disp_z 0xc0 //显示起始行偏移量bin000000
8 #define disp_y 0x40 //列地址初值bin000000
9 #define comm 0 //指令
10 #define dat 1 //数据
11 #define data_ora P0 //数据口
12
13 sbit rs =P1^2; //Data or Instrument Select,H:写数据,L:写指令
14 sbit rw =P1^3; //Write or Read,H:read,L:write
15 sbit e =P1^4; //读写使能
16 sbit cs1=P1^0; //cs1=H,选择左半屏
17 sbit cs2=P1^1; //cs2=H,选择右半屏
18 sbit rst=P1^5; //Lcm reset,低有效
19 sbit bf =P0^7; //检测忙状态
20 sbit res=P0^4; //检测复位状态
21
22 void wr_lcd (unsigned char dat_comm,unsigned char content);
23 void delay (unsigned int us);
24 void delay1 (unsigned int ms);
25 void Puthazs(unsigned char x, unsigned char y ,unsigned char len,unsigned char code *hazs);
26 void Puthaz(unsigned char x,unsigned char y,unsigned char chacnum,unsigned char code *ziku);
27
28 /*****************************************************************
29 函数功能:显示ASCII码字符
30 参数说明:x(行,取值0~3),y(列,取值0~15)为定位坐标
31 ch为ASCII字符
32 ******************************************************************/
33
34 void PutChar(unsigned char x,unsigned char y,unsigned char asc2key)
35 {
36 1 unsigned char i;
37 1 x=x&0x0F;
38 1 if((y=(y&0x0F))>7){cs1=1;cs2=0;y-=8;} //右半屏显示
39 1 else{cs1=0;cs2=1;} //左半屏显示
40 1 wr_lcd (comm,disp_on);
41 1
42 1 //显示字符上半部分
43 1 wr_lcd (comm,disp_x+2*x); //设置页
44 1 wr_lcd (comm,disp_z); //设置起始行
45 1 wr_lcd (comm,disp_y+8*y); //设置列
46 1 for(i=0;i<8;i++)
47 1 wr_lcd (dat,asc2[(asc2key-32)*16+i]); //根据ASCII码开始位置的不同来修改32
48 1
49 1 //显示字符下半部分
50 1 wr_lcd (comm,disp_x+2*x+1); //设置页
51 1 wr_lcd (comm,disp_z); //设置起始行
52 1 wr_lcd (comm,disp_y+8*y); //设置列
53 1 for(i=8;i<16;i++)
54 1 wr_lcd (dat,asc2[(asc2key-32)*16+i]); //根据ASCII码开始位置的不同来修改32
55 1 }
C51 COMPILER V7.20 MAIN 07/23/2008 16:20:10 PAGE 2
56
57 /********************************************************************************
58 函数功能: 字符串输入函数,可选择定位也可不用此功能(x=0,y=0或都超出范围)
59 具有自动换行功能,当写满屏时转到(0,0)从头开始
60 参数说明: x(行);y(列);str*字库
61 x,y的值可较灵活,超出范围时自动从(0,0)点显示
62 *********************************************************************************/
63
64 //监测忙状态
65 void chk_busy (void)
66 {
67 1 data_ora=0xff;
68 1 rs=0;
69 1 rw=1;
70 1 ;
71 1 e=1;
72 1 while(bf||res==1);
73 1 e=0;
74 1 }
75 void PutStr(unsigned char x, unsigned char y , unsigned char *str)
76 {
77 1 unsigned char i,len=0;
78 1
79 1 /* 计算字符串长度 */
80 1 while (str[len] >31)
81 1 ++len;
82 1
83 1 /* 显示字符串 */
84 1 for (i=0;i<len;i++)
85 1 {
86 2 if ( y>= 16 )
87 2 {
88 3 if(x<3)
89 3 {
90 4 y = 0;
91 4 x += 1; //若超出范围则下一行显示
92 4 }
93 3 else {x=0;y=0;} //超出屏幕范围,则从屏幕开头显示
94 3 }
95 2 PutChar(x,y++,str[i]);
96 2 }
97 1 }
98
99
100
101 //初始化
102 void init_lcd (void)
103 {
104 1 // rst=0;
105 1 delay(50);
106 1 // rst=1;
107 1 cs1=0;cs2=0;
108 1 wr_lcd (comm,disp_off);
109 1 wr_lcd (comm,disp_on);
110 1 }
111
112 //清屏
113 void clear(void)
114 {
115 1 unsigned char i,j;
116 1 cs1=0;cs2=0;
117 1 wr_lcd (comm,disp_on);
C51 COMPILER V7.20 MAIN 07/23/2008 16:20:10 PAGE 3
118 1 for(j=0;j<8;j++)
119 1 {
120 2 wr_lcd (comm,disp_x+j);
121 2 wr_lcd (comm,disp_z);
122 2 wr_lcd (comm,disp_y);
123 2 for(i=0;i<64;i++)wr_lcd (dat,0x00);
124 2 }
125 1 }
126 //写数据或命令到LCD
127 void wr_lcd (unsigned char dat_comm,unsigned char content)
128 {
129 1 // chk_busy ();
130 1 rs=dat_comm;
131 1 rw=0;
132 1 data_ora=content;
133 1 e=1;
134 1 ;
135 1 e=0;
136 1 }
137
138 void xwpclear(void)
139 {
140 1 unsigned char x,y;
141 1 if ( y>= 16 )
142 1 {
143 2 if(x<3)
144 2 {
145 3 y = 0;
146 3 x += 1; //若超出范围则下一行显示
147 3 }
148 2 else {x=0;y=0;} //超出屏幕范围,则从屏幕开头显示
149 2 }
150 1 PutChar(x,y++," ");
*** WARNING C214 IN LINE 150 OF MAIN.C: 'Argument': conversion: pointer to non-pointer
151 1 }
152
153
154
155 void main ()
156 {
157 1 init_lcd ();
158 1 clear();
159 1 while(1)
160 1 {
161 2 clear();
162 2 PutStr(0,0,"Hello! Welcome! lilei 0000 0000 0000 0111 ");
163 2 delay1(1500);
164 2 clear();
165 2 xwpclear();
166 2 Puthazs(0,0,sizeof(dax2)/sizeof(dax2[0])>>5,dax2);
167 2 delay1(200);
168 2 }
169 1 }
170
171
172
173 void delay (unsigned int us)
174 {
175 1 while(us--);
176 1 }
177
178 void delay1 (unsigned int ms)
C51 COMPILER V7.20 MAIN 07/23/2008 16:20:10 PAGE 4
179 {
180 1 unsigned int i,j;
181 1 for(i=0;i<ms;i++)
182 1 for(j=0;j<1000;j++)
183 1 ;
184 1 }
185
186 /*********************************************************************************
187 函数功能:格式化((16*16)*8*4)从字库中提取单个汉字
188 参数说明:定位x:行,0~3 y:列,0~7 chacnum:所取汉字在字库中的标号(后面生成的标号)
189 ziku:字库名
190 *********************************************************************************/
191 void Puthaz(unsigned char x,unsigned char y,unsigned char chacnum,unsigned char code *ziku)
192 {
193 1 unsigned char i;
194 1 x=x&0x0F;
195 1 if((y=(y&0x07))>3){cs1=1;cs2=0;y-=4;} //右半屏显示
196 1 else{cs1=0;cs2=1;} //左半屏显示
197 1 wr_lcd (comm,disp_on);
198 1
199 1 //显示汉字上半部分
200 1 wr_lcd (comm,disp_x+2*x); //设置页
201 1 wr_lcd (comm,disp_z); //设置起始行
202 1 wr_lcd (comm,disp_y+16*y); //设置列
203 1 for(i=0;i<16;i++)
204 1 wr_lcd (dat,ziku[chacnum*32+i]); //根据ASCII码开始位置的不同来修改32
205 1
206 1 //显示汉字下半部分
207 1 wr_lcd (comm,disp_x+2*x+1); //设置页
208 1 wr_lcd (comm,disp_z); //设置起始行
209 1 wr_lcd (comm,disp_y+16*y); //设置列
210 1 for(i=16;i<32;i++)
211 1 wr_lcd (dat,ziku[chacnum*32+i]); //根据ASCII码开始位置的不同来修改32
212 1 }
213
214 /**********************************************************************************************
215 函数功能:从x(行)y(列)位置开始,从字库的第一个字输出一直到标号为len的字结束,包含len
216 **********************************************************************************************/
217 void Puthazs(unsigned char x, unsigned char y ,unsigned char len,unsigned char code *hazs)
218 {
219 1 unsigned char i;
220 1
221 1 /* 计算汉字个数 */
222 1 // len=((sizeof(hazs)/sizeof(hazs[0]))>>5);
223 1
224 1 /* 显示字符串 */
225 1 for (i=0;i<len;i++)
226 1 {
227 2 if ( y>= 8 )
228 2 {
229 3 if(x<3)
230 3 {
231 4 y = 0;
232 4 x += 1; //若超出范围则下一行显示
233 4 }
234 3 else {x=0;y=0;} //超出屏幕范围,则从屏幕开头显示
235 3 }
236 2
237 2 Puthaz(x,y++,i,hazs);
238 2 }
239 1 }
C51 COMPILER V7.20 MAIN 07/23/2008 16:20:10 PAGE 5
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 749 ----
CONSTANT SIZE = 6931 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 25
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 1 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -