C51 COMPILER V9.52.0.0 OLED 05/03/2018 10:40:51 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 #include "oled.h" 3 //#include "stdlib.h" 4 #include "oledfont.h" 5 //#include "delay.h" 6 //OLED的显存 7 //存放格式如下. 8 //[0]0 1 2 3 ... 127 9 //[1]0 1 2 3 ... 127 10 //[2]0 1 2 3 ... 127 11 //[3]0 1 2 3 ... 127 12 //[4]0 1 2 3 ... 127 13 //[5]0 1 2 3 ... 127 14 //[6]0 1 2 3 ... 127 15 //[7]0 1 2 3 ... 127 16 void delay_ms(unsigned int ms) 17 { 18 1 unsigned int a; 19 1 while(ms) 20 1 { 21 2 a=1800; 22 2 while(a--); 23 2 ms--; 24 2 } 25 1 return; 26 1 } 27 /********************************************** 28 //IIC Start 29 **********************************************/ 30 void IIC_Start() 31 { 32 1 33 1 OLED_SCLK_Set() ; 34 1 OLED_SDIN_Set(); 35 1 OLED_SDIN_Clr(); 36 1 OLED_SCLK_Clr(); 37 1 } 38 39 /********************************************** 40 //IIC Stop 41 **********************************************/ 42 void IIC_Stop() 43 { 44 1 OLED_SCLK_Set() ; 45 1 // OLED_SCLK_Clr(); 46 1 OLED_SDIN_Clr(); 47 1 OLED_SDIN_Set(); 48 1 49 1 } 50 51 void IIC_Wait_Ack() 52 { 53 1 54 1 //GPIOB->CRH &= 0XFFF0FFFF; //设置PB12为上拉输入模式 C51 COMPILER V9.52.0.0 OLED 05/03/2018 10:40:51 PAGE 2 55 1 //GPIOB->CRH |= 0x00080000; 56 1 // OLED_SDA = 1; 57 1 // delay_us(1); 58 1 //OLED_SCL = 1; 59 1 //delay_us(50000); 60 1 /* while(1) 61 1 { 62 1 if(!OLED_SDA) //判断是否接收到OLED 应答信号 63 1 { 64 1 //GPIOB->CRH &= 0XFFF0FFFF; //设置PB12为通用推免输出模式 65 1 //GPIOB->CRH |= 0x00030000; 66 1 return; 67 1 } 68 1 } 69 1 */ 70 1 OLED_SCLK_Set() ; 71 1 OLED_SCLK_Clr(); 72 1 } 73 /********************************************** 74 // IIC Write byte 75 **********************************************/ 76 77 void Write_IIC_Byte(unsigned char IIC_Byte) 78 { 79 1 unsigned char i; 80 1 unsigned char m,da; 81 1 da=IIC_Byte; 82 1 OLED_SCLK_Clr(); 83 1 for(i=0;i<8;i++) 84 1 { 85 2 m=da; 86 2 // OLED_SCLK_Clr(); 87 2 m=m&0x80; 88 2 if(m==0x80) 89 2 {OLED_SDIN_Set();} 90 2 else OLED_SDIN_Clr(); 91 2 da=da<<1; 92 2 OLED_SCLK_Set(); 93 2 OLED_SCLK_Clr(); 94 2 } 95 1 96 1 97 1 } 98 /********************************************** 99 // IIC Write Command 100 **********************************************/ 101 void Write_IIC_Command(unsigned char IIC_Command) 102 { 103 1 IIC_Start(); 104 1 Write_IIC_Byte(0x78); //Slave address,SA0=0 105 1 IIC_Wait_Ack(); 106 1 Write_IIC_Byte(0x00); //write command 107 1 IIC_Wait_Ack(); 108 1 Write_IIC_Byte(IIC_Command); 109 1 IIC_Wait_Ack(); 110 1 IIC_Stop(); 111 1 } 112 /********************************************** 113 // IIC Write Data 114 **********************************************/ 115 void Write_IIC_Data(unsigned char IIC_Data) 116 { C51 COMPILER V9.52.0.0 OLED 05/03/2018 10:40:51 PAGE 3 117 1 IIC_Start(); 118 1 Write_IIC_Byte(0x78); //D/C#=0; R/W#=0 119 1 IIC_Wait_Ack(); 120 1 Write_IIC_Byte(0x40); //write data 121 1 IIC_Wait_Ack(); 122 1 Write_IIC_Byte(IIC_Data); 123 1 IIC_Wait_Ack(); 124 1 IIC_Stop(); 125 1 } 126 void OLED_WR_Byte(unsigned dat,unsigned cmd) 127 { *** WARNING C235 IN LINE 127 OF SRC\oled.c: parameter 1: different types *** WARNING C235 IN LINE 127 OF SRC\oled.c: parameter 2: different types 128 1 if(cmd) 129 1 { 130 2 131 2 Write_IIC_Data(dat); 132 2 133 2 } 134 1 else { 135 2 Write_IIC_Command(dat); 136 2 137 2 } 138 1 139 1 140 1 } 141 void OLED_Set_Pos(unsigned char x, unsigned char y) 142 { 143 1 OLED_WR_Byte(0xb0+y,OLED_CMD); 144 1 OLED_WR_Byte((((x+2)&0xf0)>>4)|0x10,OLED_CMD); 145 1 OLED_WR_Byte(((x+2)&0x0f),OLED_CMD); 146 1 } 147 //开启OLED显示 148 void OLED_Display_On(void) 149 { 150 1 OLED_WR_Byte(0X8D,OLED_CMD); //SET DCDC命令 151 1 OLED_WR_Byte(0X14,OLED_CMD); //DCDC ON 152 1 OLED_WR_Byte(0XAF,OLED_CMD); //DISPLAY ON 153 1 } 154 //关闭OLED显示 155 void OLED_Display_Off(void) 156 { 157 1 OLED_WR_Byte(0X8D,OLED_CMD); //SET DCDC命令 158 1 OLED_WR_Byte(0X10,OLED_CMD); //DCDC OFF 159 1 OLED_WR_Byte(0XAE,OLED_CMD); //DISPLAY OFF 160 1 } 161 //清屏函数,清完屏,整个屏幕是黑色的!和没点亮一样!!! 162 void OLED_Clear(void) 163 { 164 1 u8 i,n; 165 1 for(i=0;i<8;i++) 166 1 { 167 2 OLED_WR_Byte (0xb0+i,OLED_CMD); //设置页地址(0~7) 168 2 OLED_WR_Byte (0x02,OLED_CMD); //设置显示位置—列低地址 169 2 OLED_WR_Byte (0x10,OLED_CMD); //设置显示位置—列高地址 170 2 for(n=0;n<128;n++)OLED_WR_Byte(0,OLED_DATA); 171 2 } //更新显示 172 1 } 173 174 175 //在指定位置显示一个字符,包括部分字符 176 //x:0~127 C51 COMPILER V9.52.0.0 OLED 05/03/2018 10:40:51 PAGE 4 177 //y:0~63 178 //mode:0,反白显示;1,正常显示 179 //size:选择字体 16/12 180 void OLED_ShowChar(u8 x,u8 y,u8 chr) 181 { 182 1 unsigned char c=0,i=0; 183 1 c=chr-' ';//得到偏移后的值 184 1 if(x>Max_Column-1){x=0;y=y+2;} 185 1 if(SIZE ==16) 186 1 { 187 2 OLED_Set_Pos(x,y); 188 2 for(i=0;i<8;i++) 189 2 OLED_WR_Byte(F8X16[c*16+i],OLED_DATA); 190 2 OLED_Set_Pos(x,y+1); 191 2 for(i=0;i<8;i++) 192 2 OLED_WR_Byte(F8X16[c*16+i+8],OLED_DATA); 193 2 } 194 1 else { 195 2 OLED_Set_Pos(x,y+1); 196 2 for(i=0;i<6;i++) 197 2 OLED_WR_Byte(F6x8[c][i],OLED_DATA); 198 2 199 2 } 200 1 } 201 //m^n函数 202 u32 oled_pow(u8 m,u8 n) 203 { 204 1 u32 result=1; 205 1 while(n--)result*=m; 206 1 return result; 207 1 } 208 //显示2个数字 209 //x,y :起点坐标 210 //len :数字的位数 211 //size:字体大小 212 //mode:模式 0,填充模式;1,叠加模式 213 //num:数值(0~4294967295); 214 void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size2) 215 { 216 1 u8 t,temp; 217 1 u8 enshow=0; 218 1 for(t=0;t120){x=0;y+=2;} 241 2 j++; 242 2 } 243 1 } 244 //显示汉字 245 void OLED_ShowCHinese(u8 x,u8 y,u8 no) 246 { 247 1 u8 t,adder=0; 248 1 OLED_Set_Pos(x,y); 249 1 for(t=0;t<16;t++) 250 1 { 251 2 OLED_WR_Byte(Hzk[2*no][t],OLED_DATA); 252 2 adder+=1; 253 2 } 254 1 OLED_Set_Pos(x,y+1); 255 1 for(t=0;t<16;t++) 256 1 { 257 2 OLED_WR_Byte(Hzk[2*no+1][t],OLED_DATA); 258 2 adder+=1; 259 2 } 260 1 } 261 /***********功能描述:显示显示BMP图片128×64起始点坐标(x,y),x的范围0~127,y为页的范围0~7**************** -*/ 262 void OLED_DrawBMP(unsigned char x0, unsigned char y0,unsigned char x1, unsigned char y1,unsigned char BMP[ -]) 263 { 264 1 unsigned int j=0; 265 1 unsigned char x,y; 266 1 267 1 if(y1%8==0) y=y1/8; 268 1 else y=y1/8+1; 269 1 for(y=y0;y