stm32_ota/OLED显示屏资料/03中景园电子1.3英寸OLED显示屏测试程序/02中景园电子1.3英寸OLED显示屏_C51系列_IIC_例程推荐使用/oled.lst

463 lines
17 KiB
Plaintext
Raw Normal View History

2024-12-17 20:03:43 +08:00
C51 COMPILER V9.52.0.0 OLED 05/03/2018 10:37:07 PAGE 1
C51 COMPILER V9.52.0.0, COMPILATION OF MODULE OLED
OBJECT MODULE PLACED IN oled.obj
COMPILER INVOKED BY: D:\KEIL_51\C51\BIN\C51.EXE SRC\oled.c BROWSE INCDIR(.\SRC) DEBUG OBJECTEXTEND PRINT(.\oled.lst) TAB
-S(2) OBJECT(oled.obj)
line level source
1 //////////////////////////////////////////////////////////////////////////////////
2 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB>ѧϰʹ<CFB0>ã<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD><C9A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><CEBA><EFBFBD>;
3 //<2F>о<EFBFBD>԰<EFBFBD><D4B0><EFBFBD><EFBFBD>
4 //<2F><><EFBFBD>̵<EFBFBD>ַ<EFBFBD><D6B7>http://shop73023976.taobao.com/?spm=2013.1.0.0.M4PqC2
5 //
6 // <20><> <20><> <20><> : main.c
7 // <20><> <20><> <20><> : v2.0
8 // <20><> <20><> : HuangKai
9 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : 2014-0101
10 // <20><><EFBFBD><EFBFBD><EFBFBD>޸<EFBFBD> :
11 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : OLED 4<>ӿ<EFBFBD><D3BF><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>(51ϵ<31><CFB5>)
12 // ˵<><CBB5>:
13 // ----------------------------------------------------------------
14 // GND <20><>Դ<EFBFBD><D4B4>
15 // VCC <20><>5V<35><56>3.3v<EFBFBD><EFBFBD>Դ
16 // D0 P1^0<><30>SCL<43><4C>
17 // D1 P1^1<><31>SDA<44><41>
18 // RES <20><>P12
19 // DC <20><>P13
20 // CS <20><>P14
21 // ----------------------------------------------------------------
22 // <20>޸<EFBFBD><DEB8><EFBFBD>ʷ :
23 // <20><> <20><> :
24 // <20><> <20><> : HuangKai
25 // <20>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD> : <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
26 //<2F><>Ȩ<EFBFBD><C8A8><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD><D8BE><EFBFBD>
27 //Copyright(C) <20>о<EFBFBD>԰<EFBFBD><D4B0><EFBFBD><EFBFBD>2014/3/16
28 //All rights reserved
29 //******************************************************************************/<2F><>
30 #include "oled.h"
31 //#include "stdlib.h"
32 #include "oledfont.h"
33 //#include "delay.h"
34 //OLED<45><44><EFBFBD>Դ<EFBFBD>
35 //<2F><><EFBFBD>Ÿ<EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>.
36 //[0]0 1 2 3 ... 127
37 //[1]0 1 2 3 ... 127
38 //[2]0 1 2 3 ... 127
39 //[3]0 1 2 3 ... 127
40 //[4]0 1 2 3 ... 127
41 //[5]0 1 2 3 ... 127
42 //[6]0 1 2 3 ... 127
43 //[7]0 1 2 3 ... 127
44 void delay_ms(unsigned int ms)
45 {
46 1 unsigned int a;
47 1 while(ms)
48 1 {
49 2 a=1800;
50 2 while(a--);
51 2 ms--;
52 2 }
53 1 return;
54 1 }
C51 COMPILER V9.52.0.0 OLED 05/03/2018 10:37:07 PAGE 2
55 /**********************************************
56 //IIC Start
57 **********************************************/
58 void IIC_Start()
59 {
60 1
61 1 OLED_SCLK_Set() ;
62 1 OLED_SDIN_Set();
63 1 OLED_SDIN_Clr();
64 1 OLED_SCLK_Clr();
65 1 }
66
67 /**********************************************
68 //IIC Stop
69 **********************************************/
70 void IIC_Stop()
71 {
72 1 OLED_SCLK_Set() ;
73 1 // OLED_SCLK_Clr();
74 1 OLED_SDIN_Clr();
75 1 OLED_SDIN_Set();
76 1
77 1 }
78
79 void IIC_Wait_Ack()
80 {
81 1
82 1 //GPIOB->CRH &= 0XFFF0FFFF; //<2F><><EFBFBD><EFBFBD>PB12Ϊ<32><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
83 1 //GPIOB->CRH |= 0x00080000;
84 1 // OLED_SDA = 1;
85 1 // delay_us(1);
86 1 //OLED_SCL = 1;
87 1 //delay_us(50000);
88 1 /* while(1)
89 1 {
90 1 if(!OLED_SDA) //<2F>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>յ<EFBFBD>OLED Ӧ<><D3A6><EFBFBD>ź<EFBFBD>
91 1 {
92 1 //GPIOB->CRH &= 0XFFF0FFFF; //<2F><><EFBFBD><EFBFBD>PB12Ϊͨ<CEAA><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
93 1 //GPIOB->CRH |= 0x00030000;
94 1 return;
95 1 }
96 1 }
97 1 */
98 1 OLED_SCLK_Set() ;
99 1 OLED_SCLK_Clr();
100 1 }
101 /**********************************************
102 // IIC Write byte
103 **********************************************/
104
105 void Write_IIC_Byte(unsigned char IIC_Byte)
106 {
107 1 unsigned char i;
108 1 unsigned char m,da;
109 1 da=IIC_Byte;
110 1 OLED_SCLK_Clr();
111 1 for(i=0;i<8;i++)
112 1 {
113 2 m=da;
114 2 // OLED_SCLK_Clr();
115 2 m=m&0x80;
116 2 if(m==0x80)
C51 COMPILER V9.52.0.0 OLED 05/03/2018 10:37:07 PAGE 3
117 2 {OLED_SDIN_Set();}
118 2 else OLED_SDIN_Clr();
119 2 da=da<<1;
120 2 OLED_SCLK_Set();
121 2 OLED_SCLK_Clr();
122 2 }
123 1
124 1
125 1 }
126 /**********************************************
127 // IIC Write Command
128 **********************************************/
129 void Write_IIC_Command(unsigned char IIC_Command)
130 {
131 1 IIC_Start();
132 1 Write_IIC_Byte(0x78); //Slave address,SA0=0
133 1 IIC_Wait_Ack();
134 1 Write_IIC_Byte(0x00); //write command
135 1 IIC_Wait_Ack();
136 1 Write_IIC_Byte(IIC_Command);
137 1 IIC_Wait_Ack();
138 1 IIC_Stop();
139 1 }
140 /**********************************************
141 // IIC Write Data
142 **********************************************/
143 void Write_IIC_Data(unsigned char IIC_Data)
144 {
145 1 IIC_Start();
146 1 Write_IIC_Byte(0x78); //D/C#=0; R/W#=0
147 1 IIC_Wait_Ack();
148 1 Write_IIC_Byte(0x40); //write data
149 1 IIC_Wait_Ack();
150 1 Write_IIC_Byte(IIC_Data);
151 1 IIC_Wait_Ack();
152 1 IIC_Stop();
153 1 }
154 void OLED_WR_Byte(unsigned dat,unsigned cmd)
155 {
156 1 if(cmd)
157 1 {
158 2
159 2 Write_IIC_Data(dat);
160 2
161 2 }
162 1 else {
163 2 Write_IIC_Command(dat);
164 2
165 2 }
166 1
167 1
168 1 }
169
170 /********************************************
171 // fill_Picture
172 ********************************************/
173 void fill_picture(unsigned char fill_Data)
174 {
175 1 unsigned char m,n;
176 1 for(m=0;m<8;m++)
177 1 {
178 2 OLED_WR_Byte(0xb0+m,0); //page0-page1
C51 COMPILER V9.52.0.0 OLED 05/03/2018 10:37:07 PAGE 4
179 2 OLED_WR_Byte(0x02,0); //low column start address
180 2 OLED_WR_Byte(0x10,0); //high column start address
181 2 for(n=0;n<128;n++)
182 2 {
183 3 OLED_WR_Byte(fill_Data,1);
184 3 }
185 2 }
186 1 }
187
188
189 /***********************Delay****************************************/
190 void Delay_50ms(unsigned int Del_50ms)
191 {
192 1 unsigned int m;
193 1 for(;Del_50ms>0;Del_50ms--)
194 1 for(m=6245;m>0;m--);
195 1 }
196
197 void Delay_1ms(unsigned int Del_1ms)
198 {
199 1 unsigned char j;
200 1 while(Del_1ms--)
201 1 {
202 2 for(j=0;j<123;j++);
203 2 }
204 1 }
205
206 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
207
208 void OLED_Set_Pos(unsigned char x, unsigned char y)
209 {
210 1 OLED_WR_Byte(0xb0+y,OLED_CMD);
211 1 OLED_WR_Byte((((x+2)&0xf0)>>4)|0x10,OLED_CMD);
212 1 OLED_WR_Byte(((x+2)&0x0f),OLED_CMD);
213 1 }
214 //<2F><><EFBFBD><EFBFBD>OLED<45><44>ʾ
215 void OLED_Display_On(void)
216 {
217 1 OLED_WR_Byte(0X8D,OLED_CMD); //SET DCDC<44><43><EFBFBD><EFBFBD>
218 1 OLED_WR_Byte(0X14,OLED_CMD); //DCDC ON
219 1 OLED_WR_Byte(0XAF,OLED_CMD); //DISPLAY ON
220 1 }
221 //<2F>ر<EFBFBD>OLED<45><44>ʾ
222 void OLED_Display_Off(void)
223 {
224 1 OLED_WR_Byte(0X8D,OLED_CMD); //SET DCDC<44><43><EFBFBD><EFBFBD>
225 1 OLED_WR_Byte(0X10,OLED_CMD); //DCDC OFF
226 1 OLED_WR_Byte(0XAE,OLED_CMD); //DISPLAY OFF
227 1 }
228 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD>Ǻ<EFBFBD>ɫ<EFBFBD><C9AB>!<21><>û<EFBFBD><C3BB><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>!!!
229 void OLED_Clear(void)
230 {
231 1 u8 i,n;
232 1 for(i=0;i<8;i++)
233 1 {
234 2 OLED_WR_Byte (0xb0+i,OLED_CMD); //<2F><><EFBFBD><EFBFBD>ҳ<EFBFBD><D2B3>ַ<EFBFBD><D6B7>0~7<><37>
235 2 OLED_WR_Byte (0x02,OLED_CMD); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾλ<CABE>á<EFBFBD><C3A1>е͵<D0B5>ַ
236 2 OLED_WR_Byte (0x10,OLED_CMD); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾλ<CABE>á<EFBFBD><C3A1>иߵ<D0B8>ַ
237 2 for(n=0;n<128;n++)OLED_WR_Byte(0,OLED_DATA);
238 2 } //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
239 1 }
240 void OLED_On(void)
C51 COMPILER V9.52.0.0 OLED 05/03/2018 10:37:07 PAGE 5
241 {
242 1 u8 i,n;
243 1 for(i=0;i<8;i++)
244 1 {
245 2 OLED_WR_Byte (0xb0+i,OLED_CMD); //<2F><><EFBFBD><EFBFBD>ҳ<EFBFBD><D2B3>ַ<EFBFBD><D6B7>0~7<><37>
246 2 OLED_WR_Byte (0x02,OLED_CMD); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾλ<CABE>á<EFBFBD><C3A1>е͵<D0B5>ַ
247 2 OLED_WR_Byte (0x10,OLED_CMD); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾλ<CABE>á<EFBFBD><C3A1>иߵ<D0B8>ַ
248 2 for(n=0;n<128;n++)OLED_WR_Byte(1,OLED_DATA);
249 2 } //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
250 1 }
251 //<2F><>ָ<EFBFBD><D6B8>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>ʾһ<CABE><D2BB><EFBFBD>ַ<EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD>
252 //x:0~127
253 //y:0~63
254 //mode:0,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ;1,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
255 //size:ѡ<><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 16/12
256 void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 Char_Size)
257 {
258 1 unsigned char c=0,i=0;
259 1 c=chr-' ';//<2F>õ<EFBFBD>ƫ<EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD>ֵ
260 1 if(x>Max_Column-1){x=0;y=y+2;}
261 1 if(Char_Size ==16)
262 1 {
263 2 OLED_Set_Pos(x,y);
264 2 for(i=0;i<8;i++)
265 2 OLED_WR_Byte(F8X16[c*16+i],OLED_DATA);
266 2 OLED_Set_Pos(x,y+1);
267 2 for(i=0;i<8;i++)
268 2 OLED_WR_Byte(F8X16[c*16+i+8],OLED_DATA);
269 2 }
270 1 else {
271 2 OLED_Set_Pos(x,y);
272 2 for(i=0;i<6;i++)
273 2 OLED_WR_Byte(F6x8[c][i],OLED_DATA);
274 2
275 2 }
276 1 }
277 //m^n<><6E><EFBFBD><EFBFBD>
278 u32 oled_pow(u8 m,u8 n)
279 {
280 1 u32 result=1;
281 1 while(n--)result*=m;
282 1 return result;
283 1 }
284 //<2F><>ʾ2<CABE><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
285 //x,y :<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
286 //len :<3A><><EFBFBD>ֵ<EFBFBD>λ<EFBFBD><CEBB>
287 //size:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
288 //mode:ģʽ 0,<2C><><EFBFBD><EFBFBD>ģʽ;1,<2C><><EFBFBD><EFBFBD>ģʽ
289 //num:<3A><>ֵ(0~4294967295);
290 void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size2)
291 {
292 1 u8 t,temp;
293 1 u8 enshow=0;
294 1 for(t=0;t<len;t++)
295 1 {
296 2 temp=(num/oled_pow(10,len-t-1))%10;
297 2 if(enshow==0&&t<(len-1))
298 2 {
299 3 if(temp==0)
300 3 {
301 4 OLED_ShowChar(x+(size2/2)*t,y,' ',size2);
302 4 continue;
C51 COMPILER V9.52.0.0 OLED 05/03/2018 10:37:07 PAGE 6
303 4 }else enshow=1;
304 3
305 3 }
306 2 OLED_ShowChar(x+(size2/2)*t,y,temp+'0',size2);
307 2 }
308 1 }
309 //<2F><>ʾһ<CABE><D2BB><EFBFBD>ַ<EFBFBD><D6B7>Ŵ<EFBFBD>
310 void OLED_ShowString(u8 x,u8 y,u8 *chr,u8 Char_Size)
311 {
312 1 unsigned char j=0;
313 1 while (chr[j]!='\0')
314 1 { OLED_ShowChar(x,y,chr[j],Char_Size);
315 2 x+=8;
316 2 if(x>120){x=0;y+=2;}
317 2 j++;
318 2 }
319 1 }
320 //<2F><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
321 void OLED_ShowCHinese(u8 x,u8 y,u8 no)
322 {
323 1 u8 t,adder=0;
324 1 OLED_Set_Pos(x,y);
325 1 for(t=0;t<16;t++)
326 1 {
327 2 OLED_WR_Byte(Hzk[2*no][t],OLED_DATA);
328 2 adder+=1;
329 2 }
330 1 OLED_Set_Pos(x,y+1);
331 1 for(t=0;t<16;t++)
332 1 {
333 2 OLED_WR_Byte(Hzk[2*no+1][t],OLED_DATA);
334 2 adder+=1;
335 2 }
336 1 }
337 /***********<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>ʾBMPͼƬ128<32><38>64<36><34>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(x,y),x<>ķ<EFBFBD>Χ0<CEA7><30>127<32><37>yΪҳ<CEAA>ķ<EFBFBD>Χ0<CEA7><30>7****************
-*/
338 void OLED_DrawBMP(unsigned char x0, unsigned char y0,unsigned char x1, unsigned char y1,unsigned char BMP[
-])
339 {
340 1 unsigned int j=0;
341 1 unsigned char x,y;
342 1
343 1 if(y1%8==0) y=y1/8;
344 1 else y=y1/8+1;
345 1 for(y=y0;y<y1;y++)
346 1 {
347 2 OLED_Set_Pos(x0,y);
348 2 for(x=x0;x<x1;x++)
349 2 {
350 3 OLED_WR_Byte(BMP[j++],OLED_DATA);
351 3 }
352 2 }
353 1 }
354
355 //<2F><>ʼ<EFBFBD><CABC>SSD1306
356 void OLED_Init(void)
357 {
358 1
359 1 OLED_WR_Byte(0xAE,OLED_CMD);//--display off
360 1 OLED_WR_Byte(0x02,OLED_CMD);//---set low column address
361 1 OLED_WR_Byte(0x10,OLED_CMD);//---set high column address
362 1 OLED_WR_Byte(0x40,OLED_CMD);//--set start line address
C51 COMPILER V9.52.0.0 OLED 05/03/2018 10:37:07 PAGE 7
363 1 OLED_WR_Byte(0xB0,OLED_CMD);//--set page address
364 1 OLED_WR_Byte(0x81,OLED_CMD); // contract control
365 1 OLED_WR_Byte(0xFF,OLED_CMD);//--128
366 1 OLED_WR_Byte(0xA1,OLED_CMD);//set segment remap
367 1 OLED_WR_Byte(0xA6,OLED_CMD);//--normal / reverse
368 1 OLED_WR_Byte(0xA8,OLED_CMD);//--set multiplex ratio(1 to 64)
369 1 OLED_WR_Byte(0x3F,OLED_CMD);//--1/32 duty
370 1 OLED_WR_Byte(0xC8,OLED_CMD);//Com scan direction
371 1 OLED_WR_Byte(0xD3,OLED_CMD);//-set display offset
372 1 OLED_WR_Byte(0x00,OLED_CMD);//
373 1
374 1 OLED_WR_Byte(0xD5,OLED_CMD);//set osc division
375 1 OLED_WR_Byte(0x80,OLED_CMD);//
376 1
377 1 OLED_WR_Byte(0xD8,OLED_CMD);//set area color mode off
378 1 OLED_WR_Byte(0x05,OLED_CMD);//
379 1
380 1 OLED_WR_Byte(0xD9,OLED_CMD);//Set Pre-Charge Period
381 1 OLED_WR_Byte(0xF1,OLED_CMD);//
382 1
383 1 OLED_WR_Byte(0xDA,OLED_CMD);//set com pin configuartion
384 1 OLED_WR_Byte(0x12,OLED_CMD);//
385 1
386 1 OLED_WR_Byte(0xDB,OLED_CMD);//set Vcomh
387 1 OLED_WR_Byte(0x30,OLED_CMD);//
388 1
389 1 OLED_WR_Byte(0x8D,OLED_CMD);//set charge pump enable
390 1 OLED_WR_Byte(0x14,OLED_CMD);//
391 1
392 1 OLED_WR_Byte(0xAF,OLED_CMD);//--turn on oled panel
393 1 }
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
C51 COMPILER V9.52.0.0 OLED 05/03/2018 10:37:07 PAGE 8
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1251 ----
CONSTANT SIZE = 2520 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 41
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)