msp430和stm32 lcd屏驅動程式

2021-09-25 07:31:12 字數 3457 閱讀 6483

最近使用了一塊msp430f5529微控制器做課設,自帶的拓展板上有一塊12864的cog的lcd屏,記錄下使用的驅動程式。

硬體原理圖:

cog_cs為片選訊號,每次資料或指令通訊完畢,需要拉低拉高一次。cog_rst為上電復位引腳,正常工作後不控制。

cog_a0是資料命令選擇端,低電平表示傳輸的是資料,高電平表示傳輸的時命令。

cog_sclk是時鐘訊號,上公升沿有效。

cog_sda為資料線,只能寫不能讀,無法讀取cog內部的視訊記憶體資料。cog_bkled為背光控制io,低電平背光點亮,高電平背光熄滅。

驅動程式:

標頭檔案:

#ifndef lcd_h_

#define lcd_h_

#define lcd_cs_h p8out |= bit2

#define lcd_cs_l p8out &= ~bit2

#define lcd_rst_h p3out |= bit6

#define lcd_rst_l p3out &= ~bit6

#define lcd_ao_h p3out |= bit7

#define lcd_ao_l p3out &= ~bit7

#define lcd_sck_h p4out |= bit0

#define lcd_sck_l p4out &= ~bit0

#define lcd_sda_h p1out |= bit2

#define lcd_sda_l p1out &= ~bit2

#define lcd_x 128

#define lcd_y 64/8

#define font_size 16

#define font_buff_size font_size*font_size/8

void lcd_init(void);

void lcd_6_8_char(unsigned char y,unsigned char x,char ch);

void lcd_6_8(unsigned char y,unsigned char x,char string);

void lcd_8_16_char(unsigned char y,unsigned char x,char font);

void lcd_8_16(unsigned char y,unsigned char x,char* string);

void lcd_bmp(unsigned char x0,unsigned char y0,unsigned char x_lenth,unsigned char y_lenth,const unsigned char *bmp_tab);//顯示一幅,橫座標範圍為0-127,縱座標範圍為0-7

void lcd_clear(void);//清屏

unsigned char lcd_gbk16(unsigned char y,unsigned char x0,const char* str);

#endif

原始檔:

#include "msp430.h"

#include "lcd.h"

#include struct typfnt_gb162

;#define hz16_num 62

const struct typfnt_gb162 hz16=,,,

,,,,

,,,,

,,,};

unsigned char const f6x8[6] =//6*8的點陣

;unsigned char const f8x16[16]=//8*16的點陣

93 0x00,0x06,0x01,0x01,0x02,0x02,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//~ 94

};void lcd_delay(void)

void lcd_dat(unsigned char byte)

else if(*string<32 || *string>127)

continue;

lcd_6_8_char(y,x,*string);//偏移32byte

x += 6;

string ++; }}

void lcd_8_16_char(unsigned char y,unsigned char x,char font)

lcd_set_position(x,y + 1);

for(;i < 16;i ++)//迴圈寫入下頁8位元組 }

void lcd_8_16(unsigned char y,unsigned char x,char* string)

else if(*string<32 || *string>127)

continue;

lcd_8_16_char(y,x,*string);//偏移32byte

x += 8;

string ++; }}

void lcd_bmp(unsigned char x0,unsigned char y0,unsigned char x_lenth,unsigned char y_lenth,const unsigned char *bmp_tab)//顯示一幅,橫座標範圍為0-127,縱座標範圍為0-7 }}

void lcd_clear(void)//清屏 }}

unsigned char* get_hzmat(char* s)

} return 0;

}void lcd_drawgbk16(unsigned char y,unsigned char x,char* font)

lcd_set_position(x,y+1);//下半行

for(;i < font_size*2;i ++) }

unsigned char lcd_gbk16(unsigned char y,unsigned char x0,const char* str)

s++;//下乙個字 ascii占用乙個位元組

} else if(*s < 128)//英文或數字

lcd_8_16_char(y,x,*s);

x += font_size/2;//下乙個字 乙個ascii占用8行

s++;//下乙個字 ascii占用乙個位元組

} else//如果是漢字

lcd_drawgbk16(y,x,(char*)s);//顯示漢字

x += font_size;//乙個漢字橫向長16行

s += 2;//乙個漢字占用2位元組

} }return (unsigned char)(s - s0);//返回顯示的總字元數

}

與stm32通用,需要可移

msp430和stm32 dht11驅動程式

最近使用msp430f5529讀取dht11的溫度和濕度資料,記錄下驅動程式,需要可移植。dht11模組是一塊溫濕度感測器模組,可以採集溫度和濕度資訊轉化為資料傳送出來,模組介紹如下 概述 dht11 是廣州奧松 生產的一款溼溫度一體化的數字感測器。該感測器包括乙個電阻式測溼元件和乙個 ntc 測溫...

STM32 LCD屏顯示串列埠接收資料

stm32 最近在學習pid調節,想通過電腦把串列埠除錯助手發給32的資料通過lcd顯示出來 以前顯示串列埠接收的資料都是用 for語句和lcd shownum 語句 把陣列usart rx buf裡的資料乙個個打出來 這樣不是很直觀,且有些繁瑣 今天突然想到是不是可以用lcd showstring...

MSP430常見問題之LCD 顯示驅動類

q1 晶體一般都是接32768,然後使用液晶很正常。我打算將晶體接6m的替換32768,那麼液晶還能正常顯示嗎 a1 看你所用的lcm 模組時序極限是多少hz,然後看6m情況下,msp430去驅動lcm 時,程式時間會不會超過這個極限頻率,如果超過,得加延時。q3 段式液晶和點陣式液晶區別和不同的應...