日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

STM8L驱动I2C类型的12864

發(fā)布時間:2024/8/1 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 STM8L驱动I2C类型的12864 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

原理

之前沒有操作過12864這種類型的屏,但是,操作過其他類型的,原理都是相通的。12864是擁有128x64像素點這類屏幕的稱號吧。屏幕有64行,128列;每個漢字是16x16,所以一個這樣的屏,最多可以顯示4x8的漢字或者8x16的字符。

我使用的是不帶字庫的I2C接口的屏幕,主芯片是ST7656。這樣的屏,只能寫,不能讀。先配置屏幕,然后通過字模制作軟件制作出待顯示內(nèi)容的像素數(shù)字,最后,通過數(shù)據(jù)線傳送給屏幕顯示。了解了原理后,接下來就根據(jù)主芯片的數(shù)據(jù)手冊進行配置屏幕就好了。

硬件連線

  • CS:片選
  • RST: 復位
  • RS:數(shù)據(jù)或命令選擇
  • SDA:I2C數(shù)據(jù)線
  • SCL:I2C時鐘線

I2C采用的是軟件模擬的

底層寫操作

#define IO_ST7565_CS_0 GPIO_WriteBit(GPIOB, GPIO_Pin_5, RESET) #define IO_ST7565_CS_1 GPIO_WriteBit(GPIOB, GPIO_Pin_5, SET)#define IO_ST7565_SDA_0 GPIO_WriteBit(GPIOB, GPIO_Pin_1, RESET) #define IO_ST7565_SDA_1 GPIO_WriteBit(GPIOB, GPIO_Pin_1, SET) #define IO_ST7565_SCK_0 GPIO_WriteBit(GPIOB, GPIO_Pin_2, RESET) #define IO_ST7565_SCK_1 GPIO_WriteBit(GPIOB, GPIO_Pin_2, SET) #define IO_ST7565_RST_0 GPIO_WriteBit(GPIOB, GPIO_Pin_4, RESET) #define IO_ST7565_RST_1 GPIO_WriteBit(GPIOB, GPIO_Pin_4, SET)#define IO_ST7565_RS_0 GPIO_WriteBit(GPIOB, GPIO_Pin_3, RESET) #define IO_ST7565_RS_1 GPIO_WriteBit(GPIOB, GPIO_Pin_3, SET)static void io_delay(uint16_t nCount) {while (nCount--); }/* rs == 1 data rs==0 cmd */ void ST7565_Write(uint8_t dat,uint8_t rs) {uint8_t i;IO_ST7565_SCK_0;IO_ST7565_CS_0;if(!rs){IO_ST7565_RS_0; //Command}else{IO_ST7565_RS_1;}io_delay(5);for(i = 0; i < 8; i++){ if( dat & 0x80){IO_ST7565_SDA_1;}else{IO_ST7565_SDA_0;}dat <<= 1;IO_ST7565_SCK_1;io_delay(5);IO_ST7565_SCK_0;io_delay(5);}io_delay(5);IO_ST7565_CS_1;IO_ST7565_RS_1;io_delay(5); }/* write cmd */ void writec(uint8_t com) { ST7565_Write(com,0); }/* write data */ void writed(uint8_t dat) { ST7565_Write(dat,1); }

初始化

void LcmClear(uint8_t FillData) {uint8_t i,j;for(i=0;i<8;i++){writec(0xB0|i); //Set Page Addresswritec(0x10); //Set Column Address = 0writec(0x00); //Colum from S1 -> S128 auto addfor(j=0;j<132;j++){writed( FillData );}} }void LcmInit(void) {IO_ST7565_CS_1;IO_ST7565_RST_0;delay_ms(10); //hard reset for 10msIO_ST7565_RST_1;delay_ms(10); writec(0xAE); //Display OFFwritec(0xA2); //1/64 Duty 1/9 Biaswritec(0xA0); //ADC select S0->S131(玻璃設(shè)計用S1-S128)writec(0xC0); //com1 --> com64writec(0x24); //對某些模塊沒用,用的外部Rb/Rawritec(0x81); //Sets V0writec(48); //內(nèi)部電位器調(diào)節(jié)對比度writec(0x2F); //voltage follower ON regulator ON booster ONwritec(0xA6); //Normal Display (not reverse dispplay)writec(0xA4); //Entire Display Disablewritec(0x40); //Set Display Start Line = com0writec(0xB0); //Set Page Address = 0writec(0x10); //Set Column Address 4 higher bits = 0writec(0x00); //Set Column Address 4 lower bits = 1 , from IC SEG1 -> SEG128LcmClear(0);writec(0xAF); //Display ON }

上面的這些命令代表什么含義,輸入的命令值具體代表什么,都可以在ST7656的官方數(shù)據(jù)手冊中找到答案。

應用

使用字模軟件制作字模:

uint8_t hzk[] = {/*-- 文字: 請 0 --*//*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/0x00,0x00,0xFE,0x04,0x08,0x00,0xFF,0xA8,0xA8,0xA8,0xAA,0xA9,0xFE,0x00,0x00,0x00,0x02,0x42,0x33,0x00,0x00,0x22,0x2A,0x2A,0x2A,0xFE,0x2A,0x2A,0x2A,0x22,0x02,0x00, }uint8_t num[] = {/*-- 文字: 0 --*//*-- 宋體12; 此字體下對應的點陣為:寬x高=8x16 --*/0x00,0x07,0x08,0x10,0x10,0x08,0x07,0x00,0x00,0xF0,0x08,0x04,0x04,0x08,0xF0,0x00, }/* page: 0 - 7; col: 0 - 128 */ void show_char(uint8_t page, uint8_t col, uint8_t *data) {uint8_t i;/* set page address */writec(0xB0 | page);/* set column address */writec(0x10 | col >> 4);writec(col & 0xf);for(i = 8; i < 16; i++) {writed(data[i]);}page++;/* set page address */writec(0xB0 | page);/* set column address */writec((0x10 | (col >> 4)));writec(col & 0xf);for(i = 0; i < 8; i++){writed(data[i]);} }/* page: 0/2/4/6; col: 0 - 128 */ void show_chinese(uint8_t page, uint8_t col, uint8_t *data) {uint8_t i;/* set page address */writec(0xB0 | page);/* set column address */writec(0x10 | col >> 4);writec(col & 0xf);for(i = 0; i < 16; i++) {writed(data[i]);}page++;/* set page address */writec(0xB0 | page);/* set column address */writec((0x10 | (col >> 4)));writec(col & 0xf);for(i = 16; i < 32; i++){writed(data[i]);} }show_chinese(4, 0x20, hzk); show_char(2, 0x30, num);

資料

字模軟件: https://download.csdn.net/download/donglicaiju76152/10805852
ST7656數(shù)據(jù)手冊: https://download.csdn.net/download/donglicaiju76152/10805849

總結(jié)

以上是生活随笔為你收集整理的STM8L驱动I2C类型的12864的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。