如何定义,这程序是否有问题,问题出在那?
#include "stm32f10x.h" // Device header
#include "Delay.h"
#include "LCD.h"
#define RST_0 GPIO_SetBits(GPIOB,GPIO_Pin_15)
#define RST_1 GPIO_ResetBits(GPIOB,GPIO_Pin_15)
#define PSB_0 GPIO_SetBits(GPIOB,GPIO_Pin_14)
#define PSB_1 GPIO_ResetBits(GPIOB,GPIO_Pin_14)
#define CS_0 GPIO_SetBits(GPIOB,GPIO_Pin_13)
#define CS_1 GPIO_ResetBits(GPIOB,GPIO_Pin_13)
#define SID_0 GPIO_SetBits(GPIOB,GPIO_Pin_12)
#define SID_1 GPIO_ResetBits(GPIOB,GPIO_Pin_12)
#define SCLK_0 GPIO_SetBits(GPIOB,GPIO_Pin_11)
#define SCLK_1 GPIO_ResetBits(GPIOB,GPIO_Pin_11)
#define WRITE_CMD 0xF8//写命令
#define WRITE_DAT 0xFA//写数据
void lcd12864_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15|GPIO_Pin_14|GPIO_Pin_13|GPIO_Pin_12|GPIO_Pin_11;
GPIO_InitStructure.GPIO_Speed= GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
SID_1;
SCLK_1;
}
void send_dat(u8 dat)
{
u8 i;
for(i = 0;i < 8;i++)
{
if((dat& 0x80)==0x80)
SID_1;
if((dat& 0x80)==0x00)
SID_0;
SCLK_0;
Delay_ms(50);
SCLK_1;
dat<<=1;
}
}
/*!
* @brief LCD写指令
* @param Cmd 要写入的指令
*/
void send_cmd(u8 Cmd )
{
Delay_ms(1);
send_dat(WRITE_CMD);
send_dat(Cmd&0xf0);
send_dat((Cmd&0x0f)<<4);
}
/*!
* @brief LCD写数据
* @param Dat 要写入的数据
*/
void write_char(u8 Dat )
{
Delay_ms(1);
send_dat(WRITE_DAT);
send_dat(Dat&0xf0);
send_dat((Dat&0x0f)<<4);
}
/*!
* @brief LCD初始化
* @param None
*/
void Lcd_Init(void)
{
RST_0;
Delay_ms(50);
RST_1;
Delay_ms(50);
CS_1;
Delay_ms(50);
send_cmd(0x30);
Delay_ms(1);
send_cmd(0x0c);
Delay_ms(1);
send_cmd(0x01);
Delay_ms(30);
send_cmd(0x02);
Delay_ms(30);
send_cmd(0x80);
PSB_0;
}
void lcd_addr(uint8_t y_add,uint8_t x_add)
{
switch(y_add)
{
case 1:
send_cmd(0x80|x_add);break;
case 2:
send_cmd(0x90|x_add);break;
case 3:
send_cmd(0x88|x_add);break;
case 4:
send_cmd(0x98|x_add);break;
default:break;
}
}
/*!
* @brief 显示字符或汉字
* @param x: row(0~3)
* @param y: line(0~7)
* @param str: 要显示的字符或汉字
*/
void LCD_Display_Words(uint8_t y_add,uint8_t x_add , char *str)
{
uint8_t i;
lcd_addr(y_add,x_add);
for(i=0;str!='\0';i++)
{
write_char(str);
}
}
/*!
* @brief 清屏函数
* @param None
*/
void LCD_Clear(void)
{
send_cmd(0x01);
Delay_ms(2);
}
|