新手上路
- 积分
- 29
- 金钱
- 29
- 注册时间
- 2013-3-4
- 在线时间
- 0 小时
|

楼主 |
发表于 2013-3-5 23:19:45
|
显示全部楼层
回复【3楼】guo__qiu:
---------------------------------
我是第一次弄这个,网上说就是模拟io口,弄好时序就行了,可我是第一次弄,可以说全都是抄来的。算了,还是贴代码吧。请版主看看了。
/******************************************/
/* 数据输出 */
/******************************************/
void LCD_DATAOUT(u16 data)
{
GPIOA->CRH &= 0XFFF00000; //PA8~12 推挽输出模式
GPIOA->CRH |= 0X00033333;
GPIOB->CRH &= 0X000FFFFF; //PB13~15 推挽输出模式
GPIOB->CRH |= 0X33300000;
GPIOD->CRL &= 0XFFFFF0FF; //PD2 推挽输出模式
GPIOD->CRL |= 0X00000300;
GPIOC->CRL &= 0X00FFFFFF; //PC6~7 推挽输出模式
GPIOC->CRL |= 0X33000000;
GPIOC->CRH &= 0XFFF00000; //PC8~12 推挽输出模式
GPIOC->CRH |= 0X00033333;
//GPIOB->CRL=0X33333333; //PB0-7 推挽输出
//GPIOB->CRH=0X33333333; //PB8-15 推挽输出
//放入端口输出数据寄存器中
//PD2 <--> DB1
GPIO_Write(GPIOD, ((GPIOD->ODR&0XFFFB)|(data&0X0001)<<2));
// PC6 <---> DB14(12)
// PC7 <---> DB13(11)
// PC8 <---> DB12(10)
// PC9 <---> DB11(9)
// PC10 <---> DB4 (3)
// PC11 <---> DB3 (2)
// PC12 <---> DB2 (1)
GPIO_Write(GPIOC, ((GPIOC->ODR&0xE03F)| (data&0x0002)<<10 | \
(data&0x0004)<<8 | (data&0x0008)<<6 | \
(data&0x0200)>>0 | (data&0x0400)>>2 | \
(data&0x0800)>>4 | (data&0x1000)>>6 ));
//PB15 <---> DB15 (13)
//PB14 <---> DB16 (14)
//PB13 <---> DB17 (15)
GPIO_Write(GPIOB, ((GPIOB->ODR&0x1FFF)| (data&0x2000)<<2 | \
(data&0x4000)<<0 | (data&0x8000)>>2));
//PA8 <---> DB10 (8)
//PA9 <---> DB8 (7)
//PA10 <---> DB7 (6)
//PA11 <---> DB6 (5)
//PA12 <---> DB5 (4)
GPIO_Write(GPIOA, ((GPIOA->ODR&0xE0FF)| (data&0x0100)<<0 | \
(data&0x0080)<<2 | (data&0x0040)<<4 | \
(data&0x0020)<<6 | (data&0x0010)<<8));
}
/******************************************/
/* 数据输入 */
/******************************************/
u16 LCD_DATAIN()
{
u16 data;
GPIOA->CRH &= 0XFFF00000; //PA8~12 上拉输入
GPIOA->CRH |= 0X00088888;
GPIOB->CRH &= 0X000FFFFF; //PB13~15 上拉输入
GPIOB->CRH |= 0X88800000;
GPIOD->CRL &= 0XFFFFF0FF; //PD2 上拉输入
GPIOD->CRL |= 0X00000800;
GPIOC->CRL &= 0X00FFFFFF; //PC6~7 上拉输入
GPIOC->CRL |= 0X88000000;
GPIOC->CRH &= 0XFFF00000; //PC8~12 上拉输入
GPIOC->CRH |= 0X00088888;
data = (GPIO_ReadInputData(GPIOA)&0x1F00) | \
(GPIO_ReadInputData(GPIOB)&0xE000) | \
(GPIO_ReadInputData(GPIOC)&0x1FB0) | \
(GPIO_ReadInputData(GPIOD)&0x0004) ;
return data;
} |
|