例程里用的PB0~15作为LCD的数据端口。我现在需要让PB0~7作为数据低8位,PE8~15作为数据高8位。
原例程的LCD.h和LCD.c是这样写的(部分代码):
/***lcd.h***/
//PB0~15,作为数据线
#define DATAOUT(x) GPIOB->ODR=x; //数据输出
#define DATAIN GPIOB->IDR; //数据输入
/***lcd.c***/
u16 LCD_RD_DATA(void)
{
u16 t;
GPIOB->CRL=0X88888888; //PB0-7 上拉输入
GPIOB->CRH=0X88888888; //PB8-15 上拉输入
GPIOB->ODR=0X0000; //全部输出0
LCD_RS_SET;
LCD_CS_CLR;
//读取数据(读寄存器时,并不需要读2次)
LCD_RD_CLR;
if(lcddev.id==0X8989)delay_us(2);//FOR 8989,延时2us
t=DATAIN;
LCD_RD_SET;
LCD_CS_SET;
GPIOB->CRL=0X33333333; //PB0-7 上拉输出
GPIOB->CRH=0X33333333; //PB8-15 上拉输出
GPIOB->ODR=0XFFFF; //全部输出高
return t;
}
......
void LCD_Init(void)
{
RCC->APB2ENR|=1<<3;//先使能外设PORTB时钟
RCC->APB2ENR|=1<<4;//先使能外设PORTC时钟
RCC->APB2ENR|=1<<0; //开启辅助时钟
JTAG_Set(SWD_ENABLE); //开启SWD
//PORTC6~10复用推挽输出
GPIOC->CRH&=0XFFFFF000;
GPIOC->CRH|=0X00000333;
GPIOC->CRL&=0X00FFFFFF;
GPIOC->CRL|=0X33000000;
GPIOC->ODR|=0X07C0;
//PORTB 推挽输出
GPIOB->CRH=0X33333333;
GPIOB->CRL=0X33333333;
GPIOB->ODR=0XFFFF;
......
/*******************************************************************/
我修改为:
/***lcd.h***/
//PB0~7,PE8~15 作为数据线
#define DATAOUT(x) {GPIOB->ODR=(GPIOB->ODR&0XFF00)|(x&0X00FF);GPIOE->ODR=(GPIOE->ODR&0X00FF)|(x&0XFF00);}
#define DATAIN (GPIOB->IDR&0X00FF)|(GPIOE->IDR&0XFF00)
/***lcd.c***/
u16 LCD_RD_DATA(void)
{
u16 t;
GPIOB->CRL=0X88888888; //PB0-7 上拉输入
GPIOE->CRH=0X88888888; //PE8-15 上拉输入
GPIOB->ODR&=0XFF00; //全部输出0
GPIOE->ODR&=0X00FF;
LCD_RS_SET;
LCD_CS_CLR;
//读取数据(读寄存器时,并不需要读2次)
LCD_RD_CLR;
if(lcddev.id==0X8989)delay_us(2);//FOR 8989,延时2us
t=DATAIN;
LCD_RD_SET;
LCD_CS_SET;
GPIOB->CRL=0X33333333; //PB0-7 上拉输出
GPIOE->CRH=0X33333333; //PE8-15 上拉输出
GPIOB->ODR|=0X00FF; //全部输出高
GPIOE->ODR|=0XFF00;
return t;
}
......
void LCD_Init(void)
{
RCC->APB2ENR|=1<<3;//先使能外设PORTB时钟
RCC->APB2ENR|=1<<4;//先使能外设PORTC时钟
RCC->APB2ENR|=1<<6;//ENABLE PORTC
RCC->APB2ENR|=1<<0; //开启辅助时钟
JTAG_Set(SWD_ENABLE); //开启SWD
//PORTC6,7,11,12,10,复用推挽输出
GPIOC->CRH&=0XFFF000FF;
GPIOC->CRH|=0X00033300;
GPIOC->CRL&=0X00FFFFFF;
GPIOC->CRL|=0X33000000;
GPIOC->ODR|=0X1CC0;
//PORTB,E 推挽输出
GPIOB->CRL=0X33333333;
GPIOE->CRH=0X33333333;
GPIOB->ODR|=0X00FF;
GPIOE->ODR|=0XFF00;
......
这两个文件里其他涉及到寄存器操作的地方我都一样的改了,但是LCD不正常工作。
求大神指点!!!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
像原子哥说的,现在只能一步一步查问题
一周热门 更多>