本人菜鸟一枚,初次用stm32f103rc的芯片串行驱动12864,一直显示不出字,问一下问题在哪里?
硬件上定义的pc口的6,7,8,9,10分别定义的RS,SID,CLK,PSB,RST,硬件上电压5V没问题。
下面是程序:
#include"stm32f10x.h"
#include"stm32f10x_gpio.h"
#include"stm32f10x_rcc.h"
#define Line1 0x80 //液晶显示第一行
#define Line2 0x90 //液晶显示第二行
#define Line3 0x88 //液晶显示第三行
#define Line4 0x98 //液晶显示第四行
#define LCD_IO GPIOC
#define RS GPIO_Pin_6
#define SID GPIO_Pin_7
#define CLK GPIO_Pin_8
#define PSB GPIO_Pin_9
#define RST GPIO_Pin_10
#define SET(n) GPIO_SetBits(GPIOC,n)
#define RESET(n) GPIO_ResetBits(GPIOC,n)
#define CMD (uint32_t)0xf8000000
#define DATE (uint32_t)0xfa000000
GPIO_InitTypeDef GPIO_InitStructure;
void LCD_IOinit_OUT(void);
void LCD_Write(uint32_t cmd,uint8_t ddate);
void Display(uint8_t addr,uint8_t *hz);
void LCD_init(void);
void delay_ms(unsigned int ms);
void delay_us(unsigned int us);
int main(void)
{
LCD_IOinit_OUT();
LCD_init();
while(1)
{
Display(Line1,"1111");
Display(Line2,"2222");
Display(Line3,"3333");
Display(Line4,"4444");
}
}
void LCD_IOinit_OUT(void)
{
SystemInit();
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
GPIO_InitStructure.GPIO_Pin =RS|SID|CLK|PSB|RST;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(LCD_IO, &GPIO_InitStructure);
}
void LCD_Write(uint32_t cmd,uint8_t ddata)
{
uint32_t temp = cmd;
uint32_t i;
RESET(RS);
temp|=((uint32_t)(ddata&(uint8_t)0xf0)<<16)+((uint32_t)(ddata&(uint8_t)0x0f)<<12);
SET(RS);
for(i=0;i<24;i++)
{
if(temp&0x80000000)
SET(SID);
else
RESET(SID);
SET(CLK);
Dalay(2);
RESET(CLK);
temp=temp<<1;
}
RESET(RS);
}
void Display(uint8_t addr,uint8_t *hz)
{
LCD_Write(CMD,addr);
Dalay(3);
while(*hz!='\0')
{
LCD_Write(DATE,*hz);
hz++;
Dalay(3);
}
}
void LCD_init(void)
{
delay_ms(40);
RESET(RS);
RESET(PSB);
RESET(RST);
delay_us(100);
SET(RST);
delay_us(40);
LCD_Write(CMD,0x30);
delay_us(40);
LCD_Write(CMD,0x0c);
delay_us(40);
LCD_Write(CMD,0x01);
delay_us(40);
LCD_Write(CMD,0x06);
delay_us(40);
}
void delay_us(unsigned int us)
{
unsigned char i;
us=us*5/4;
for( i=0;i<us;i++);
}
void delay_ms(unsigned int ms)
{
unsigned int i,j;
for( i=0;i<ms;i++)
for(j=0;j<1141;j++);
}
|