本帖最后由 duzhongliang 于 2014-4-21 21:47 编辑
PSB直接接的5V电压,PE的7、8、9、10、依次接RS、R/W、E、RST,PC口的高八位用于数据传输,Vo直接接3.3V电压。
/* Includes ------------------------------------------------------------------*/
#include "stm32f10x.h"
#define yanshi 66
uint8_t mingzi[]={"我非常喜欢大闸蟹"};
void delay(unsigned int ms)
{
unsigned int x,y;
for(x=0;x<ms;x++)
for(y=0;y<8000;y++);
}
void IOInit(void){
GPIO_InitTypeDef GPIOD_InitStructure;//定义GPIO的结构体
GPIOD_InitStructure.GPIO_Pin = GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
GPIOD_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIOD_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);//打开GPIOD时钟
GPIO_Init(GPIOD, &GPIOD_InitStructure); //初始化IO口
GPIO_InitTypeDef GPIOE_InitStructure;//定义GPIO的结构体
GPIOE_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIOE_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIOE_InitStructure.GPIO_Pin = GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);
GPIO_Init(GPIOE, &GPIOE_InitStructure); //初始化IO口
}
void IOInit_GPIO_Pin_15_In(void){
GPIO_InitTypeDef GPIOC_InitStructure;//定义GPIO的结构体
GPIOC_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIOC_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIOC_InitStructure.GPIO_Pin = GPIO_Pin_15;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
GPIO_Init(GPIOC, &GPIOC_InitStructure); //初始化IO口
}
void IOInit_GPIOC_Out(void){
GPIO_InitTypeDef GPIOC_InitStructure;//定义GPIO的结构体
GPIOC_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIOC_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIOC_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
GPIO_Init(GPIOC, &GPIOC_InitStructure); //初始化IO口
}
void RDBF(void){
uint8_t temp;
// IOInit_GPIO_Pin_15_Out();
// GPIO_SetBits(GPIOC, GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15);//data 0-7
GPIO_ResetBits(GPIOE,GPIO_Pin_7);//RS
GPIO_SetBits(GPIOE, GPIO_Pin_8);//RW
IOInit_GPIO_Pin_15_In();
while(1){
GPIO_SetBits(GPIOE, GPIO_Pin_9);//E
delay(yanshi);
temp=GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_15);
GPIO_ResetBits(GPIOE,GPIO_Pin_9);//E
if(temp==0)break;
}
}
void WRCommand(uint8_t temp){
RDBF();
IOInit_GPIOC_Out();
GPIO_ResetBits(GPIOE, GPIO_Pin_7|GPIO_Pin_8);
GPIO_Write(GPIOC,(uint16_t)temp<<8);
GPIO_SetBits(GPIOE, GPIO_Pin_9);
delay(yanshi);
GPIO_ResetBits(GPIOE, GPIO_Pin_9);
}
void WRData(uint8_t temp){
RDBF();
IOInit_GPIOC_Out();
GPIO_SetBits(GPIOE, GPIO_Pin_7);
GPIO_ResetBits(GPIOE,GPIO_Pin_8);
GPIO_Write(GPIOC,(uint16_t)temp<<8);
GPIO_SetBits(GPIOE, GPIO_Pin_9);
delay(yanshi);
GPIO_ResetBits(GPIOE, GPIO_Pin_9);
}
void LCDInit(void){
delay(55);
GPIO_ResetBits(GPIOE, GPIO_Pin_10);
delay(55);
GPIO_SetBits(GPIOE, GPIO_Pin_10);
WRCommand(0x30);
WRCommand(0x02);
WRCommand(0x0C);
WRCommand(0x01);
WRCommand(0x06);
// WRCommand(0x80);
}
void LCDClear(void){
WRCommand(0x01);
WRCommand(0x34);
WRCommand(0x30);
}
void ShowQQChar(uint8_t addr,uint8_t *english,uint8_t count){
uint8_t i;
WRCommand(addr);
for(i=0;i<count;i++){
WRData(english[i*2]);
WRData(english[i*2+1]);
}
}
void ShowNUMChar(uint8_t addr,uint8_t i,uint8_t count){
uint8_t j;
for(j=0;j<count;){
WRCommand(addr);
WRData(i+j);
j++;
WRData(i+j);
addr++;
j++;
}
}
int main(void)
{
uint8_t temp=0x80;
SystemInit();
IOInit();
// ShowNUMChar(0x9000,0x01,0x0F);
while (1)
{
LCDInit();
//LCDClear();
ShowQQChar(0x80,mingzi,8);
delay(69);
GPIO_SetBits(GPIOD, GPIO_Pin_13|GPIO_Pin_15);//置高IO口
delay(69);
GPIO_SetBits(GPIOE, GPIO_Pin_11);
if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_11))
GPIO_ResetBits(GPIOD, GPIO_Pin_15) ;
GPIO_Write(GPIOD,temp<<7);
WRCommand(0x01);
}
}
|
|