程序如下,急需高手指点!为什么程序下载到1602上无任何显示?
//LCD
#define LOW_RS() GPIOD->BRR =GPIO_Pin_6
#define LOW_RW() GPIOD->BRR =GPIO_Pin_5
#define LOW_E() GPIOD->BRR =GPIO_Pin_4 //端口位清除寄存器
#define HI_RS() GPIOD->BSRR=GPIO_Pin_6 //PE.0--(LCD)RS //端口位设置/清除寄存器
#define HI_RW() GPIOD->BSRR=GPIO_Pin_5 //PE.1--(LCD)RW
#define HI_E() GPIOD->BSRR=GPIO_Pin_4 //PE.2--(LCD)E
#define DATAOUT GPIOG->ODR //端口输出数据寄存器
//端口输入数据寄存器
unsigned char LINE;
unsigned char ROW;
int LCD_DATA[12]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x2E,0x56};//要显示的ASC码,0x30为0的ASC码
int i=0;
//判断液晶屏忙
void LCD_WAIT()
{
/* GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_7;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOD, &GPIO_InitStructure); //PD口输入*/
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOG, &GPIO_InitStructure); //PG口输入
LOW_RS(); //命令
HI_RW(); //读取
do{
HI_E();
Delay(1);
LOW_E();
Delay(1);
}while(GPIOG->IDR & 0x80);
LOW_E();
/*GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode =GPIO_Mode_Out_PP;
GPIO_Init(GPIOD, &GPIO_InitStructure); //PD口OD输出*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11;
GPIO_InitStructure.GPIO_Mode =GPIO_Mode_Out_PP;
GPIO_Init(GPIOG, &GPIO_InitStructure); //PG口OD输出
}
void LCD_ENABLE(unsigned char a)
{
LCD_WAIT();
LOW_RS();
LOW_RW();
LOW_E();
DATAOUT=a;
HI_E();
Delay(1);
LOW_E();
Delay(1);
}
void LCD_init()
{
LCD_ENABLE(0x01); //清屏
LCD_ENABLE(0x38); //2行8位数据(显示模式)
LCD_ENABLE(0x0F); //显示功能开,显示光标
LCD_ENABLE(0x06); //写入新数据后光标右移
LCD_ENABLE(0x0C); //显示开
LCD_ENABLE(0x80);
LCD_ENABLE(0x18); //屏幕整体左移一格,用于滚动显示
//LCD_ENABLE(0xC0);
}
void LCD_DISPLAY_INIT()
{
LINE=1;
ROW=1;
if(LINE==1)
{
LCD_ENABLE(0x80);//第一行,若为第二行,则为:LCD_ENABLE(0xc0);
}
else
{
LCD_ENABLE(0xC0);
}
}
void LCD_DISPLAY()
{
while(1)
{
LCD_WAIT();
HI_RS();
LOW_RW();
DATAOUT=0x30;//ASC码输出到端口
HI_E();
Delay(1);
LOW_E();
Delay(1);
}
LCD_ENABLE(0x0C);//关闭光标,显示
LCD_ENABLE(0x01);
Delay(1);
}
此帖出自
小平头技术问答
一周热门 更多>