網站:21ic.com
![](https://img.21ic.com/weixin/2020/12/EBFnMr.png)
驅動芯片是大神L單點亮SSD1315
![](https://img.21ic.com/weixin/2020/12/f6bEfy.png)
第一步,點亮屏幕:
得到一塊新的屏幕,最重要的就是看能否點亮,點亮了才能使用做各種顯示應用。而這個店家沒有提供驅動代碼,懶得自己寫啊,這種通用的肯定有,I2C很容易GPIO模擬,然后搜其他店家,有不少提供驅動代碼的,下載了移植到我的ML51開發板上試試。下面鏈接是廠家提供的驅動程序。
鏈接: https://pan.baidu.com/s/1jqHcX9fIyKdUirFoZ3qSCA 提取碼: mj6e 復制這段內容后打開百度網盤手機App,操作更方便哦為方便下載,提供其中源碼與取模軟件的本地下載,資料說明看不看無所謂。
//對選用的管腳設置為開漏模式
MFP_P20_GPIO;
MFP_P21_GPIO;
P20_OPENDRAIN_MODE;
P21_OPENDRAIN_MODE;
sbit OLED_SCL=P2^0;//SCL
sbit OLED_SDA=P2^1;//SDA
sbit OLED_RES =P2^2;//RES
unsigned char code Hzk[][32]={
{ 0x00,0x00,0xE0,0x40,0x40,0x40,0x40,0xFC,0x40,0x40,0x40,0x40,0x60,0xE0,0x00,0x00,0x00,0x00,0x07,0x02,0x02,0x02,0x02,0x7F,0x02,0x02,0x02,0x02,0x02,0x07,0x00,0x00},/*"中",0*/
{ 0x00,0x00,0xF8,0x08,0x08,0x28,0x28,0x28,0xE8,0x28,0x28,0x38,0x28,0xF8,0x08,0x00,0x00,0x00,0x7F,0x20,0x20,0x29,0x29,0x29,0x2F,0x29,0x2F,0x2D,0x28,0x7F,0x00,0x00},/*"國",1*/
{ 0x00,0x00,0x00,0xF0,0x20,0x20,0x20,0xFC,0x20,0x20,0x20,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x05,0x05,0x05,0x7F,0x45,0x45,0x45,0x4F,0x40,0x60,0x78,0x60},/*"電",2*/
{ 0x00,0x00,0x10,0x10,0x10,0x10,0x10,0xD0,0x30,0x30,0x10,0x08,0x80,0x80,0x00,0x00,0x01,0x01,0x01,0x01,0x21,0x21,0x41,0x7F,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00},/*"子",3*/
{ 0x00,0x00,0xF8,0x10,0x50,0x90,0x90,0x70,0x70,0x90,0xD0,0x70,0x30,0xF8,0x00,0x00,0x00,0x00,0x7F,0x00,0x08,0x06,0x01,0x1E,0x08,0x06,0x03,0x4E,0x40,0x7F,0x00,0x00},/*"網",4*/
};
//#include "ML51.h"
#include "oled.h"
#include "bmp.h"
int main(void)
{
unsigned char t=' ';
OLED_Init();//初始化OLED
OLED_ColorTurn(0);//0正常顯示,1 反色顯示
OLED_DisplayTurn(0);//0正常顯示 1 屏幕翻轉顯示
while(1)
{
// OLED_DrawBMP(0,0,128,64,BMP1);
// delay_ms(5);
// OLED_Clear();
// OLED_ShowChinese(0,0,0,16);
OLED_ShowChinese(18,0,0,16);//中
OLED_ShowChinese(36,0,1,16);//國
OLED_ShowChinese(54,0,2,16);//電
OLED_ShowChinese(72,0,3,16);//子
OLED_ShowChinese(90,0,4,16);//網
// OLED_ShowChinese(108,0,6,16);
OLED_ShowString(8,2,"bbs.21ic.com",16);
OLED_ShowString(20,4,"2020/11/17",16);
OLED_ShowString(0,6,"ASCII:",16);
OLED_ShowString(63,6,"CODE:",16);
OLED_ShowChar(48,6,t,16);
t++;
if(t>'~')t=' ';
OLED_ShowNum(103,6,t,3,16);
// delay_ms(5);
// OLED_Clear();
}
}
![](https://img.21ic.com/weixin/2020/12/YRjuQr.png)
![](https://img.21ic.com/weixin/2020/12/ZF7Vr2.png)
第二步,應用到自己的項目中:
如果需要顯示溫濕度的話,就可以利用這些函數組合出你要顯示的內容,例如顯示“溫度:36.5℃”。
則需要先生成所需的漢字與符號字模。
unsigned char code Hzk[][32]={
{ 0x00,0x00,0xE0,0x40,0x40,0x40,0x40,0xFC,0x40,0x40,0x40,0x40,0x60,0xE0,0x00,0x00,0x00,0x00,0x07,0x02,0x02,0x02,0x02,0x7F,0x02,0x02,0x02,0x02,0x02,0x07,0x00,0x00},/*"中",0*/
{ 0x00,0x00,0xF8,0x08,0x08,0x28,0x28,0x28,0xE8,0x28,0x28,0x38,0x28,0xF8,0x08,0x00,0x00,0x00,0x7F,0x20,0x20,0x29,0x29,0x29,0x2F,0x29,0x2F,0x2D,0x28,0x7F,0x00,0x00},/*"國",1*/
{ 0x00,0x00,0x00,0xF0,0x20,0x20,0x20,0xFC,0x20,0x20,0x20,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x05,0x05,0x05,0x7F,0x45,0x45,0x45,0x4F,0x40,0x60,0x78,0x60},/*"電",2*/
{ 0x00,0x00,0x10,0x10,0x10,0x10,0x10,0xD0,0x30,0x30,0x10,0x08,0x80,0x80,0x00,0x00,0x01,0x01,0x01,0x01,0x21,0x21,0x41,0x7F,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00},/*"子",3*/
{ 0x00,0x00,0xF8,0x10,0x50,0x90,0x90,0x70,0x70,0x90,0xD0,0x70,0x30,0xF8,0x00,0x00,0x00,0x00,0x7F,0x00,0x08,0x06,0x01,0x1E,0x08,0x06,0x03,0x4E,0x40,0x7F,0x00,0x00},/*"網",4*/
{ 0x00,0x80,0x80,0xC8,0x30,0x00,0x80,0x40,0x30,0x18,0x10,0x60,0xC0,0x80,0x80,0x80,0x00,0x00,0x00,0x3F,0x12,0x09,0x04,0x7F,0x44,0x44,0x42,0x43,0x42,0x78,0x60,0x00},/*"論",5*/
{ 0x40,0x40,0x40,0xF8,0x40,0x60,0xC0,0x90,0x90,0x90,0x90,0x90,0x90,0x98,0xD0,0x80,0x00,0x10,0x10,0x1F,0x08,0x08,0x60,0x30,0x2C,0x27,0x23,0x25,0x28,0x30,0x60,0x00},/*"壇",6*/
{ 0x00,0x00,0x00,0x18,0xF8,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x1B,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"!",7*/
{ 0x00,0x40,0xC0,0x18,0x90,0x60,0xF8,0xA8,0xA8,0xA8,0xA8,0xA8,0xF8,0x08,0x00,0x00,0x00,0x04,0x7C,0x7E,0x01,0x00,0x21,0x3E,0x22,0x3E,0x22,0x3E,0x23,0x3E,0x22,0x20},/*"溫",8*/
{ 0x00,0x00,0x00,0xF0,0x90,0x90,0x90,0xF4,0x98,0x90,0x90,0xF0,0x90,0xD8,0x90,0x00,0x00,0x40,0x30,0x0F,0x40,0x44,0x44,0x4F,0x35,0x25,0x35,0x6F,0x64,0x40,0x40,0x00},/*"度",9*/
{ 0x00,0x40,0xC0,0x98,0x60,0x00,0xF8,0xA8,0xA8,0xA8,0xA8,0xA8,0xA8,0xF8,0x08,0x00,0x04,0x04,0x7E,0x01,0x20,0x24,0x3D,0x20,0x3F,0x20,0x20,0x3F,0x24,0x27,0x33,0x20},/*"濕",10*/
{ 0x00,0x00,0x00,0xF0,0x90,0x90,0x90,0xF4,0x98,0x90,0x90,0xF0,0x90,0xD8,0x90,0x00,0x00,0x40,0x30,0x0F,0x40,0x44,0x44,0x4F,0x35,0x25,0x35,0x6F,0x64,0x40,0x40,0x00},/*"度",11*/
{ 0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*":",12*/
{ 0x00,0x00,0x78,0x48,0x78,0xC0,0xE0,0x10,0x08,0x08,0x08,0x08,0x10,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x0F,0x08,0x10,0x10,0x10,0x10,0x08,0x08,0x04,0x00},/*"℃",13*/
};
最后顯示的效果如下圖所示,如果將溫度的數字通過讀取傳感器繼續更新,就可以看到實時的溫度了。
然后合理的利OLED廠家提供的庫函數組合。
//#include "ML51.h"
#include "oled.h"
#include "bmp.h"
int main(void)
{
char i=0;
unsigned char t=' ';
OLED_Init();//初始化OLED
OLED_ColorTurn(0);//0正常顯示,1 反色顯示
OLED_DisplayTurn(0);//0正常顯示 1 屏幕翻轉顯示
while(1)
{
//第一行顯示8個字符16*8==128
for(i=0;i<8;i++)
OLED_ShowChinese(i*16,0,i,16);
//第二行顯示 溫度:
OLED_ShowChinese(0,2,8,16);//溫
OLED_ShowChinese(16,2,9,16);//度
OLED_ShowChinese(32,2,12,16);//:
//在第二行,第四個字符位置顯示36
OLED_ShowNum(48,2,36,2,16);
OLED_ShowChar(66,2,'.',16);
OLED_ShowNum(74,2,5,1,16);
OLED_ShowChinese(90,2,13,16);//℃
//在第三行顯示字符串
OLED_ShowString(8,4,"bbs.21ic.com",16);
//delay_ms(5);
}
}
在使用中遇到了一個問題,我在main.c和oled.h都引用了頭文件#include "ML51.h"? ? ? ??
導致編譯后報錯重復定義。然后我刪除了main.c中的,重新設置了引用頭文件路徑,完美解決。
另外如果你修改了目錄,或者重建了目錄結構,需要在這里也修改一下,不然工程無法找到對應的exe。
..\Library\Startup\exe\hex2bin.exe??.\output\@L.hex
運行該命令可以生成所需的hex文件。
第三步,添加其他的外設驅動,實現顯示檢測數據顯示功能
這里我使用的是ADC檢測溫度,然后通過該屏幕顯示。
已經添加了NTC傳感器。效果非常好
還有就是使用的GPIO,一定要初始化為GPIO模式的開漏模式,不然無法驅動屏幕。
//