📄 12232.lst
字号:
C51 COMPILER V7.09 12232 03/14/2007 23:21:25 PAGE 1
C51 COMPILER V7.09, COMPILATION OF MODULE 12232
OBJECT MODULE PLACED IN 12232.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 12232.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*
2 2007,3,8拷贝后修改成显示16*16BMP和取模汉字的任意行显示的子程序。
3 母版为KE文件夹中的12232.C
4 2007.3.9修改目标为任意行和可以读改写。
5 */
6
7 #include<reg52.h>
8 //#include<LCD_code.h>
9 #include<intrins.h>
10
11
12 //
13 sbit RS=P3^6;
14 sbit RW=P0^2;
15 sbit E1=P0^0;
16 sbit E2=P0^1;
17
18
19 #define lcd_data P1
20 //
21 #define disp_on 0xAf
22 #define disp_off 0xAe
23 #define disp_start_line 0xC0
24 #define page_addr_set 0xB8 //显示起始地址(后五位表示0~31行)
25 #define col_addr_set 0x00
26 #define mode_write 0xEE //写模式
27 #define status_busy 0x80
28 #define dynamic_driver 0xA4 // 动态驱动
29 #define adc_select 0xA0 //CLOCKWISE
30 #define clk32 0xA9
31 #define clk16 0xA8
32 #define reset 0xE2 //软件复位
33
34 #define u_char unsigned char
35 #define u_int unsigned int
36
37 void lcd_init(void);
38 void lcd_clr(void);
39 void wait_ready(void);
40 void draw_bmp(u_char col,u_char y,u_char width,u_char *bmp);
41
42
43
44 // 全局变量及标志位定义
45
46
47 /****************************************************************************/
48 /* 函数名:send_mi */
49 /* 功 能:发指令instruction到主窗口 */
50 /* 作 者:spot */
51 /* 输 入:instruction */
52 /* 输 出:无 */
53 /* */
54 /* 历史记录: */
55 /* spot 2005-06-28 Creat Inital version. (Version 1.0) */
C51 COMPILER V7.09 12232 03/14/2007 23:21:25 PAGE 2
56 /****************************************************************************/
57 void send_mi(u_char instruction)
58 {
59 1 E2 = 0;
60 1 E1 = 1;
61 1 // wait_ready();
62 1 RS = 0; /* 指令 */
63 1 RW = 0; /* 写触发 */
64 1 _nop_();
65 1 lcd_data = instruction; /* 指令码 */
66 1 _nop_();
67 1 E1 = 0; /* 关M */
68 1 _nop_();
69 1 }
70
71 /****************************************************************************/
72 /* 函数名:send_md */
73 /* 功 能:发数据data到主窗口 */
74 /* 作 者:spot */
75 /* 输 入:c_data */
76 /* 输 出:无 */
77 /* */
78 /* 历史记录: */
79 /* spot 2005-06-28 Creat Inital version. (Version 1.0) */
80 /****************************************************************************/
81 void send_md(u_char c_data)
82 {
83 1 E2 = 0;
84 1 E1 = 1;
85 1 // wait_ready();
86 1 _nop_();
87 1 RS = 1; /* 数据 */
88 1 RW = 0; /* 写触发 */
89 1 _nop_();
90 1 lcd_data = c_data; /* 数据 */
91 1 _nop_();
92 1 E1 = 0; /* 关M */
93 1 _nop_();
94 1 }
95
96 /****************************************************************************/
97 /* 函数名:send_si */
98 /* 功 能:发指令instruction到从窗口 */
99 /* 作 者:spot */
100 /* 输 入:instruction */
101 /* 输 出:无 */
102 /* */
103 /* 历史记录: */
104 /* spot 2005-06-28 Creat Inital version. (Version 1.0) */
105 /****************************************************************************/
106 void send_si(u_char instruction)
107 {
108 1 E1=0;
109 1 E2 = 1;
110 1 // wait_ready();
111 1
112 1 _nop_();
113 1 RS = 0; /* 指令 */
114 1 RW = 0; /* 写触发 */
115 1 _nop_();
116 1 lcd_data=instruction; /* 指令码 */
117 1 _nop_();
C51 COMPILER V7.09 12232 03/14/2007 23:21:25 PAGE 3
118 1 E2 = 0; /* 关S */
119 1 _nop_();
120 1 }
121
122 /****************************************************************************/
123 /* 函数名:send_sd */
124 /* 功 能:发数据data到从窗口 */
125 /* 作 者:spot */
126 /* 输 入:c_data */
127 /* 输 出:无 */
128 /* */
129 /* 历史记录: */
130 /* spot 2005-06-28 Creat Inital version. (Version 1.0) */
131 /****************************************************************************/
132 void send_sd(u_char c_data)
133 {
134 1 E1=0;
135 1 E2 = 1;
136 1 // wait_ready();
137 1 _nop_();
138 1 RS = 1; /* 数据 */
139 1 RW = 0; /* 写触发 */
140 1 _nop_();
141 1 lcd_data=c_data;
142 1 _nop_();
143 1 E2 = 0;
144 1 _nop_();
145 1 }
146
147 /****************************************************************************/
148 /* 函数名:wait_ready */
149 /* 功 能:等待ready:等待LCD内部操作完成 */
150 /* 作 者:spot */
151 /* 输 入:无 */
152 /* 输 出:无 */
153 /* */
154 /* 历史记录: */
155 /* spot 2005-06-28 Creat Inital version. (Version 1.0) */
156 /****************************************************************************/
157 void wait_ready(void)
158 {
159 1 RS = 0;/*指令*/
160 1 RW = 1;/*读*/
161 1 _nop_();
162 1 while(lcd_data & status_busy); /*读入LCD状态,1=忙,一直等待LCD内部操作完成*/
163 1 }
164
165
166 /****************************************************************************/
167 /* 函数名:lcd_clr */
168 /* 功 能:LCD清屏 */
169 /* 作 者:spot */
170 /* 输 入:无 */
171 /* 输 出:无 */
172 /* */
173 /* 历史记录: */
174 /* spot 2005-06-28 Creat Inital version. (Version 1.0) */
175 /****************************************************************************/
176 void lcd_clr(void)
177 {
178 1 u_char i, page;
179 1
C51 COMPILER V7.09 12232 03/14/2007 23:21:25 PAGE 4
180 1 for (page=0; page<4; page++)
181 1 {
182 2 send_mi(page_addr_set|page);
183 2 send_si(page_addr_set|page);
184 2
185 2 send_mi(col_addr_set); /* 主窗口设置为0列 */
186 2
187 2 for (i=0; i<62; i++)
188 2 {
189 3 send_md(0x00);
190 3 }
191 2
192 2 send_si(col_addr_set); /* 从窗口设置为0列 */
193 2 for (i=0; i<62; i++)
194 2 {
195 3 send_sd(0x00);
196 3 }
197 2 }
198 1 }
199
200 /****************************************************************************/
201 /* 函数名:lcd_init */
202 /* 功 能:122x32LCD初始化,开机后仅调用一次 */
203 /* 作 者:spot */
204 /* 输 入:无 */
205 /* 输 出:无 */
206 /* */
207 /* 历史记录: */
208 /* spot 2005-06-28 Creat Inital version. (Version 1.0) */
209 /****************************************************************************/
210 void lcd_init(void)
211 {
212 1 send_mi(reset); /* 复位m-left,s-right */
213 1 send_si(reset);
214 1
215 1 send_mi(disp_off); /* 关闭显示 */
216 1 send_si(disp_off);
217 1
218 1 send_mi(dynamic_driver);
219 1 send_si(dynamic_driver);
220 1
221 1 send_mi(clk32);
222 1 send_si(clk32);
223 1
224 1 send_mi(adc_select); /* clockwise */
225 1 send_si(adc_select);
226 1
227 1 send_mi(mode_write);
228 1 send_si(mode_write);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -