IO接線:
RS PA8
RW PB6
E PB7
LCD1602_IO PB8-PB15
所有的口都配置成開漏輸出,并且所有的口都通過10k電阻上拉至5V,部分電路圖如下:
程序代碼
LCD1602.C
#include"lcd1602.h"
void LCD1602_GPIO_Init_Out()//LCD1602端口初始化,配置為輸出
{
GPIO_InitTypeDef GPIO_InitStructrue;
RCC_APB2PeriphClockCmd(LCD1602_Timer_GPIOA | LCD1602_Timer_GPIOB, ENABLE);//使能端口時鐘
GPIO_InitStructrue.GPIO_Mode = GPIO_Mode_Out_OD;//開漏輸出
GPIO_InitStructrue.GPIO_Pin = LCD1602_RS;
GPIO_InitStructrue.GPIO_Speed = GPIO_Speed_10MHz;//低速輸出
GPIO_Init(LCD1602_GPIOA, &GPIO_InitStructrue);//初始化
GPIO_InitStructrue.GPIO_Mode = GPIO_Mode_Out_OD;//開漏輸出
GPIO_InitStructrue.GPIO_Pin = LCD1602_RW | LCD1602_E | LCD1602_IO ;
GPIO_InitStructrue.GPIO_Speed = GPIO_Speed_10MHz;// 低速輸出
GPIO_Init(LCD1602_GPIOB, &GPIO_InitStructrue);//初始化
}
void LCD1602_GPIO_Init_Inupt()//LCD1602端口初始化,配置為輸入
{
GPIO_InitTypeDef GPIO_InitStructrue;
RCC_APB2PeriphClockCmd(LCD1602_Timer_GPIOB, ENABLE);//使能端口時鐘
GPIO_InitStructrue.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空輸入
GPIO_InitStructrue.GPIO_Pin = GPIO_Pin_15;
GPIO_Init(LCD1602_GPIOB, &GPIO_InitStructrue);//初始化
}
void LCD1602_WaitReady(void)//用于LCD忙檢測
{
u8 sta = 0;
LCD1602_GPIO_Init_Out();//LCD1602端口初始化,配置為輸出
GPIOB->ODR =0xff00;
LCD1602_RS_RESET();
LCD1602_RW_SET();//讀狀態
LCD1602_GPIO_Init_Inupt();//LCD1602端口初始化,配置為輸入
do{
LCD1602_E_SET();
sta = GPIO_ReadInputDataBit(LCD1602_GPIOB, GPIO_Pin_15);
LCD1602_E_RESET();
}
while(sta);
LCD1602_GPIO_Init_Out();//LCD1602端口初始化,配置為輸出
}
void LCD1602_WriteCmd(u16 cmd)//用于寫指令
{
LCD1602_WaitReady();//等待液晶準備好
LCD1602_RS_RESET();
LCD1602_RW_RESET();//寫指令
GPIOB->ODR &=((cmd<< 8)|0x0000);
LCD1602_E_SET();
LCD1602_E_RESET();//高脈沖
}
void LCD1602_WriteDate(u16 date)//用于寫數據
{
LCD1602_WaitReady();//等待液晶準備好
LCD1602_RS_SET();
LCD1602_RW_RESET();//寫數據
GPIOB->ODR &=((date << 8)|0x0000);
LCD1602_E_SET();
LCD1602_E_RESET();//高脈沖
}
void LCD1620_SetAddress(unsigned char x,unsigned char y)
{
if(y == 0)
LCD1602_WriteCmd(0x80 | x);//從第一行開始顯示
else
LCD1602_WriteCmd(0x80 | 0x40 | x);//從第二行開始顯示
}
void LCD1602_ShowStr(unsigned char x,unsigned char y,unsigned char *str)//LCD1602顯示字符串
{
LCD1620_SetAddress(x,y);//設置數據地址指針
while(*str != '\0')
LCD1602_WriteDate(*str++);//寫數據
}
void LCD1602_ShowChar(unsigned char x,unsigned char y,unsigned char date)//LCD1602顯示字符
{
LCD1620_SetAddress(x,y);//設置數據地址指針
LCD1602_WriteDate(date);//寫數據
}
void LCD1602_ShowNum(unsigned char x,unsigned char y,unsigned char *str,unsigned char i)//LCD1602顯示數字
{
LCD1620_SetAddress(x,y);//設置數據地址指針
str = str+ i;
LCD1602_WriteDate(*str);//寫數據
}
void LCD1602_Init(void)//液晶初始化函數
{
LCD1602_GPIO_Init_Out();
LCD1602_WriteCmd(0x38);//設置16*2顯示,5*7點陣,8位數據接口
LCD1602_WriteCmd(0x0c);//開顯示,顯示光標,光標不閃爍
LCD1602_WriteCmd(0x06);//光標加1,屏幕顯示不移動
LCD1602_WriteCmd(0x01);//清屏
}
LCD1602.h
#ifndef __LCD1602_H
#define __LCD1602_H
#include"sys.h"
#include"stm32f10x.h"
#define LCD1602_Timer_GPIOA RCC_APB2Periph_GPIOA
#define LCD1602_Timer_GPIOB RCC_APB2Periph_GPIOB
#define LCD1602_GPIOA GPIOA
#define LCD1602_GPIOB GPIOB
#define LCD1602_RS GPIO_Pin_8
#define LCD1602_RW GPIO_Pin_6
#define LCD1602_E GPIO_Pin_7
#define LCD1602_IO GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15
#define LCD1602_I0_SET() GPIO_SetBits(GPIOB, LCD1602_IO)
#define LCD1602_RS_SET() GPIO_SetBits(GPIOA,LCD1602_RS)
#define LCD1602_RS_RESET() GPIO_ResetBits(GPIOA,LCD1602_RS)
#define LCD1602_RW_SET() GPIO_SetBits(GPIOB,LCD1602_RW)
#define LCD1602_RW_RESET() GPIO_ResetBits(GPIOB,LCD1602_RW)
#define LCD1602_E_SET() GPIO_SetBits(GPIOB,LCD1602_E)
#define LCD1602_E_RESET() GPIO_ResetBits(GPIOB,LCD1602_E)
void LCD1602_Init(void);//液晶初始化函數
void LCD1602_ShowNum(unsigned char x,unsigned char y,unsigned char *str,unsigned char i);//LCD1602顯示數字
void LCD1602_ShowStr(unsigned char x,unsigned char y,unsigned char *str);//LCD1602顯示字符串
#endif
程序移植時,只需要改.h文件程序,以及.c文件中的
sta = GPIO_ReadInputDataBit(LCD1602_GPIOB, GPIO_Pin_15);
GPIOB->ODR &=((cmd<< 8)|0x0000);
GPIOB->ODR &=((date << 8)|0x0000);
將其配置成你所需要的管腳即可。
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
網絡推廣與網站優化公司(網絡優化與推廣專家)作為數字營銷領域的核心服務提供方,其價值在于通過技術手段與策略規劃幫助企業提升線上曝光度、用戶轉化率及品牌影響力。這...
在當今數字化時代,公司網站已成為企業展示形象、傳遞信息和開展業務的重要平臺。然而,對于許多公司來說,網站建設的價格是一個關鍵考量因素。本文將圍繞“公司網站建設價...
在當今的數字化時代,企業網站已成為企業展示形象、吸引客戶和開展業務的重要平臺。然而,對于許多中小企業來說,高昂的網站建設費用可能會成為其發展的瓶頸。幸運的是,隨...
5000美元能一次兌換?貨幣匯率為1美元=6.67095000美元= 33354.5數據僅供參考,以銀行柜臺成交價為準。5000美元,換算成是多少錢??!求解?2009年,密西西比州人均年收入排名最后,為30103美元。如果每個家庭有兩個工作的人,那么每個家庭每年將賺差不多60,000美元。如果一個家庭 s在美國年收入只有5000美元,相當于一個低收入家庭,一年差不多1500。今日5000美元,換算...
wps瀏覽記錄怎么恢復?第一步:先在wps中打開一個表單或文檔,然后點擊左上角的文件。第2步:選擇備份和恢復-備份中心步驟3:打開本地備份。第四步:可以查看歷史記錄。將鼠標移動到歷史文件上,會出現一個文件圖標。單擊它打開歷史文件并保存。wps運行完都還能找到記錄?wps運行后,記錄將保存在文件中。wps如何打開之前復制內容?wps左上角有復制按鈕和粘貼按鈕,也可以點擊鼠標右鍵找到復制粘貼。wps怎...
蘋果6p和6plus誰大?蘋果6plus更大。因為iPhone6plus是iPhone6的放大版,性能比iPhone 6好一點。IPhone 6長138.1mm,寬67mm。蘋果6plus的長度為158.1mm,寬度為77.8 mm..IPhone 6 Plus采用5.5英寸屏幕,分辨率為1080p。它內置64位蘋果A8處理器,后置800萬像素鏡頭和前置120萬像素Fac6p比6強多少?iphon...