51驱动修改为STM32驱动不成功

2020-02-05 09:19发布

最近对液晶屏感兴趣,在冯大侠手里买了一块,到手之后在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()输出,但是 到最后不行。        
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
11条回答
xuxer110
2020-02-06 04:17
刚才粘贴的代码只是部分,下面是全部的
#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;       
        }                                                                                            
}

一周热门 更多>