📄 lcd.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 + -