標(biāo)題:
修改的原子哥的串口寫數(shù)據(jù)顯示到1602液晶STM32源程序
[打印本頁]
作者:
風(fēng)氣天藍(lán)
時間:
2019-1-19 09:42
標(biāo)題:
修改的原子哥的串口寫數(shù)據(jù)顯示到1602液晶STM32源程序
使用原子哥的程序,自己改動了一下能夠通過串口寫數(shù)據(jù)顯示到1602液晶上。
STM32單片機(jī)源程序如下:
#include "stm32f10x.h"
#include "sys.h"
#include "delay.h"
#include "usart.h"
#define LCD_1602RS GPIO_Pin_12
#define LCD_1602RW GPIO_Pin_13
#define LCD_1602EN GPIO_Pin_14
//unsigned char table[];
unsigned char table2[13];
unsigned char a;
u8 i;
u8 res;
u8 flag;
u8 j;
//串口初始化
void My_USART1_Init(void)
{
GPIO_InitTypeDef GPIO_InitStrue;
USART_InitTypeDef USART_InitStrue;
NVIC_InitTypeDef NVIC_InitStrue;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //使用相應(yīng)的時鐘
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
GPIO_InitStrue.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_InitStrue.GPIO_Pin=GPIO_Pin_9;
GPIO_InitStrue.GPIO_Speed=GPIO_Speed_10MHz;
GPIO_Init (GPIOA,&GPIO_InitStrue); //初始化IO口
GPIO_InitStrue.GPIO_Mode=GPIO_Mode_IN_FLOATING ;
GPIO_InitStrue.GPIO_Pin=GPIO_Pin_10;
GPIO_InitStrue.GPIO_Speed=GPIO_Speed_10MHz;
GPIO_Init (GPIOA,&GPIO_InitStrue); //初始化IO口
USART_InitStrue.USART_BaudRate=115200;
USART_InitStrue.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
USART_InitStrue.USART_Mode=USART_Mode_Tx|USART_Mode_Rx;
USART_InitStrue.USART_Parity=USART_Parity_No;
USART_InitStrue.USART_StopBits=USART_StopBits_1;
USART_InitStrue.USART_WordLength=USART_WordLength_8b;
USART_Init(USART1,&USART_InitStrue);
USART_Cmd(USART1,ENABLE); //使能串口1
USART_ITConfig(USART1,USART_IT_RXNE,ENABLE); //開啟接受中斷
NVIC_InitStrue.NVIC_IRQChannel=USART1_IRQn;
NVIC_InitStrue.NVIC_IRQChannelCmd=ENABLE;
NVIC_InitStrue.NVIC_IRQChannelPreemptionPriority=1;
NVIC_InitStrue.NVIC_IRQChannelSubPriority=1;
NVIC_Init(&NVIC_InitStrue); //中斷優(yōu)先級的設(shè)置
}
//寫命令
void LCD1602_Write_Cmd(unsigned char cmd)
{
GPIO_ResetBits(GPIOF,LCD_1602RS); //RS 0
delay_us(2);
GPIO_ResetBits(GPIOF,LCD_1602RW); //RW 0
GPIO_Write(GPIOD, cmd);
GPIO_ResetBits(GPIOF,LCD_1602EN); //E 0
delay_us(2);
GPIO_SetBits(GPIOF,LCD_1602EN); //E 1
delay_us(2);
GPIO_ResetBits(GPIOF,LCD_1602EN); //E 0
}
//寫數(shù)據(jù)
void LCD1602_Write_Date(unsigned char dat)
{
GPIO_SetBits(GPIOF,LCD_1602RS); //RS 1 RS高是數(shù)據(jù),低是命令
delay_us(2);
GPIO_ResetBits(GPIOF,LCD_1602RW); //RW 0
GPIO_Write(GPIOD, dat);
GPIO_ResetBits(GPIOF,LCD_1602EN); //E 0
delay_us(2);
GPIO_SetBits(GPIOF,LCD_1602EN); //E 1
delay_us(2);
GPIO_ResetBits(GPIOF,LCD_1602EN); //E 0
delay_us(2);
}
//VO 11
//RS 12
//RW 13
//E 14
int main(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
SystemInit(); //系統(tǒng)時鐘初始化
delay_init(); //延時函數(shù)初始化
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOF, ENABLE); //使能PF,PD端口時鐘
GPIO_InitStructure.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_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽輸出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度為50MHz
GPIO_Init(GPIOD, &GPIO_InitStructure); //初始化GPIOD0~7
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽輸出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度為50MHz
GPIO_Init(GPIOF, &GPIO_InitStructure); //初始化GPIOB 11,14,13,12
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
delay_ms(300);
//液晶初始化
LCD1602_Write_Cmd(0x38); //顯示16*2
delay_us(10);
LCD1602_Write_Cmd(0x0c);
delay_us(10);
LCD1602_Write_Cmd(0x06); //讀寫字符后地址加1,屏顯不移動
delay_us(10);
LCD1602_Write_Cmd(0x01); //清屏,數(shù)據(jù)指針清零
delay_us(10);
//LCD1602_Write_Cmd(0x80); //設(shè)置數(shù)據(jù)地址指針初始值
delay_us(2);
My_USART1_Init();
while(1)
{
//LCD1602_Write_Cmd(0x01); //清屏,數(shù)據(jù)指針清零
if(flag == 1)
{
LCD1602_Write_Cmd(0x01); //清屏,數(shù)據(jù)指針清零
delay_ms(1);
flag = 0;
for(i = 0;i<j-1;i++)
{
LCD1602_Write_Cmd(0x80+i);
delay_ms(1);
LCD1602_Write_Date(table2[i]);
delay_ms(1);
}
delay_ms(30000);
i = 0;
// LCD1602_Write_Cmd(0x01); //清屏,數(shù)據(jù)指針清零
}
}
}
void USART1_IRQHandler(void)
{
if(USART_GetITStatus(USART1,USART_IT_RXNE))
{
table2[i++] = USART_ReceiveData(USART1);
USART_SendData(USART1,table2[i-1]);
if(table2[i-1] == '#')
{
flag = 1;
j = i;
i = 0;
}
}
}
復(fù)制代碼
所有資料51hei提供下載:
串口——液晶.7z
(182.12 KB, 下載次數(shù): 40)
2019-1-19 17:15 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
作者:
jushihao
時間:
2019-1-26 17:33
樓主可不可以做一個用USMART調(diào)試串口的,這個更加方便,但是我還不熟悉STM32,因為USMART版本兼容問題老是各種報錯,謝謝!
作者:
夢園心田
時間:
2019-2-3 02:59
不錯,51黑有你更精彩
作者:
witp
時間:
2019-7-25 19:30
謝謝分享,學(xué)習(xí)中。。。。
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1