最近对液晶屏感兴趣,在冯大侠手里买了一块,到手之后在51上面可以驱动正常显示各种画面,但是 我把驱动程序修改 移植到STM32的开发环境下面,程序不工作了 十分郁闷,忘高手指点一二,不胜感激!
备注:keilV4开发环境,修改的地方为
//DP_L = j; //DP_L为8位单片机里面的P1端口
//DP_H = j>>8; //DP_H为8位单片机里面的P2端口
DATAOUT(j); //#define DATAOUT(x) GPIOB->ODR=x; //数据输出
我的方法是将原来P1、P2两个端口的地方 全部修改为 dataout()输出,但是 到最后不行。
#include <stm32f10x_lib.h>
#include "sys.h"
#include "usart.h"
#include "delay.h"
//指示程序运行的led
#define LED0 PAout(8)// PA8
#define LED1 PDout(2)// PD2
//各个控制端
#define CS PCout(0)
#define RS PCout(2)
#define WRITE PCout(3)
#define READ PCout(10)
#define REST PCout(13)
//PB作为数据输出端口
#define DATAOUT(x) GPIOB->ODR=x; //数据输出
#define DATAIN GPIOB->IDR; //数据输入
/*************************************************
//初始化名字是LED,里面包含lcd各个端口的初始化
************************************************/
void LED_Init(void)
{
RCC->APB2ENR|=1<<2; //使能PORTA时钟
RCC->APB2ENR|=1<<3; //使能PORTB时钟
RCC->APB2ENR|=1<<4; //使能PORTC时钟
RCC->APB2ENR|=1<<5; //使能PORTD时钟
GPIOA->CRH&=0XFFFFFFF0;
GPIOA->CRH|=0X00000003;//PA8 推挽输出
GPIOA->ODR|=1<<8; //PA8 输出高
GPIOD->CRL&=0XFFFFF0FF;
GPIOD->CRL|=0X00000300;//PD.2推挽输出
GPIOD->ODR|=1<<2; //PD.2输出高
GPIOC->CRL&=0XFFFF00F0;
GPIOC->CRL|=0X00003303;//PC0.2.3 推挽输出
GPIOC->CRH&=0XFF0FF0FF;
GPIOC->CRH|=0X00300300; //PC10.13推挽输出
GPIOC->ODR=0XFFFF; //PC上拉
GPIOB->CRH&=0X00000000;
GPIOB->CRH|=0X33333333;//PB 推挽输出
GPIOB->CRL&=0X00000000;
GPIOB->CRL|=0X33333333;//PB 推挽输出
GPIOB->ODR=0XFFFF; //PB上拉
}
/*************************************
//写命令
************************************/
void wr_comm(unsigned int index)
{
RS = 0;
delay_us(2);
CS = 0;
//DATAOUT(0);
DATAOUT(index);
//DP_L = index;
//DP_H = index>>8;
delay_us(2);
WRITE = 0;
delay_us(2);
WRITE = 1;
delay_us(2);
CS = 1;
}
/*************************************
//写数据
************************************/
void wr_dat(unsigned int dat)
{
RS = 1;
delay_us(2);
CS = 0;
DATAOUT(dat);
delay_us(2);
WRITE = 0;
delay_us(2);
WRITE = 1;
delay_us(2);
CS = 1;
}
/*************************************
//lcd初始化
************************************/
void lcd_int(void)
{
wr_comm(0x0011);
delay_ms(20);
wr_comm(0x00D0);
wr_dat(0x0007);
wr_dat(0x0042);
wr_dat(0x001C);
wr_comm(0x00D1);
wr_dat(0x0000);
wr_dat(0x0028);
wr_dat(0x0016);
wr_comm(0x00D2);
wr_dat(0x0001);
wr_dat(0x0011);
wr_comm(0x00E4);
wr_dat(0x00a0);
wr_comm(0x00F3);
wr_dat(0x0000);
wr_dat(0x002A);
wr_comm(0x00C0);
wr_dat(0x0010);
wr_dat(0x003B);
wr_dat(0x0000);
wr_dat(0x0002);
wr_dat(0x0011);
wr_comm(0x00C5);
wr_dat(0x0002);
wr_comm(0x00C8);
wr_dat(0x0000);
wr_dat(0x0035);
wr_dat(0x0023);
wr_dat(0x0007);
wr_dat(0x0000);
wr_dat(0x0004);
wr_dat(0x0045);
wr_dat(0x0053);
wr_dat(0x0077);
wr_dat(0x0070);
wr_dat(0x0000);
wr_dat(0x0004);
wr_comm(0x0036);
wr_dat(0x000A);
wr_comm(0x003A);
wr_dat(0x0055);
wr_comm(0x002A);
wr_dat(0x0000);
wr_dat(0x0000);
wr_dat(0x0001);
wr_dat(0x003F);
wr_comm(0x002B);
wr_dat(0x0000);
wr_dat(0x0000);
wr_dat(0x0001);
wr_dat(0x00E0);
delay_ms(20);
wr_comm(0x0029);
}
//=================================单 {MOD}画面======================================//
void dis_color2(unsigned int j)
{
unsigned int i,m;
wr_comm(0x002C);
delay_us(2);
RS = 1;
delay_us(2);
CS = 0;
for(i=0;i<480;i++)
for(m=0;m<320;m++)
{
//DP_L = j; //DP_L为8位单片机里面的P1端口
//DP_H = j>>8; //DP_H为8位单片机里面的P2端口
DATAOUT(j); //#define DATAOUT(x) GPIOB->ODR=x; //数据输出
WRITE = 0;
delay_us(10);
WRITE = 1;
}
CS = 1;
}
/*************************************
//主函数
************************************/
int main(void)
{
Stm32_Clock_Init(9);//系统时钟设置
delay_init(72); //延时初始化
LED_Init();
REST = 1;
delay_ms(10);
REST = 0;
delay_ms(20);
REST = 1;
delay_ms(10);
lcd_int();
delay_ms(100);
while(1)
{
dis_color2(0x0fe0);
delay_ms(1000);
LED0=~LED0;
}
}
一周热门 更多>