调了很久,没调通,用的是厂家提供的51模拟8080代码,但我的主控是stm32f103zet6,修改了相应管脚的驱动代码,但驱动不起来!
麻烦各位大神支招!万分感谢!
[mw_shl_code=c,true]#include "lcd.h"
#include "delay.h"
#include "stm32f10x_rcc.h"
/*
*
* PB3 -> RD
* PB4 -> WR
* PB5 -> RS
* PB8 -> RESET
* PB9 -> CS
*
* PA8~PA15 -> D[0..7]
*
* ???è???? ????
*
*/
/*
*
* LCD ????????????
*
*/
void LCD_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB,ENABLE);
//????5????????????????
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_8 | GPIO_Pin_9;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitStructure);
//????8????????????????
GPIO_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;
GPIO_Init(GPIOA,&GPIO_InitStructure);
}
void Delayms(uint32_t t)
{
delay_ms(t);
}
//????????i????????8????j????????8??
void write_data(int8_t i,int8_t j)
{
CS(0);
RS(1);
RD(1);
OutPut_Data(i);
WR(0);
delay_us(1);//???????????????????©????????
WR(1);
OutPut_Data(j);
WR(0);
delay_us(1);//???????????????????©????????
WR(1);
CS(1);
}
//????????
void data_out(int8_t b)
{
/*
CS(0);
RD(1);
RS(1);
//WR(0);
OutPut_Data(b);
WR(0);
delay_us(1);//???????????????????©????????
WR(1);
//RS(0);
RD(1);
CS(1);
*/
OutPut_Data(b);
RS(1);
CS(0);
WR(0);
WR(1);
CS(1);
RS(1);
}
//?????ü??
void comm_out(int8_t m)
{
/*
CS(0);
RD(1);
RS(0);
//WR(0);
OutPut_Data(m);
WR(0);
delay_us(1);//???????????????????©????????
WR(1);
RS(0);
RD(1);
CS(1);
*/
OutPut_Data(m);
RS(0);
CS(0);
WR(0);
WR(1);
CS(1);
RS(1);
}
void Initial_ILI9163(void)
{
LCD_GPIO_Init();
RES(1);
delay_ms(10);
RES(0);
delay_ms(50);
RES(1);
delay_ms(100);
comm_out(0x11); //Exit Sleep
Delayms(20);
comm_out(0x26); //Set Default Gamma
data_out(0x04);
comm_out(0xF2); //E0h & E1h Enable/Disable
data_out(0x00);
comm_out(0xB1);
data_out(0x0C);
data_out(0x14);
comm_out(0xC0); //Set VRH1[4:0] & VC[2:0] for VCI1 & GVDD
data_out(0x0C);
data_out(0x05);
comm_out(0xC1); //Set BT[2:0] for AVDD & VCL & VGH & VGL
data_out(0x02);
comm_out(0xC5); //Set VMH[6:0] & VML[6:0] for VOMH & VCOML
data_out(0x32);
data_out(0x3B);
comm_out(0xC7);
data_out(0x40);
comm_out(0x2A); //Set Column Address
data_out(0x00);
data_out(0x00);
data_out(0x00);
data_out(0x7F);
comm_out(0x2B); //Set Page Address
data_out(0x00);
data_out(0x00);
data_out(0x00);
data_out(0x9F);
comm_out(0x36); //Set Scanning Direction
data_out(0xC0);
comm_out(0x3A);
data_out(0x55);
comm_out(0x29); // Display On
}
void display_black(void)
{
int j;
int i;
comm_out(0x2A);
data_out(0x00);
data_out(0x00);
data_out(0x00);
data_out(0x7F);
comm_out(0x2B);
data_out(0x00);
data_out(0x00);
data_out(0x00);
data_out(0x9F);
comm_out(0x2C); //??RGB?????°???ü??
for(i=0;i<128;i++)
for(j=0;j<128;j++)
write_data(0x00,0x00);
Delayms(10);
}
void display_white(void)
{
int j;
int i;
comm_out(0x2A);
data_out(0x00);
data_out(0x00);
data_out(0x00);
data_out(0x7F);
comm_out(0x2B);
data_out(0x00);
data_out(0x00);
data_out(0x00);
data_out(0x9F);
comm_out(0x2C);
for(i=0;i<128;i++)
for(j=0;j<128;j++)
write_data(0xff,0xff);
Delayms(10);
}
void display_red(void)
{
int j;
int i;
comm_out(0x2A);
data_out(0x00);
data_out(0x00);
data_out(0x00);
data_out(0x7F);
comm_out(0x2B);
data_out(0x00);
data_out(0x00);
data_out(0x00);
data_out(0x9F);
comm_out(0x2C);
for(i=0;i<128;i++)
for(j=0;j<128;j++)
write_data(0xf8,0x00);
Delayms(10);
}
void display_green(void)
{
int j;
int i;
comm_out(0x2A);
data_out(0x00);
data_out(0x00);
data_out(0x00);
data_out(0x7F);
comm_out(0x2B);
data_out(0x00);
data_out(0x00);
data_out(0x00);
data_out(0x9F);
comm_out(0x2C);
for(i=0;i<128;i++)
for(j=0;j<128;j++)
write_data(0x07,0xe0);
Delayms(10);
}
void display_blue(void)
{
int j;
int i;
comm_out(0x2A);
data_out(0x00);
data_out(0x00);
data_out(0x00);
data_out(0x7F);
comm_out(0x2B);
data_out(0x00);
data_out(0x00);
data_out(0x00);
data_out(0x9F);
comm_out(0x2C);
for(i=0;i<128;i++)
for(j=0;j<128;j++)
write_data(0x00,0x1f);
Delayms(10);
}
void LCD_Init(void)
{
LCD_GPIO_Init();
RES(1);
Delayms(30);
RES(0);
Delayms(60);
RES(1);
Delayms(60);
Initial_ILI9163();
Delayms(1500);
display_red();
Delayms(1500);
display_green();
Delayms(1500);
display_blue();
Delayms(1500);
display_white();
Delayms(1500);
display_black();
Delayms(1000);
}
[/mw_shl_code]
[mw_shl_code=c,true]#ifndef __LCD_H
#define __LCD_H
#include "stm32f10x_gpio.h"
#define RD(a) {if(a == 0) GPIO_ResetBits(GPIOB,GPIO_Pin_3);else GPIO_SetBits(GPIOB,GPIO_Pin_3);}
#define WR(a) {if(a == 0) GPIO_ResetBits(GPIOB,GPIO_Pin_4);else GPIO_SetBits(GPIOB,GPIO_Pin_4);}
#define RS(a) {if(a == 0) GPIO_ResetBits(GPIOB,GPIO_Pin_5);else GPIO_SetBits(GPIOB,GPIO_Pin_5);}
#define RES(a) {if(a == 0) GPIO_ResetBits(GPIOB,GPIO_Pin_8);else GPIO_SetBits(GPIOB,GPIO_Pin_8);}
#define CS(a) {if(a == 0) GPIO_ResetBits(GPIOB,GPIO_Pin_9);else GPIO_SetBits(GPIOB,GPIO_Pin_9);}
//????????????LCD??????????
#define OutPut_Data(LCD_DATA) GPIO_Write(GPIOA,((GPIOA->ODR&0X00FF)|(LCD_DATA << 8)))
void LCD_GPIO_Init(void);
void write_data(int8_t i,int8_t j);
void data_out(int8_t b);
void comm_out(int8_t m);
void Delayms(uint32_t t);
void Initial_ILI9163(void);
void display_black(void);
void display_white(void);
void display_red(void);
void display_green(void);
void display_blue(void);
void LCD_Init(void);
#endif
[/mw_shl_code]
|