⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd.c

📁 用s3c44b0实现320240LCD(比一般小)点亮,并有键盘功能
💻 C
字号:
#include <string.h>
#include "inc\44b.h"
#include "inc\option.h"
#include "inc\lcd.h"
#include "inc\gui.h"
#include "inc\config.h"

uint16 color[8]={0xF800,0x07E0,0x001F,0xFFE0,0x0000,0xFFFF,0x07FF,0xF81F};

/***********Delay100us******************/
static int Delay100usLoopCount = 400;
void Delay100us(int time)
{
	int i,adjust=0;
	if(time==0)
	{
		time=200;
		adjust=1;
		Delay100usLoopCount=400;
		rWTCON=((MCLK/1000000-1)<<8)|(2<<3);
		rWTDAT=0xffff;
		rWTCNT=0xffff;	 
		rWTCON=((MCLK/1000000-1)<<8)|(2<<3)|(1<<5);
	}
	for(;time>0;time--)
		for(i=0;i<Delay100usLoopCount;i++);
	if(adjust==1)
	{
		rWTCON=((MCLK/1000000-1)<<8)|(2<<3);
		i=0xffff-rWTCNT;
		Delay100usLoopCount=8000000/(i*64);
	}
}

/********************************
         写寄存器函数
********************************/

void LCD_WriteRegister(uint8 index)
{
	rPDATC = rPDATC&0xffef;
	rPDATC = rPDATC|0x0800;
	rPDATC = 0x0800|index;
	rPDATC = (rPDATC)&(0xfbff);
	rPDATC = rPDATC|0x0400;


}
/***************************
    写1字节数据函数
****************************/
void LCD_WriteByte(uint8 val )
{
    rPDATC = rPDATC|0x0100;//rs=1
	rPDATC = rPDATC|0x0800;//cs=1
	rPDATC = rPDATC|val;
	rPDATC = rPDATC|0xfbff;	//wr=0
	rPDATC = rPDATC&0x0400;//wr=1
}

/***************************************************
//写寄存器数据函数
//输入:type 数据位数: 1为16位,0为8位。
****************************************************/
void LCD_WriteCommand(uint8 type,uint8 index,uint16 value)
{
	rPDATC = rPDATC&0xffef;//rs=0
	rPDATC = rPDATC|0x0800;//cs=1
	rPDATC = 0x0800|index;
	rPDATC = (rPDATC)&(0xfbff);
	rPDATC = rPDATC|0x0400;
	rPDATC = rPDATC&0xffef;
	
	rPDATC = rPDATC|0x0100;//rs=1
	if(type)
	{
		rPDATC = rPDATC|((uint8)(value>>8));
		rPDATC = rPDATC|0xfbff; //wr=0
		rPDATC = rPDATC&0x0400;//wr=1

	}
	rPDATC = rPDATC|((uint8)(value));
	rPDATC = rPDATC|0xfbff; //wr=0
	rPDATC = rPDATC&0x0400;//wr=1


}
/***************************
//写16位数据函数
//输入: value数据
****************************/
void LCD_WriteData(uint16 value)
{
    rPDATC = rPDATC|0x0100;//rs=1
	rPDATC = rPDATC|0x0800;//cs=1
	rPDATC = rPDATC|((uint8)(value>>8));
	rPDATC = rPDATC|0xfbff;	//wr=0
	rPDATC = rPDATC&0x0400;//wr=1
	
	rPDATC = rPDATC|((uint8)(value));
	rPDATC = rPDATC|0xfbff; //wr=0
	rPDATC = rPDATC&0x0400;//wr=1
}
/**********************
    LCD初始化函数
***********************/
void LCD_Init(void)
{   
    LCD_IO_Init();
	rPDATC = rPDATC&0xefff;//rst=0
	Delay100us( 1);//time个100us
	rPDATC = rPDATC|0x1000;//rst=1
	Delay100us(1);//time个100us
	LCD_WriteRegister(0xA1);
	Delay100us(1);//time个100us
	LCD_WriteByte(0x00);
	Delay100us(9);
	LCD_WriteRegister(0xA0);
	Delay100us(1);
	LCD_WriteByte(0x00);
	Delay100us(1);
	LCD_WriteCommand(0,0x70,0xC8);
	Delay100us(1);
	LCD_WriteCommand(0,0x72,0xA3);
	Delay100us(1);
	LCD_WriteCommand(0,0x73,0x04);
	Delay100us(1);
	LCD_WriteCommand(0,0x75,0x45);
	Delay100us(1);
	LCD_WriteCommand(0,0x76,0x23);
	Delay100us(1);
	LCD_WriteCommand(0,0x77,0x08);
	Delay100us(1);
	LCD_WriteCommand(0,0x78,0x08);
	Delay100us(1);
	LCD_WriteCommand(0,0x79,0x00);
	Delay100us(1);
	LCD_WriteCommand(0,0x7F,0xF0);
	Delay100us(1);
	LCD_WriteCommand(0,0x71,0x81);	
	Delay100us(2);
	LCD_WriteCommand(0,0x0D,0x23);
	Delay100us(1);
	LCD_WriteCommand(0,0x11,0x00);
	Delay100us(1);
	LCD_WriteCommand(0,0x12,0x00);
	Delay100us(1);
	LCD_WriteCommand(0,0x21,0x37);
	Delay100us(1);
	LCD_WriteCommand(0,0x22,0x02);
	Delay100us(1);
	LCD_WriteCommand(0,0x23,0x24);
	Delay100us(1);
	Delay100us(1);
	LCD_WriteCommand(0,0x24,0x13);
	Delay100us(1);
	LCD_WriteCommand(0,0x25,0x0A);
	Delay100us(1);
	LCD_WriteCommand(0,0x26,0x82);
	Delay100us(1);
	LCD_WriteCommand(0,0x27,0x01);
	Delay100us(1);
	LCD_WriteCommand(0,0x1E,0x25);
	Delay100us(1);
	LCD_WriteCommand(0,0x1F,0x59);
	Delay100us(1);
	LCD_WriteCommand(1,0x30,0x0777);
	Delay100us(1);
	LCD_WriteCommand(1,0x31,0x0444);
	Delay100us(1);
	LCD_WriteCommand(1,0x32,0x0555);
	Delay100us(1);
	LCD_WriteCommand(1,0x33,0x0444);
	Delay100us(1);
	LCD_WriteCommand(1,0x34,0x0333);
	Delay100us(1);
	LCD_WriteCommand(1,0x35,0x0333);
	Delay100us(1);
	LCD_WriteCommand(1,0x36,0x0333);
	Delay100us(1);
	LCD_WriteCommand(1,0x37,0x0333);
	Delay100us(1);
	LCD_WriteCommand(1,0x38,0x0444);
	Delay100us(1);
	LCD_WriteCommand(1,0x39,0x0555);
	Delay100us(1);
	LCD_WriteCommand(1,0x3A,0x0666);
	Delay100us(1);
	LCD_WriteCommand(1,0x3B,0x0666);
	Delay100us(1);
	LCD_WriteCommand(1,0x3C,0x0777);
	Delay100us(1);
	LCD_WriteCommand(1,0x3D,0x0777);
	Delay100us(1);
	LCD_WriteCommand(1,0x3E,0x0777);
	Delay100us(1);
	LCD_WriteCommand(1,0x3F,0x0777);
	Delay100us(1);
	LCD_WriteCommand(1,0x40,0x0777);
	Delay100us(1);
	LCD_WriteCommand(1,0x41,0x0777);
	Delay100us(1);
	LCD_WriteCommand(1,0x42,0x0777);
	Delay100us(1);
	LCD_WriteCommand(1,0x43,0x0777);
	Delay100us(1);
	LCD_WriteCommand(1,0x44,0x0777);
	Delay100us(1);
	LCD_WriteCommand(1,0x45,0x0777);
	Delay100us(1);
	LCD_WriteCommand(1,0x46,0x0777);
	Delay100us(1);
	LCD_WriteCommand(1,0x47,0x0777);
	Delay100us(1);
	LCD_WriteCommand(1,0x48,0x0777);
	Delay100us(1);
	LCD_WriteCommand(1,0x49,0x0777);
	Delay100us(1);
	LCD_WriteCommand(1,0x4A,0x0777);
	Delay100us(1);
	LCD_WriteCommand(1,0x4B,0x0777);
	Delay100us(1);
	LCD_WriteCommand(1,0x4C,0x0777);
	Delay100us(1);
	LCD_WriteCommand(1,0x4D,0x0666);
	Delay100us(1);
	LCD_WriteCommand(1,0x4E,0x0666);
	Delay100us(1);
	LCD_WriteCommand(1,0x4F,0x0666);
	Delay100us(4);
	LCD_WriteCommand(0,0x00,0x04);	//扫描方向控制
	Delay100us(1);
	LCD_WriteCommand(0,0x01,0x07);	
	Delay100us(1);
    
	//写区域控制
	LCD_WriteCommand(0,0x02,0x00);	  //X
	LCD_WriteCommand(1,0x03,0x0000);  //Y
	LCD_WriteCommand(0,0x04,0xEF);	  //结束列数(0~239)	
	LCD_WriteCommand(1,0x05,0x013F);  //结束行数(0~319)

	LCD_WriteCommand(0,0x06,0x00);	
	LCD_WriteCommand(1,0x07,0x0000);	
	LCD_WriteCommand(0,0x08,0xEF);	
	LCD_WriteCommand(1,0x09,0x013F);

	Delay100us(1);
	LCD_WriteCommand(0,0x0A,0x00);
	Delay100us(1);
	LCD_WriteCommand(0,0x0B,0x00);
	Delay100us(1);
	LCD_WriteCommand(0,0x0C,0x00);
	Delay100us(1);
	LCD_WriteCommand(0,0x14,0x00);
	Delay100us(1);
	LCD_WriteCommand(0,0x15,0x00);
	Delay100us(1);
	LCD_WriteCommand(0,0x16,0x00);
	Delay100us(1);
	LCD_WriteCommand(1,0x17,0x01FF);
	Delay100us(1);
	LCD_WriteCommand(1,0x18,0x01FF);
	Delay100us(1);	
	LCD_WriteCommand(0,0x13,0x00);
	Delay100us(1);
	LCD_WriteCommand(1,0x19,0x01FF);
	Delay100us(1);
	LCD_WriteCommand(1,0x1B,0x01FF);
	Delay100us(1);
	LCD_WriteCommand(1,0x1C,0x01FF);
	Delay100us(1);
	LCD_WriteCommand(1,0x1A,0x01FF);	
	Delay100us(1);
	LCD_WriteCommand(0,0x1D,0x0E);
	Delay100us(1);
	LCD_WriteCommand(0,0x10,0x06);		//开显示      
	Delay100us(1);
}

/******************************
//测试程序
//彩色测试
*******************************/
void LCD_test(void)
{
	uint16 temp;
	uint16 i,j;
	uint8 n;
	LCD_WriteCommand(0,0x02,0x00);	  //X
	LCD_WriteCommand(1,0x03,0x0000);  //Y
	LCD_WriteCommand(0,0x04,0xEF);	  //结束列数(0~239)	
	LCD_WriteCommand(1,0x05,0x013F);  //结束行数(0~319)
	
	LCD_WriteRegister(0x0E);
	
    //彩色条纹测试
	for(n=0;n<8;n++)
	 {
	    temp=color[n];
		for(i=40*240;i>0;i--) 
		  LCD_WriteData(temp);
	 }
	Delay100us(100000);
	
	//彩色屏幕测试
	for(n=0;n<8;n++)
	 {  
	    LCD_WriteRegister(0x0E);
	    temp=color[n];
		for(j=320;j>0;j--)
		  {
		  for(i=240;i>0;i--)
		  {
		   LCD_WriteData(temp);
		   }
		  }
	    Delay100us(10000);
	 }



}



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -