LCD1602字符串显示(STM32F103)
生活随笔
收集整理的這篇文章主要介紹了
LCD1602字符串显示(STM32F103)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
一、概述
1602液晶為5V電壓驅(qū)動,帶背光,可顯示兩行,每行16個字符,不可以顯示漢字,內(nèi)置1128個字符的ASCII字符集,并行通信方式。本驗是通過STM32F103C8T6最小系統(tǒng)驅(qū)動液晶顯示一串字符。
二、實驗材料
1、STM32F103C8T6最小系統(tǒng)
2、LCD1602液晶
3、杜邦線若干
三、基本操作時序
| 讀狀態(tài) | RS=L,RW=H,E=H | D0-D7=狀態(tài) |
| 寫指令 | RS=L,RW=L,D0-D7=指令碼,E=高脈沖 | 無 |
| 讀數(shù)據(jù) | RS=H,RW=H,E=H | D0-D7=數(shù)據(jù) |
| 寫數(shù)據(jù) | RS=H,RE=L,D0-D7=數(shù)據(jù),E=高脈沖 | 無 |
四、硬件連接
五、程序代碼
1、GPIO初始化
void Lcd1602_Pin_Init(void) {GPIO_InitTypeDef GPIO_InitStruct;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_OD;GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12 |GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB,&GPIO_InitStruct); }2、LCD1602初始化
void Lcd1602_Init(void) {Lcd1602_Pin_Init();delay_ms(15);Lcd1602_Write_Cmd(0X38);Lcd1602_Write_Cmd(0X0C);//開顯示不顯示光標(biāo)Lcd1602_Write_Cmd(0X06);//寫一個指針加1Lcd1602_Write_Cmd(0X01);//清屏Lcd1602_Write_Cmd(0X80);//設(shè)置數(shù)據(jù)指針起點 }3、檢測忙碌狀態(tài)
void Lcd1602_Check_Busy(void) {u8 signal;LCD_RS = 0;LCD_RW = 1;do{LCD_EN = 1;signal = LCD_BUSY;LCD_EN = 0;}while(signal); }4、寫指令
void Lcd1602_Write_Cmd(int cmd) {Lcd1602_Check_Busy();//檢測忙碌狀態(tài)LCD_RS = 0;LCD_RW = 0; LCD_EN = 0;cmd=cmd<<8;GPIOB->ODR=((GPIOB->ODR & 0x00FF)|(cmd&0xFF00));//PB15-8是數(shù)據(jù)位,PB0-7的數(shù)據(jù)不能變delay_us(2); LCD_EN = 1;delay_us(2);LCD_EN = 0;delay_ms(15); }5、寫數(shù)據(jù)
void Lcd1602_Write_Data(int data) {Lcd1602_Check_Busy();//檢測忙碌狀態(tài)LCD_RS = 1; LCD_RW = 0;LCD_EN = 0;data<<= 8;GPIOB->ODR = ((GPIOB->ODR & 0X00FF) | (data& 0XFF00));delay_us(2);LCD_EN = 1;delay_us(2);LCD_EN = 0;delay_ms(15); }6、顯示字符
// @u8 row:行 // @u8 col:列 // @int ch:字符 void Lcd1602_DisplayChar(u8 row,u8 col,int ch) {//顯示位置int add = 0;//判斷是那一行if(row == 2){//第二行的首地址 0x40add += 0x40;}//第一行的首地址 0x80add += 0x80 + col - 1;Lcd1602_Write_Cmd(add); //顯示內(nèi)容 Lcd1602_Write_Data(ch); }7、顯示字符串
// @u8 row:行 // @u8 col:列 // @u8 *str:字符串首地址 void Lcd1602_DisplayString(u8 row,u8 col,u8 *str) {while(*str != '\0'){Lcd1602_DisplayChar(row,col,*str);col += 1;str++;} }8、主程序
int main(void) {u8 buf[] = {"I Love You!"};u8 date[] = {"2021/2/7"};u8 author[] = {"Qing"};Sys_Delay_Init();Lcd1602_Init();//單個字符 // Lcd1602_DisplayChar(2,2,'A');//字符串Lcd1602_DisplayString(1,1,buf);Lcd1602_DisplayString(2,1,date);Lcd1602_DisplayString(2,13,author);while(1){} }六、實驗效果
完整程序及LCD1602液晶相關(guān)資料:
鏈接:https://pan.baidu.com/s/1Ok-P7IACpib_vLQX57ikVg
提取碼:hcyp
如有錯誤還望指出,謝謝!
總結(jié)
以上是生活随笔為你收集整理的LCD1602字符串显示(STM32F103)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 通过TMS320F28335学习DSP的
- 下一篇: oracle instantclient