最近使用了一塊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 段式液晶和點陣式液晶區別和不同的應...