利用stm32F4驱动1602A显示字符,可是只有显示第一行方格,后来接了10k的变位器调节对比度还是不行。程序上传在附件中了,希望大家能给予解答,谢谢
- 主函数
- int main(void)
- {
- u8 str[]="sghj";
-
- gpioinit();
- delay_ms(10);
- lcdinit();
- delay_ms(20);
- LCD1602_Show_Str(1, 0, str);
-
- }
- 头文件
- #ifndef __LCD_H
- #define __LCD_H
- #include "sys.h"
- #define LCD_RS PEout(0)
- #define LCD_RW PEout(1)
- #define LCD_E PEout(2)
- #define PORT_DATA GPIOF
- #define DATAOUT(x) GPIO_Write(GPIOF, x)
- #define busy 0x80
- #define D7_IN() {GPIOF->MODER&=~(3<<(8*2));GPIOF->MODER|=0<<8*2;}
- #define D7_OUT() {GPIOF->MODER&=~(3<<(8*2));GPIOF->MODER|=1<<8*2;}
- void checkbusy(void);
- void lcdinit(void);
- void writecommand(unsigned char val,u8 flag);
- void portwrite(u8 data);
- void writedata(unsigned char data);
- void display_position(unsigned char i);
- void gpioinit(void);
- void port_in( u8 data );
- void LCD1602_Show_Str(u8 x, u8 y, u8 *str);
- #endif
- 子函数:
- #include "lcd.h"
- #include "delay.h"
- #include "led.h"
- void checkbusy(void)
- {
- u8 sta;
-
- DATAOUT(0xff);
- LCD_RS=0;
- delay_us(200);
- LCD_RW=1;
- delay_us(200);
- do
- {
- LCD_E=1;
- delay_ms(5);
- sta = GPIO_ReadInputDataBit(GPIOF, GPIO_Pin_7);
- LCD_E=0;
- }while(sta & 0x80);
- }
- void lcdinit(void)
- {
- writecommand(0x38,0);
- delay_ms(5);
- writecommand(0x38,0);
- delay_ms(5);
- writecommand(0x38,0);
- delay_ms(5);
-
-
- writecommand(0x38,1);
- writecommand(0x08,1);
- writecommand(0x01,1);
- writecommand(0x06,1);
- writecommand(0x0C,1);
-
- }
- void gpioinit(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
-
- RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE|RCC_AHB1Periph_GPIOF, ENABLE);
-
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
- GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
- GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
- GPIO_Init(GPIOE, &GPIO_InitStructure);
- 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;
- GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
- GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
- GPIO_Init(GPIOF, &GPIO_InitStructure);
- }
- void writedata(unsigned char data)
- {
- checkbusy();
- LCD_RS=1;
- delay_us(200);
- LCD_RW=0;
- delay_us(200);
- DATAOUT(data);
- LCD_E=1;
- delay_us(500);
- LCD_E=0;
- }
- void writecommand(unsigned char i,u8 flag)
- {
- if(flag)
- {
- checkbusy();
- }
- LCD_RS=0;
- delay_us(200);
- LCD_RW=0;
- delay_us(200);
-
- DATAOUT(i);
- delay_us(500);
- LCD_E=1;
- delay_us(500);
- LCD_E=0;
- }
- void LCD1602_Set_Cursor(u8 x, u8 y)
- {
- u8 addr;
-
- if (y == 0)
- addr = 0x00 + x;
- else
- addr = 0x40 + x;
- writecommand(addr|0x80,1);
- }
- void LCD1602_Show_Str(u8 x, u8 y, u8 *str)
- {
- LCD1602_Set_Cursor(x, y);
- while(*str != ' ')
- {
- writedata(*str++);
- }
- }
复制代码
此帖出自
小平头技术问答
一周热门 更多>