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

📄 lcd.c

📁 三星TLV350QV-F0E点屏驱动
💻 C
字号:
#include  "config.h"

#define   LCD_SCL      (1<<28)		 /* armP0.28 -- j8-8  */
#define   LCD_SDI      (1<<30)       /* armP0.30 -- j8-21 */
#define   LCD_CS	   (1<<27)		 /* armP0.27 -- j8-9  */
#define   SPI_IOCON1 0x58000000      //P0.27、P0.28、P0.30为输出
volatile uint32 count;
/****************************************************************************
* 名称:delayms()
* 功能:长软件延时
* 入口参数:dly		延时参数,值越大,延时越久
* 出口参数:无
****************************************************************************/
void  delayms(uint32  dly)
{   
   uint32 temp=dly;
   count=0;
   while(1)
   {
   		if(count>=temp)
   			break;
   }
}
void  delay(uint32  dly)
{  
   for(; dly>0; dly--);     
}
/****************************************************************************
* 名称:Timer0_Exception()
* 功能:Timer0中断服务程序。
* 入口参数:无
* 出口参数:无
* 说明:
****************************************************************************/
void  __irq Timer0_Exception(void)
{
	T0IR = 0x01;	    			            // 清除中断标志
	count++;
    VICVectAddr = 0x00;				            // 通知VIC中断处理结束
    
}
/****************************************************************************
* 名称:Time0Init()
* 功能:初始化定时器0,定时时间为1S。 
* 入口参数:无
* 出口参数:无
****************************************************************************/
void  Time0Init(void)
{   /* Fcclk = Fosc*4 = 11.0592MHz*4 = 44.2368MHz
	   Fpclk = Fcclk/4 = 44.2368MHz/4 = 11.0592MHz
	*/
	T0PR = 99;			    					// 设置定时器0分频为100分频,得110592Hz
	T0MCR = 0x03;		   						// 匹配通道0匹配中断并复位T0TC
	T0MR0 = 110;	    					    // 比较值(1mS定时值)
	T0TCR = 0x03;		   						// 启动并复位T0TC
	T0TCR = 0x01; 
	
	/* 设置定时器0中断IRQ */
	VICVectCntl2 = 0x24;						// 定时器0中断通道分配IRQ slot 2
	VICVectAddr2 = (uint32)Timer0_Exception; 	// 设置中断服务程序地址向量 
	VICIntEnable |= 0x00000010;					// 使能定时器0中断
}
/****************************************************************************
* 名称:set_register_instruction()
* 功能:配置寄存器
* 入口参数:
*         reg:寄存器号
*         command_data:寄存器值
* 出口参数:无
* 说明:往LCD发送配置寄存器命令
****************************************************************************/
void set_register_instruction(unsigned int reg,unsigned long command_data)
{
	unsigned int i,index=0x74;
	unsigned long dat=reg;

	IO0SET=LCD_SCL;
	IO0SET=LCD_SDI;
	delay(200);

	IO0CLR=LCD_CS;
	delay(200);


	for(i=8;i>0;i--)//传送index
	{
		IO0CLR=LCD_SCL;
		if((index>>(i-1))&0x01)//逐个传送index位(由高到低)
			IO0SET=LCD_SDI;
		else
			IO0CLR=LCD_SDI;
		delay(200);
		IO0SET=LCD_SCL;
		delay(200);
	}
	for(i=16;i>0;i--)//传送dat值
	{
		IO0CLR=LCD_SCL;
		if((dat>>(i-1))&0x01)//逐个传送dat位(由高到低)
			IO0SET=LCD_SDI;
		else
			IO0CLR=LCD_SDI;
		delay(200);
		IO0SET=LCD_SCL;
		delay(200);
	}

	IO0SET=LCD_SDI;
	IO0SET=LCD_CS;

	index=0x76;
	dat=command_data;
	delay(200);

	IO0CLR=LCD_CS;
	for(i=8;i>0;i--)//传送index
	{
		IO0CLR=LCD_SCL;
		if((index>>(i-1))&0x01)//逐个传送index位(由高到低)
			IO0SET=LCD_SDI;
		else
			IO0CLR=LCD_SDI;
		delay(200);
		IO0SET=LCD_SCL;
		delay(200);
	}
	for(i=16;i>0;i--)//传送dat值
	{
		IO0CLR=LCD_SCL;
		if((dat>>(i-1))&0x01)//逐个传送dat位(由高到低)
			IO0SET=LCD_SDI;
		else
			IO0CLR=LCD_SDI;
		delay(200);
		IO0SET=LCD_SCL;
		delay(200);
	}

	IO0SET=LCD_SDI;
	IO0SET=LCD_CS;
}
/****************************************************************************
* 名称:Init_LTV350QV_Power_On()
* 功能:LCD上电初始化
* 入口参数:无
* 出口参数:无
****************************************************************************/
void Init_LTV350QV_Power_On(void)
{
	PINSEL1 = PINSEL1&0xCC3FFFFF;//设置P0.27、P0.28、P0.30为I/O口
	IO0DIR |= SPI_IOCON1;//设置P0.27、P0.28、P0.30为输出
	
	IO0SET=LCD_SCL;
	IO0SET=LCD_SDI;
	IO0SET=LCD_CS;

	delayms(15);//延迟15ms
	set_register_instruction(0x09,0x0000);

	delayms(15);//延迟15ms
	set_register_instruction(0x09,0x4000);
	set_register_instruction(0x0a,0x2000);
	set_register_instruction(0x09,0x4055);

	delayms(60);//延迟60ms
	set_register_instruction(0x01,0x409d);	
	set_register_instruction(0x02,0x0204);
	set_register_instruction(0x03,0x0100);
	set_register_instruction(0x04,0x3000);
	set_register_instruction(0x05,0x4003);
	//set_register_instruction(0x06,0x000a);
	//set_register_instruction(0x07,0x0021);
	set_register_instruction(0x06,0x0010);
	set_register_instruction(0x07,0x0044);
	set_register_instruction(0x08,0x0c00);
	set_register_instruction(0x10,0x0103);
	set_register_instruction(0x11,0x0301);
	set_register_instruction(0x12,0x1f0f);
	set_register_instruction(0x13,0x1f0f);
	set_register_instruction(0x14,0x0707);
	set_register_instruction(0x15,0x0307);
    set_register_instruction(0x16,0x0707);
    set_register_instruction(0x17,0x0000);
    set_register_instruction(0x18,0x0004);
    set_register_instruction(0x19,0x0000);	
    
    delayms(2);//延迟2ms
    set_register_instruction(0x09,0x4a55);
    set_register_instruction(0x05,0x5003);
}
/****************************************************************************
* 名称:Init_LTV350QV_Power_Off()
* 功能:关闭LCD
* 入口参数:无
* 出口参数:无
****************************************************************************/
void Init_LTV350QV_Power_Off(void)
{
	delayms(2);
	set_register_instruction(0x09,0x4055);
	set_register_instruction(0x05,0x4003);
	set_register_instruction(0x0a,0x0000);
	delayms(5);
	set_register_instruction(0x09,0x4000);		
}


int main(void)
{
	Time0Init();
	//while(1)
	{
		Init_LTV350QV_Power_On();
		delayms(1000*20);//20S后关闭LCD
		//Init_LTV350QV_Power_Off();
		delayms(1000*20);//20S后打开LCD
	}
}

⌨️ 快捷键说明

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