📄 12232.lst
字号:
C51 COMPILER V7.07 12232 10/31/2006 14:32:12 PAGE 1
C51 COMPILER V7.07, COMPILATION OF MODULE 12232
OBJECT MODULE PLACED IN 12232.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 12232.c DEBUG OBJECTEXTEND
stmt level source
1 /*============================================================
2 功能:使用12232液晶显示图片演示
3 作者: Mingtree ycxms88@163.com http://www.mcu123.com
4 ==============================================================
5 硬件:TG12232B (122*32)模拟口线接线方式
6 连接线图:
7 --------------------------------------------------|
8 |DB0-----P0.0 | DB4-----P0.4 | RW-------P1.1 | A0--------P1.0 |
9 |DB1-----P0.1 | DB5-----P0.5 | RS-------P2.1 | V0接1K电阻到GND |
10 |DB2-----P0.2 | DB6-----P0.6 | E1-------P1.3 |
11 |DB3-----P0.3 | DB7-----P0.7 | E2-------P1.2 |
12 ---------------------------------------------------
13
14 本程序源码只供学习参考,如有需要请联系作者。
15
16 [注:AT89x52使用22.1184M或11.0592M晶振,实测使用22.1184M或11.0592都可以]
17 编译平台:Keil uV2 7.08
18
19
20 //可能看起来有点乱,不过效果还是不错的,显示图形总的来说比显示汉字要简单,当然显示汉字也不难。
21 希望此程序能给你一些帮助。
22 有什么问题可以发email 给我或到我的论坛发问.
23 http://www.mcu123.com/bbs
24 =============================================================*/
25
26
27 #include <SST89x5x4.h>
28 #include <stdio.h>
29 #include <intrins.h>
30 #define uchar unsigned char
31 #define uint unsigned int
32 #define lcd_data P0 //数据
33 #define NOP() _nop_()
34
35 sfr P4=0xA5;
36 sbit E1 =P2^7; //块1 左边
37 sbit E2 =P2^6; //块2 右边
38 sbit RW =P2^1; //1-read,0-write
39 sbit A0 =P2^0; //A0为1时是数据,0时为指令数据
40 sbit W_R= P3^6;
41
42 extern unsigned char code Bmpt1[];
43 extern unsigned char code Bmpt2[];
44 extern unsigned char code Bmpt3[];
45 extern unsigned char code Bmpt4[];
46 extern unsigned char code Bmpt5[];
47 extern unsigned char code Bmpt6[];
48 extern unsigned char code Bmpt7[];
49 extern unsigned char code Bmptc[];
50 extern unsigned char code bmp001[];
51 extern unsigned char code Bmp08[];
52 extern unsigned char code Bmp07[];
53 extern unsigned char code Bmp06[];
54 extern unsigned char code Bmp05[];
55 extern unsigned char code Bmp04[];
C51 COMPILER V7.07 12232 10/31/2006 14:32:12 PAGE 2
56 extern unsigned char code Bmp03[];
57 extern unsigned char code Bmp02[];
58 extern unsigned char code Bmp01[];
59 extern unsigned char code Bmp012[];
60 extern unsigned char code Bmp003[];
61 extern unsigned char code Bmp002[];
62
63
64 //延时
65 void delay(unsigned int i)
66 {
67 1 unsigned char k=200;
68 1 while(i>0)
69 1 {
70 2 i--;
71 2 }
72 1 while(k>1)k--;
73 1 }
74
75 //左页
76 //发送数据
77 void OUTMD(unsigned char i)
78 {
79 1 E2=0; //关S
80 1 E1=1; //开M
81 1 delay(5);
82 1 A0=1; //数据
83 1 WR=0; //写触发
84 1 NOP();
85 1 lcd_data = i;
86 1 NOP();
87 1 E1=0; //关M
88 1
89 1 }
90 //左页
91 //发送命令
92 void OUTMI(unsigned char i)
93 {
94 1 E2=0; //关S
95 1 E1=1; //开M
96 1 delay(5);
97 1 A0=0; //指令
98 1 WR=0; //写触发
99 1 NOP();
100 1 lcd_data = i;
101 1 NOP();
102 1 E1=0; //关M
103 1 }
104 //右页
105 //发送数据
106 void OUTSD(unsigned char i)
107 {
108 1 E1=0; //关S
109 1 E2=1; //开M
110 1 delay(5);
111 1 A0=1; //数据
112 1 WR=0; //写触发
113 1 NOP();
114 1 lcd_data = i;
115 1 NOP();
116 1 E2=0; //关M
117 1 }
C51 COMPILER V7.07 12232 10/31/2006 14:32:12 PAGE 3
118 //右页
119 //发送命令
120 void OUTSI(unsigned char i)
121 {
122 1 E1=0; //关S
123 1 E2=1; //开M
124 1 delay(5);
125 1 A0=0; //指令
126 1 WR=0; //写触发
127 1 NOP();
128 1 lcd_data = i;
129 1 NOP();
130 1 E2=0; //关M
131 1 }
132
133
134
135 //初始化
136 void lcdini(void)
137 {
138 1 RW=0;
139 1 OUTMI(0XE2);
140 1 OUTSI(0XE2);//复位
141 1 OUTMI(0XAE);
142 1 OUTSI(0XAE);//POWER SAVE
143 1 OUTMI(0XA4);
144 1 OUTSI(0XA4);//动态驱动
145 1 OUTMI(0XA9);
146 1 OUTSI(0XA9);//1/32占空比
147 1 OUTMI(0XA0);
148 1 OUTSI(0XA0);//时钟线输出
149 1 OUTMI(0XEE);
150 1 OUTSI(0XEE);//写模式
151 1
152 1 OUTMI(0X00);
153 1 OUTMI(0XC0);
154 1 OUTSI(0X00);
155 1 OUTSI(0XC0);
156 1
157 1 OUTMI(0XAF);
158 1 OUTSI(0XAF);
159 1
160 1 }
161 /*
162 函数说明:同时设置主从显示页为0-3页。(内函数,私有,用户不直接调用)
163 ------------------------------------------------------------------------
164 */
165 void SetPage(uchar page0,uchar page1)
166 {
167 1 OUTMI(0xB8|page1);OUTSI(0xB8|page0);
168 1 }
169
170 /*
171 --------------------------------------------------------------------------------
172 函数说明:同时设置主从列地址为0-121。(内函数,私有,用户不直接调用)
173 --------------------------------------------------------------------------------
174 */
175 void SetAddress(uchar address0,uchar address1)
176 {
177 1 OUTMI(address1);OUTSI(address0);
178 1 }
179
C51 COMPILER V7.07 12232 10/31/2006 14:32:12 PAGE 4
180 /*
181 --------------------------------------------------------------------------------
182
183 调用方式:void PutChar0(uchar ch)
184 函数说明:在右页当前地址画一个字节8个点。(内函数,私有,用户不直接调用)
185 --------------------------------------------------------------------------------
186 -*/
187 void PutCharR(unsigned char ch_buffer1)//unsigned char ch_buffer
188 {
189 1 OUTSD(ch_buffer1);
190 1 }
191
192 /*
193 --------------------------------------------------------------------------------
194
195 调用方式:void PutChar1(uchar ch)
196 函数说明:在左页当前地址画一个字节8个点。(内函数,私有,用户不直接调用)
197 --------------------------------------------------------------------------------
198 -*/
199 void PutCharL(unsigned char ch_buffer2)//unsigned char ch_buffer
200 {
201 1 OUTMD(ch_buffer2);
202 1 }
203
204 /*
205 --------------------------------------------------------------------------------
206
207 调用方式:void DrawBmp(bit layer,uchar width,uchar *bmp)
208 函数说明:画一个图,layer表示上下层,width是图形的宽,高都是16,bmp是
209 图形指针
210 使用zimo3软件,纵向取模,字节倒序/240字节
211 --------------------------------------------------------------------------------
212 -*/
213 void DrawBmp(bit layer,uchar width,uchar *bmp)
214 {
215 1 uchar x,address,i=0; //address表示显存的物理地址
216 1 uchar page=0; //page表示上下两页
217 1 bit window=0; //window表示左右两页
218 1 //putcharR //右边
219 1 //putcharL //左边
220 1
221 1 for (x=width;x>1;x--)
222 1 {
223 2 if (i>60) {window=1;address=i%61;}
224 2 else address=i;
225 2
226 2 if(layer==0) //显示一行八个字
227 2 {
228 3 SetPage(0,0);
229 3 SetAddress(address,address);
230 3 if(window==1)PutCharR(bmp[i]);
231 3 else PutCharL(bmp[i]);
232 3 SetPage(1,1);
233 3 SetAddress(address,address);
234 3 if(window==1)PutCharR(bmp[i+width]);
235 3 else PutCharL(bmp[i+width]);
236 3 }
237 2 else
238 2 { //显示第二行八个汉字
239 3 SetPage(2,2);
240 3 SetAddress(address,address);
241 3 if(window==1)PutCharR(bmp[i]);
C51 COMPILER V7.07 12232 10/31/2006 14:32:12 PAGE 5
242 3 else PutCharL(bmp[i]);
243 3 SetPage(3,3);
244 3 SetAddress(address,address);
245 3 if(window==1)PutCharR(bmp[i+width]);
246 3 else PutCharL(bmp[i+width]);
247 3 }
248 2 i++;
249 2
250 2 }
251 1 }
252
253
254 /*
255 --------------------------------------------------------------------------------
256
257 调用方式:void clrscr(void)
258 函数说明:清屏
259 --------------------------------------------------------------------------------
260 -*/
261 void clrscr(void)
262 {
263 1 uchar i;
264 1 uchar page;
265 1 for (page=0;page<4;page++)
266 1 {
267 2 SetPage(page,page);
268 2 SetAddress(0,0);
269 2 for (i=0;i<61;i++){PutCharR(0);PutCharL(0);}
270 2 }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -