日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

stm32 LCD1602显示

發布時間:2023/12/10 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 stm32 LCD1602显示 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

LCD1602.c

#include "LCD1602.h" #include "delay.h"void GPIO_INIT(void) { //GPIO初始化GPIO_InitTypeDef GPIO;GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); //禁用jtag,不然寫入程序和程序執行都會受影響RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //打開GPIOA~CRCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);GPIO.GPIO_Pin = EN|RW|RS;GPIO.GPIO_Mode = GPIO_Mode_Out_PP;GPIO.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOC, &GPIO);GPIO.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;GPIO.GPIO_Mode = GPIO_Mode_Out_PP;GPIO.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO);}void LCD_INIT(void) { //初始化GPIO_INIT(); GPIO_Write(GPIOA, 0x0000); GPIO_Write(GPIOC, 0x0000);delay_us(500);LCD_WRITE_CMD(0x38);LCD_WRITE_CMD(0x0d); //開啟光標和閃爍LCD_WRITE_CMD(0x06);LCD_WRITE_CMD(0x01); }void LCD_WRITE_CMD(char CMD) {//寫入命令函數ReadBusy();GPIO_ResetBits(GPIOC, RS);GPIO_ResetBits(GPIOC, RW);GPIO_ResetBits(GPIOC, EN);GPIO_Write(GPIOA, CMD); //GPIO_SetBits(GPIOC, EN);GPIO_ResetBits(GPIOC, EN); }void LCD_WRITE_ByteDATA(char ByteData) { //寫入單個Byte函數ReadBusy();GPIO_SetBits(GPIOC, RS);GPIO_ResetBits(GPIOC, RW);GPIO_ResetBits(GPIOC, EN);GPIO_Write(GPIOA, ByteData);GPIO_SetBits(GPIOC, EN);GPIO_ResetBits(GPIOC, EN); }void LCD_WRITE_StrDATA(char *StrData,char row, char col) {//寫入字符串char baseAddr = 0x00; //定義256位地址if (row){baseAddr = 0xc0;}else{baseAddr = 0x80; } baseAddr += col;while (*StrData != '\0'){LCD_WRITE_CMD(baseAddr);LCD_WRITE_ByteDATA(*StrData);baseAddr++; StrData++;} }void ReadBusy(void) { //讀忙函數,讀忙之前記得更改引腳的工作方式!!!因為STM32的IO不是準雙向IOGPIO_InitTypeDef GPIO;GPIO_Write(GPIOA, 0x00ff); GPIO.GPIO_Pin = GPIO_Pin_7; //選定GPIOA的第七PinGPIO.GPIO_Mode = GPIO_Mode_IN_FLOATING; //第七Pin的工作方式為浮空輸入模式,用于檢測LCD1602的忙狀態GPIO.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO);GPIO_ResetBits(GPIOC, RS);//RS拉低GPIO_SetBits(GPIOC, RW);//RW拉高GPIO_SetBits(GPIOC, EN); //使能開while( GPIO_ReadInputDataBit( GPIOA, GPIO_Pin_7 ) ); //讀第七Pin狀態,如果一直為1則循環等待GPIO_ResetBits(GPIOC, EN);//使能關GPIO.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7; //使GPIOA的狀態還原成推挽模式GPIO.GPIO_Mode = GPIO_Mode_Out_PP;GPIO.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO); }void WUserImg(char pos,char *ImgInfo) { //寫入用戶自定義圖像char cgramAddr; //CGRAM的用戶自定義字符位if( pos <= 1 ) cgramAddr = 0x40; // if( pos > 1 && pos <= 3 ) cgramAddr = 0x50;if( pos > 3 && pos <= 5 ) cgramAddr = 0x60;if( pos > 5 && pos <= 7 ) cgramAddr = 0x70;LCD_WRITE_CMD( (cgramAddr + (pos%2) * 8) ); //指定字模寫入的地址,一般從0x40開始,0x78結束while( *ImgInfo != '\0' ){ //循環寫入tem數據,即用戶取模的數據LCD_WRITE_ByteDATA( *ImgInfo );ImgInfo++;} }

LCD1602.h

#ifndef LCD1602_H #define LCD1602_H#include "sys.h"#define BUSY 0x80 //忙標志 #define RS GPIO_Pin_13 //設置PC13為RS #define RW GPIO_Pin_14 //PC14為RW #define EN GPIO_Pin_15 //PC15為EN使能void ReadBusy(void); void LCD_WRITE_CMD(char CMD); void LCD_WRITE_StrDATA(char *StrData, char row, char col); void LCD_WRITE_ByteDATA(char ByteData); void LCD_INIT(void); void GPIO_INIT(void); void WUserImg(char pos,char *ImgInfo);#endif

總結

以上是生活随笔為你收集整理的stm32 LCD1602显示的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。