使用原子哥的程序,自己改動了一下能夠通過串口寫數據顯示到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 上傳
點擊文件名下載附件
|