原理
之前沒有操作過12864這種類型的屏,但是,操作過其他類型的,原理都是相通的。12864是擁有128x64像素點這類屏幕的稱號吧。屏幕有64行,128列;每個漢字是16x16,所以一個這樣的屏,最多可以顯示4x8的漢字或者8x16的字符。
我使用的是不帶字庫的I2C接口的屏幕,主芯片是ST7656。這樣的屏,只能寫,不能讀。先配置屏幕,然后通過字模制作軟件制作出待顯示內容的像素數字,最后,通過數據線傳送給屏幕顯示。了解了原理后,接下來就根據主芯片的數據手冊進行配置屏幕就好了。
硬件連線
CS:片選
RST: 復位
RS:數據或命令選擇
SDA:I2C數據線
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 Address
writec(0x10); //Set Column Address = 0
writec(0x00); //Colum from S1 -> S128 auto add
for(j=0;j<132;j++)
{
writed( FillData );
}
}
}
void LcmInit(void)
{
IO_ST7565_CS_1;
IO_ST7565_RST_0;
delay_ms(10); //hard reset for 10ms
IO_ST7565_RST_1;
delay_ms(10);
writec(0xAE); //Display OFF
writec(0xA2); //1/64 Duty 1/9 Bias
writec(0xA0); //ADC select S0->S131(玻璃設計用S1-S128)
writec(0xC0); //com1 --> com64
writec(0x24); //對某些模塊沒用,用的外部Rb/Ra
writec(0x81); //Sets V0
writec(48); //內部電位器調節對比度
writec(0x2F); //voltage follower ON regulator ON booster ON
writec(0xA6); //Normal Display (not reverse dispplay)
writec(0xA4); //Entire Display Disable
writec(0x40); //Set Display Start Line = com0
writec(0xB0); //Set Page Address = 0
writec(0x10); //Set Column Address 4 higher bits = 0
writec(0x00); //Set Column Address 4 lower bits = 1 , from IC SEG1 -> SEG128
LcmClear(0);
writec(0xAF); //Display ON
}
上面的這些命令代表什么含義,輸入的命令值具體代表什么,都可以在ST7656的官方數據手冊中找到答案。
應用
使用字模軟件制作字模:
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數據手冊: https://download.csdn.net/download/donglicaiju76152/10805849
上一篇:STM8開發記錄二:UART RX空閑中斷和DMA操作
下一篇:STM8用SPI交換1Byte數據
推薦閱讀
史海拾趣
隨著互聯網和電子商務的興起,一家名為“FORMOSA電子商城”的平臺應運而生。該平臺利用先進的互聯網技術,為電子產品制造商、分銷商和消費者搭建了一個高效、便捷的在線交易平臺。FORMOSA電子商城不僅提供豐富的電子產品選擇,還通過智能化的推薦系統和優質的客戶服務,為用戶提供個性化的購物體驗。平臺還積極推動供應鏈的數字化轉型,幫助合作伙伴優化庫存管理、提高運營效率。在短短幾年內,FORMOSA電子商城便成為了電子行業內知名的電子商務品牌。
隨著互聯網和電子商務的興起,一家名為“FORMOSA電子商城”的平臺應運而生。該平臺利用先進的互聯網技術,為電子產品制造商、分銷商和消費者搭建了一個高效、便捷的在線交易平臺。FORMOSA電子商城不僅提供豐富的電子產品選擇,還通過智能化的推薦系統和優質的客戶服務,為用戶提供個性化的購物體驗。平臺還積極推動供應鏈的數字化轉型,幫助合作伙伴優化庫存管理、提高運營效率。在短短幾年內,FORMOSA電子商城便成為了電子行業內知名的電子商務品牌。
Digital Voice Systems, Inc.(DVSI)于1988年成立,當時正值數字通信技術的興起階段。公司創始人憑借對語音編解碼技術的深刻理解和前瞻性的市場洞察力,決定投身于這一領域。他們開發出了具有專利保護的基于魯棒性多帶激勵模型(MBE Model)的低碼率語音壓縮算法,如IMBE和AMBE編解碼系統。這些算法在當時的市場上獨樹一幟,為DVSI贏得了第一桶金。
在創立初期,DVSI面臨著資金、技術、市場等多方面的挑戰。然而,他們憑借著堅定的信念和不懈的努力,逐步克服了這些困難。他們不斷投入研發,優化算法,提高產品的性能和穩定性;同時,他們積極開拓市場,與各大通信設備制造商建立合作關系,將產品推向市場。
隨著時間的推移,DVSI的產品逐漸在市場上獲得了認可。他們的編解碼系統被廣泛應用于移動通信、衛星通信、軍事通信等領域,為客戶提供了高效、穩定的語音通信解決方案。DVSI也因此逐漸嶄露頭角,成為了電子行業中一顆耀眼的明星。
故事二至五框架概述
- 技術創新與突破:DVSI在語音編解碼技術方面的持續創新,如推出新一代的高效壓縮算法,進一步提升了產品的競爭力。
- 市場拓展與國際化:隨著公司實力的增強,DVSI開始拓展國際市場,與全球多家知名企業建立合作關系,實現了國際化發展。
- 合作與競爭:在電子行業中,DVSI與其他企業的合作與競爭并存。他們通過合作共贏的方式,共同推動行業的發展;同時,也面臨著來自競爭對手的挑戰和競爭壓力。
- 企業文化與團隊建設:DVSI注重企業文化建設,倡導創新、協作、共贏的價值觀。他們注重團隊建設,吸引了一批優秀人才加入公司,為公司的發展提供了有力的人才保障。
以上故事和框架概述僅供參考,您可以根據這些線索進一步挖掘和編寫關于DVSI公司的故事。
智能家居是電子行業的一個重要發展方向,Devar Inc公司也積極拓展這一領域。公司推出了一系列智能家居產品,如智能音箱、智能照明、智能安防等。這些產品不僅具備遠程控制、語音控制等便捷功能,還通過Devar的AI技術實現了智能學習和智能聯動。例如,智能音箱可以根據用戶的習慣和喜好,為用戶推薦音樂、新聞等內容;智能照明則可以根據環境光線和用戶需求自動調節亮度和色溫。
在市場競爭日益激烈的背景下,BAHCO選擇了與同樣擁有悠久歷史的美國Snap-on公司進行合作。這次強強聯合不僅加強了雙方在技術、市場等方面的互補優勢,更為BAHCO打開了更廣闊的市場空間。通過Snap-on的全球銷售網絡,BAHCO的產品得以進入更多國家和地區,進一步提升了公司的品牌影響力和市場競爭力。
隨著全球化的深入發展,Chiefdom Electronic Co Ltd意識到國際化布局對于提升競爭力的重要性。公司開始積極拓展海外市場,設立海外研發中心和銷售網絡,以便更好地了解當地市場需求和文化特點。通過本地化運營和定制化服務,公司成功打入多個國際市場,并獲得了良好的業績回報。這些國際化布局不僅提升了公司的整體競爭力,還為其在全球電子行業中占據了更加重要的地位。
在一個論壇看到這樣一個求助帖子,如果各位看到這樣的求助帖子,你會幫他嗎? 原帖地址http://bbs.cepark.com/thread-12622-1-1.html 為防止刷廣告的嫌疑,我將帖子內容和回復抓圖出來,大家看一下: … 查看全部問答∨ |
|
我用89C51訪問24C02無反應. 24C02時鐘接P1.7,數據接P1.6,A0 A1 A2接地 執行函數:I2C_Write(0xA0,0x01,0);I2C_Read(0xA1,0x01,&c);都直接返回0 24C02.H #ifndef __24C02_H__ #define __24C02_H__ #ifndef uchar #define uchar unsigned char ...… 查看全部問答∨ |
|
PB 上好像有個功能,可以直接運行開發板上的程序(如MediaPlay), 請問在PB什么菜單下? 請問,在WinCE 上如何注冊組件(DLL)?(另一個程序要調用這個組件,不注冊, 沒法調用) PB 上好像有個功能,可以直接運行開發板上的程序(如MediaPlay), 請問在PB什么菜單下?… 查看全部問答∨ |
外企 地點 上海要求:本科以上學歷 5年以上經驗數電模電 有意向的站短我啊!!!! 速度! 歡迎自薦或者推薦! [ 本帖最后由 wendy123hello 于 2012-6-20 13:48 編輯 ]… 查看全部問答∨ |
請問一下,如果加一個低頻交流方波信號(大概正負三、四十伏)在一個直流高壓系統,低頻信號是怎么走的呢? 還有,以DGND為參考點,A、C點的電壓是交流信號的電壓吧? 希望哪位朋友指點一下,謝謝! [ 本帖最后由 alien_duck 于 2013-12-21 09:2 ...… 查看全部問答∨ |
|
本帖最后由 木子魚 于 2014-11-18 15:45 編輯 第一種方法: 使用Boot下載用戶程序: (根據用戶手冊操作:在Boot菜單選擇1,之后選擇Transfer 下拉菜單的 Send Ymodem ,在彈出菜單選擇要下載的 ***.bin 文 ...… 查看全部問答∨ |