OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6068|回复: 3

求大神指导9341高8位驱动

[复制链接]

7

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2013-11-2
在线时间
13 小时
发表于 2014-7-3 11:09:38 | 显示全部楼层 |阅读模式
5金钱
#include "lcd.h"
#include "delay.h"
//#include "stdlib.h"



u16 POINT_COLOR = Black,BACK_COLOR = White; //背景色:白  画点色:黑      

//写数据函数
void LCD_WR_DATA(u8 data)


LCD_CS_CLR;   //拉低有效
LCD_RD_SET;             //开启
LCD_RS_SET;              //读写数据
  DATAOUT(data); 
LCD_WR_CLR;           //写入
LCD_WR_SET;              //写完
  LCD_CS_SET;             //释放器件
  
}

//写寄存器函数
void LCD_WR_REG(u8 reg)
{
    
LCD_CS_CLR; //片选
LCD_RD_SET;             //开启
LCD_RS_CLR;              //读写命令  
    DATAOUT(reg);
    LCD_WR_CLR;
LCD_WR_SET;              //写完
  LCD_CS_SET;              //释放器件

}



//读数据
u16 LCD_ReadData(void)
{
    u8 t;   
    LCD_RS_SET;
LCD_WR_SET;
LCD_RD_CLR;
    t = GPIOA->IDR;
    GPIOA->CRH = 0x33333333;
LCD_RD_SET;
    return t;  
}   

//读寄存器
u16 LCD_ReadReg(void) 
{
    u16 reg;

LCD_CS_CLR;
LCD_WR_REG(reg);     
reg = LCD_ReadData();      
    LCD_CS_SET;
return reg;
}
 


//LcdWriteColorData
//写液晶颜色数据
void LcdWriteColorData(u16 color)  
{
  LCD_CS_CLR;
LCD_RD_SET;
LCD_RS_SET;
GPIOA->ODR=(color>>8); //先写入高8位
LCD_WR_CLR;
LCD_WR_SET;
GPIOA->ODR=color; //写入低8位
LCD_WR_CLR;
LCD_WR_SET;
LCD_CS_SET;
}



//LCD初始化
void LCD_Init(void)

   //GPIOB.0为RD引脚,GPIOB.1为WR引脚
GPIOB->BSRR = (BV(0)|BV(1));
GPIOB->CRL &= 0xffffff00;
GPIOB->CRL |= 0x00000033;

//GPIOC.11,15推挽输出
GPIOC->BSRR = (BV(11)|BV(15));
GPIOC->CRH &= 0x0fff0fff;
GPIOC->CRH |= 0x30003000;

//GPIOA.8-15为屏数据线
GPIOA->CRH = 0x33333333;
GPIOA->ODR|= 0Xffff;



//背光PB.15推挽输出
GPIOB->BSRR = BV(15);
    GPIOB->CRH &= 0x0fffffff;
GPIOB->CRH |= 0x30000000;
    



//GPIOC.14为复位  推挽输出
LCD_REST_SET;
    delay_ms(70);
LCD_REST_CLR;
delay_ms(140);
    LCD_REST_SET;
GPIOC->CRH &= 0xf0ffffff;
GPIOC->CRH |= 0x03000000;

delay_ms(280);

//************* Start Initial Sequence **********//
    LCD_WR_REG(0xCB); //AP[2:0] 
    LCD_WR_DATA(0x01); 

LCD_WR_REG(0xC0); //Power control 
LCD_WR_DATA(0x26);//VRH[5:0] 
LCD_WR_DATA(0x01);//VC[2:0] 

LCD_WR_REG(0xC1); //Power control 
LCD_WR_DATA(0x10);//SAP[2:0];BT[3:0] 

LCD_WR_REG(0xC5); //VCM control 
LCD_WR_DATA(0x31); 
LCD_WR_DATA(0x3C);

LCD_WR_REG(0x26); //Gamma curve selected 
LCD_WR_DATA(0x01);

LCD_WR_REG(0xB6);
LCD_WR_DATA(0xA0); 
LCD_WR_DATA(0xC2); 
  


LCD_WR_REG(0x3A); //Set_pixel_format
LCD_WR_DATA(0x05); //64k color

LCD_WR_REG(0xE0); //Set Gamma  正极伽马校准
LCD_WR_DATA(0x10); 
LCD_WR_DATA(0x10); 
LCD_WR_DATA(0x10); 
LCD_WR_DATA(0x08); 
LCD_WR_DATA(0x0E); 
LCD_WR_DATA(0x06); 
LCD_WR_DATA(0x42); 
LCD_WR_DATA(0x28); 
LCD_WR_DATA(0x36); 
LCD_WR_DATA(0x03); 
LCD_WR_DATA(0x0E); 
LCD_WR_DATA(0x04); 
LCD_WR_DATA(0x13); 
LCD_WR_DATA(0x0E); 
LCD_WR_DATA(0x0C); 
  
LCD_WR_REG(0XE1); //Set Gamma 负极伽马校准
LCD_WR_DATA(0x0C); 
LCD_WR_DATA(0x23); 
LCD_WR_DATA(0x26); 
LCD_WR_DATA(0x04); 
LCD_WR_DATA(0x0C); 
LCD_WR_DATA(0x04); 
LCD_WR_DATA(0x39); 
LCD_WR_DATA(0x24); 
LCD_WR_DATA(0x4B); 
LCD_WR_DATA(0x03); 
LCD_WR_DATA(0x0B); 
LCD_WR_DATA(0x0B); 
LCD_WR_DATA(0x33); 
LCD_WR_DATA(0x37); 
LCD_WR_DATA(0x0F); 


LCD_WR_REG(0x36);   // Memory Access Control 
LCD_WR_DATA(0x60);   // 横屏:左上角到(起点)到右下角(终点)扫描方式
LCD_WR_REG(0x2a);  
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x01);
LCD_WR_DATA(0x3f);


LCD_WR_REG(0x2b); //  
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0xef);


LCD_WR_REG(0x11); //Exit Sleep 
delay_ms(120); 
LCD_WR_REG(0x29); //display on 开显示
delay_ms(120);
LCD_WR_REG(0x2c); 


}



//SetDisplayArea
//设置显示区域
void SetDisplayArea(u16 StartX,u16 StartY,u16 EndX,u16 EndY)
{
LCD_WR_REG(0x2a);
LCD_WR_DATA(StartX>>8);
LCD_WR_DATA(StartX);
LCD_WR_DATA(EndX>>8);
LCD_WR_DATA(EndX);
LCD_WR_REG(0x2b);
LCD_WR_DATA(StartY>>8);
    LCD_WR_DATA(StartY);
    LCD_WR_DATA(EndY>>8);
LCD_WR_DATA(EndY);
LCD_WR_REG(0x2c);

}




//LcdFill
//填充LCD
void LcdFill(u16 x,u16 y,u16 Width,u16 Height,u16 color)
{
    SetDisplayArea(x, y, (x+Width-1), (y+Height-1));
for(x=0;x<Width;x++)
{
for(y=0;y<Height;y++)
{
LcdWriteColorData(color);
}
}
}



//LcdClear
//清除LCD
void LcdClear(u16 color)
{   
  u16 i, j;
   
    SetDisplayArea(0, 0, 319,239);   
    for(i=0;i<240;i++)
    for(j=0;j<320;j++) 
    LcdWriteColorData(color);  
}

只能点亮但不显示颜色啊    

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-7-3 12:17:23 | 显示全部楼层
http://www.openedv.com/posts/list/35740.htm这帖子工程代码里面LCD驱动有支持8位的,自己移植一下即可完成
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

7

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2013-11-2
在线时间
13 小时
 楼主| 发表于 2014-7-3 12:43:13 | 显示全部楼层
回复【2楼】Badu_Space:
--------------------------------
还是不行  我这个屏是3.2的  代码是买的时候厂家给的
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-7-3 12:45:39 | 显示全部楼层
仔细看数据手册的说明吧
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-6 13:26

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表