|
stm32f103c8t6單片機,lcd12864液晶顯示屏
用st-link下載程序后,顯示屏不顯示“welcome” (程序要求顯示welcome)
有大佬幫忙解答一下嗎? 謝謝!
接線:
#define LCD_GPIO GPIOA
#define LCD_EN PAout(2)
#define LCD_RW PAout(1)
#define LCD_RS PAout(0
下面是lcd12864.c函數
#include "lcd12864.h"
void delay20ms()
{
unsigned int i = 50;
while(i)
{
i = i - 1;
}
}
void LCD12864_int(void)
{
GPIO_Configuration();
// the initial delay time i make it all the same
//初始化命令之間的延時所有定義為最長延時,20ms 手冊上說是10 ms
//這個延時可能會有點怪,我是為了后面還有作用,測試他的極限延時,
send_cmd(0x34) ;
delay20ms();
send_cmd(0x30) ;
delay20ms();
send_cmd(0x0c) ;
delay20ms();
send_cmd(0x01) ;
delay20ms();
send_cmd(0x06) ;
delay20ms();
}
//指定在液晶的哪一行顯示
void LCD12864_Pos(unsigned char x, unsigned char y)
{
unsigned char pos = 0;
send_cmd(0x30); //這里是最重要的 //,不同的功能切換的時候事先一定要聲明是在哪個模式下的命令
if(x == 0)
x = 0x80;
else if(x == 1)
x = 0x90;
else if(x == 2)
x = 0x88;
else if(x == 3)
x = 0x98;
pos = x + y;
send_cmd(pos);
}
//顯示一個數據函數
void show_word(unsigned char ch)
{
unsigned char data; //發送數據,也是要分三個字節來發送,注意這次是fa開頭,是發送,且發送的是數據的意思
LCD_RS=1;
data = ch;
spi_function(0x0fa);
spi_function(data & 0xf0);
spi_function( (data << 4) & 0xf0);
LCD_RS=0;
}
void GPIO_Configuration()
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Pin = LCD_EN | LCD_RW | LCD_RS ;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(LCD_GPIO, &GPIO_InitStructure);
GPIO_SetBits(LCD_GPIO, LCD_EN | LCD_RW | LCD_RS); // turn off all led
}
//其實這貨是不是100us,我是沒算過,隨便給它個數值,讓他自己玩兒去。
void delay100us(void)
{
unsigned int i = 50;
while(i)
{
i = i - 1;
}
}
void spi_function(unsigned char del)
{
unsigned char i = 8 , data;
data = del;
LCD_EN=1; //每次發送的數據或者命令的話,都先拉高時鐘線和數據線
LCD_RW=1;
delay100us();
while(i)
{
if(data & 0x80)
LCD_RW=1;
else
LCD_RW=0;
delay100us();
LCD_EN = 0; //時鐘線拉高,延時一段時間再拉低,拉低意味著數據線上的數據要被12864鎖存了
delay100us();
delay100us();
LCD_EN=1;
delay100us();
data = data << 1;
i = i -1;
}
}
void send_cmd(unsigned char com) //發送命令,分三個字節發送,注意第一個字節哦,f8,是指發送動作,且是發送命令
{
unsigned char data;
LCD_RS=1;
data = com;
spi_function(0x0f8);
spi_function(data & 0xf0);
spi_function( (data << 4) & 0xf0);
LCD_RS=0;
}
void LCD12864_write(unsigned char cmd,unsigned char dat)
{
unsigned char data; //發送數據,也是要分三個字節來發送,注意這次是fa開頭,是發送,且發送的是數據的意思
LCD_RS=1;
data = dat;
if(cmd!=0) spi_function(0x0fa);
else spi_function(0x0f8);
spi_function(data & 0xf0);
spi_function( (data << 4) & 0xf0);
LCD_RS=0;
}
void LCD12864_writebyte(unsigned char *prointer)
{
while(*prointer!='\0')
{
LCD12864_write(1,*prointer);
prointer++;
}
}
void LCD12864_clear(void)
{
send_cmd(0x01); //清屏指令
delay_ms(2);
}
|
|