初级会员

- 积分
- 95
- 金钱
- 95
- 注册时间
- 2013-11-2
- 在线时间
- 13 小时
|
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);
}
只能点亮但不显示颜色啊 |
|