标题:
修改的原子哥的串口写数据显示到1602液晶STM32源程序
[打印本页]
作者:
风气天蓝
时间:
2019-1-19 09:42
标题:
修改的原子哥的串口写数据显示到1602液晶STM32源程序
使用原子哥的程序,自己改动了一下能够通过串口写数据显示到1602液晶上。
STM32单片机源程序如下:
#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); //使用相应的时钟
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); //中断优先级的设置
}
//写命令
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
}
//写数据
void LCD1602_Write_Date(unsigned char dat)
{
GPIO_SetBits(GPIOF,LCD_1602RS); //RS 1 RS高是数据,低是命令
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(); //系统时钟初始化
delay_init(); //延时函数初始化
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); //清屏,数据指针清零
delay_us(10);
//LCD1602_Write_Cmd(0x80); //设置数据地址指针初始值
delay_us(2);
My_USART1_Init();
while(1)
{
//LCD1602_Write_Cmd(0x01); //清屏,数据指针清零
if(flag == 1)
{
LCD1602_Write_Cmd(0x01); //清屏,数据指针清零
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); //清屏,数据指针清零
}
}
}
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;
}
}
}
复制代码
所有资料51hei提供下载:
串口——液晶.7z
(182.12 KB, 下载次数: 40)
2019-1-19 17:15 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
jushihao
时间:
2019-1-26 17:33
楼主可不可以做一个用USMART调试串口的,这个更加方便,但是我还不熟悉STM32,因为USMART版本兼容问题老是各种报错,谢谢!
作者:
梦园心田
时间:
2019-2-3 02:59
不错,51黑有你更精彩
作者:
witp
时间:
2019-7-25 19:30
谢谢分享,学习中。。。。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1