)7HG1`PAQ]U13JZ3ETZUJ1C.png (83.07 KB, 下載次數(shù): 54)
下載附件
2022-4-25 21:28 上傳
- #include "oled.h"
- #include "oledfont.h"
- // OLED的I2C接口定義
- sbit OLED_SCL = P2^1; //時鐘SCL
- sbit OLED_SDIN = P2^0; //數(shù)據(jù)SDA
- /**********************************************
- //IIC Start
- **********************************************/
- void IIC_Start()
- {
- OLED_SCLK_Set();
- OLED_SDIN_Set();
- OLED_SDIN_Clr();
- OLED_SCLK_Clr();
- }
- /**********************************************
- //IIC Stop
- **********************************************/
- void IIC_Stop()
- {
- OLED_SCLK_Set();
- // OLED_SCLK_Clr();
- OLED_SDIN_Clr();
- OLED_SDIN_Set();
-
- }
- void IIC_Wait_Ack()
- {
- //GPIOB->CRH &= 0XFFF0FFFF; //設置PB12為上拉輸入模式
- //GPIOB->CRH |= 0x00080000;
- // OLED_SDA = 1;
- // delay_us(1);
- //OLED_SCL = 1;
- //delay_us(50000);
- /* while(1)
- {
- if(!OLED_SDA) //判斷是否接收到OLED 應答信號
- {
- //GPIOB->CRH &= 0XFFF0FFFF; //設置PB12為通用推免輸出模式
- //GPIOB->CRH |= 0x00030000;
- return;
- }
- }
- */
- OLED_SCLK_Set() ;
- OLED_SCLK_Clr();
- }
- /**********************************************
- // IIC Write byte
- **********************************************/
- void Write_IIC_Byte(unsigned char IIC_Byte)
- {
- unsigned char i;
- unsigned char m,da;
- da=IIC_Byte;
- OLED_SCLK_Clr();
- for(i=0;i<8;i++)
- {
- m=da;
- // OLED_SCLK_Clr();
- m=m&0x80;
- if(m==0x80)
- {OLED_SDIN_Set();}
- else OLED_SDIN_Clr();
- da=da<<1;
- OLED_SCLK_Set();
- OLED_SCLK_Clr();
- }
- }
- /**********************************************
- // IIC Write Command
- **********************************************/
- void Write_IIC_Command(unsigned char IIC_Command)
- {
- IIC_Start();
- Write_IIC_Byte(0x78); //Slave address,SA0=0
- IIC_Wait_Ack();
- Write_IIC_Byte(0x00); //write command
- IIC_Wait_Ack();
- Write_IIC_Byte(IIC_Command);
- IIC_Wait_Ack();
- IIC_Stop();
- }
- /**********************************************
- // IIC Write Data
- **********************************************/
- void Write_IIC_Data(unsigned char IIC_Data)
- {
- IIC_Start();
- Write_IIC_Byte(0x78); //D/C#=0; R/W#=0
- IIC_Wait_Ack();
- Write_IIC_Byte(0x40); //write data
- IIC_Wait_Ack();
- Write_IIC_Byte(IIC_Data);
- IIC_Wait_Ack();
- IIC_Stop();
- }
- void OLED_WR_Byte(unsigned dat,unsigned cmd)
- {
- if(cmd)
- {
- Write_IIC_Data(dat);
-
- }
- else {
- Write_IIC_Command(dat);
-
- }
- }
- //坐標設置
- void OLED_Set_Pos(unsigned char x, unsigned char y)
- {
- OLED_WR_Byte(0xb0+y, OLED_CMD);
- OLED_WR_Byte(((x&0xf0)>>4)|0x10, OLED_CMD);
- OLED_WR_Byte((x&0x0f), OLED_CMD);
- }
-
- //開啟OLED顯示
- void OLED_Display_On(void)
- {
- OLED_WR_Byte(0X8D,OLED_CMD); //SET DCDC命令
- OLED_WR_Byte(0X14,OLED_CMD); //DCDC ON
- OLED_WR_Byte(0XAF,OLED_CMD); //DISPLAY ON
- }
- //關閉OLED顯示
- void OLED_Display_Off(void)
- {
- OLED_WR_Byte(0X8D,OLED_CMD); //SET DCDC命令
- OLED_WR_Byte(0X10,OLED_CMD); //DCDC OFF
- OLED_WR_Byte(0XAE,OLED_CMD); //DISPLAY OFF
- }
- //清屏函數(shù),清完屏,整個屏幕是黑色的!和沒點亮一樣!!!
- void OLED_Clear(void)
- {
- u8 i,n;
- for(i=0;i<8;i++)
- {
- OLED_WR_Byte (0xb0+i,OLED_CMD); //設置頁地址(0~7)
- OLED_WR_Byte (0x00,OLED_CMD); //設置顯示位置—列低地址
- OLED_WR_Byte (0x10,OLED_CMD); //設置顯示位置—列高地址
- for(n=0;n<128;n++)
- OLED_WR_Byte(0,OLED_DATA);
- } //更新顯示
- }
- void OLED_On(void)
- {
- u8 i,n;
- for(i=0;i<8;i++)
- {
- OLED_WR_Byte (0xb0+i,OLED_CMD); //設置頁地址(0~7)
- OLED_WR_Byte (0x00,OLED_CMD); //設置顯示位置—列低地址
- OLED_WR_Byte (0x10,OLED_CMD); //設置顯示位置—列高地址
- for(n=0;n<128;n++)
- OLED_WR_Byte(0x00, OLED_DATA);
- } //更新顯示
- }
- //在指定位置顯示一個字符,包括部分字符
- //x:0~127
- //y:0~63
- //mode:0,反白顯示;1,正常顯示
- //size:選擇字體 16/12
- void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 Char_Size)
- {
- unsigned char c = 0, i = 0;
-
- c = chr - ' '; //得到偏移后的值
- if (x > Max_Column-1)
- {
- x = 0;
- y = y + 2;
- }
- if (Char_Size == 16)
- {
- OLED_Set_Pos(x, y);
- for(i=0; i<8; i++)
- OLED_WR_Byte(F8X16[c*16+i], OLED_DATA);
- OLED_Set_Pos(x, y + 1);
- for(i=0; i<8; i++)
- OLED_WR_Byte(F8X16[c*16+i+8], OLED_DATA);
- }
- else
- {
- OLED_Set_Pos(x, y);
- for(i=0; i<6; i++)
- OLED_WR_Byte(F6x8[c][i], OLED_DATA);
- }
- }
-
- //顯示一個字符號串
- void OLED_ShowString(u8 x,u8 y,u8 *chr,u8 Char_Size)
- {
- unsigned char j=0;
- while (chr[j]!='\0')
- { OLED_ShowChar(x,y,chr[j],Char_Size);
- x+=8;
- if(x>120){x=0;y+=2;}
- j++;
- }
- }
- //顯示漢字
- void OLED_ShowCHinese(u8 x, u8 y, u8 no)
- {
- u8 t, adder = 0;
- OLED_Set_Pos(x, y);
- for(t=0;t<16;t++)
- {
- OLED_WR_Byte(Hzk[no][t], OLED_DATA);
- adder += 1;
- }
- OLED_Set_Pos(x, y+1);
- for(t=0; t<16; t++)
- {
- OLED_WR_Byte(Hzk[no][t+16], OLED_DATA);
- adder += 1;
- }
- }
- /***********功能描述:顯示顯示BMP圖片128×64起始點坐標(x,y),x的范圍0~127,y為頁的范圍0~7*****************/
- void OLED_DrawBMP(u8 x0, u8 y0, u8 x1, u8 y1, u8 BMP[])
- {
- unsigned int j = 0;
- unsigned char x, y;
-
- for (y=y0; y<y1; y++)
- {
- OLED_Set_Pos(x0, y);
- for (x=x0; x<x1; x++)
- {
- OLED_WR_Byte(BMP[j++], OLED_DATA);
- }
- }
- }
- //初始化SSD1306
- void OLED_Init(void)
- {
- OLED_WR_Byte(0xAE,OLED_CMD);//--display off
- OLED_WR_Byte(0x00,OLED_CMD);//---set low column address
- OLED_WR_Byte(0x10,OLED_CMD);//---set high column address
- OLED_WR_Byte(0x40,OLED_CMD);//--set start line address
- OLED_WR_Byte(0xB0,OLED_CMD);//--set page address
- OLED_WR_Byte(0x81,OLED_CMD); // contract control
- OLED_WR_Byte(0xFF,OLED_CMD);//--128
- OLED_WR_Byte(0xA1,OLED_CMD);//set segment remap
- OLED_WR_Byte(0xA6,OLED_CMD);//--normal / reverse
- OLED_WR_Byte(0xA8,OLED_CMD);//--set multiplex ratio(1 to 64)
- OLED_WR_Byte(0x3F,OLED_CMD);//--1/32 duty
- OLED_WR_Byte(0xC8,OLED_CMD);//Com scan direction
- OLED_WR_Byte(0xD3,OLED_CMD);//-set display offset
- OLED_WR_Byte(0x00,OLED_CMD);//
-
- OLED_WR_Byte(0xD5,OLED_CMD);//set osc division
- OLED_WR_Byte(0x80,OLED_CMD);//
-
- OLED_WR_Byte(0xD8,OLED_CMD);//set area color mode off
- OLED_WR_Byte(0x05,OLED_CMD);//
-
- OLED_WR_Byte(0xD9,OLED_CMD);//Set Pre-Charge Period
- OLED_WR_Byte(0xF1,OLED_CMD);//
-
- OLED_WR_Byte(0xDA,OLED_CMD);//set com pin configuartion
- OLED_WR_Byte(0x12,OLED_CMD);//
-
- OLED_WR_Byte(0xDB,OLED_CMD);//set Vcomh
- OLED_WR_Byte(0x30,OLED_CMD);//
-
- OLED_WR_Byte(0x8D,OLED_CMD);//set charge pump enable
- OLED_WR_Byte(0x14,OLED_CMD);//
-
- OLED_WR_Byte(0xAF,OLED_CMD);//--turn on oled panel
- }
復制代碼
Keil代碼下載:
51單片機OLCD12864顯示文字.rar
(45.17 KB, 下載次數(shù): 27)
2022-4-25 21:28 上傳
點擊文件名下載附件
51單片機OLCD12864顯示文字 下載積分: 黑幣 -5
|