📄 rt12864j.c
字号:
IOCLR = LCD_RW;
SendData(code); //依次将指令代码传到数据线上
IOSET = LCD_E;
IOCLR = LCD_E;
IOSET = LCD_RW;
}*/
/****************************************************************************
* 名称:Write_data_CS2()
* 功能:长软件延时
* 入口参数:dly 延时参数,值越大,延时越久
* 出口参数:无
****************************************************************************/
/* void Write_data_CS2(uint32 code)
{
uint32 Busy;
Busy = IOPIN & 0x00000400;
do LCD_Check();
while(Busy != 0x00000400);
IOCLR = LCD_CS2;
IOSET = LCD_CS2;
IOSET = LCD_DI;
IOCLR = LCD_RW; //写选择
SendData(code);//
IOSET = LCD_E;
// DelayNS(10);
IOCLR = LCD_E;
IOSET = LCD_RW;
}*/
/****************************************************************************
* 名称:LCD_CLR()
* 功能:长软件延时
* 入口参数:dly 延时参数,值越大,延时越久
* 出口参数:无
****************************************************************************/
/* void LCD_CLR(void)
{
uint32 i,j;
IOSET = LCD_CS1;
IOSET = LCD_CS2; //用2个全局BIT变量传递左右屏幕,因为check_busy()函数里面有可能
for(i=0;i<8;i++)
{
Write_command_CS1(j|0xb8); // set page address
Write_command_CS2(j|0xb8);
Write_command_CS1(0x40);
Write_command_CS2(0x40);
for(j=0;j<64;j++)
{
Write_data_CS1(0x00); // set row address
Write_data_CS2(0x00); //对8个页面的DRAM全部送0
}
}
}*/
/****************************************************************************
* 名称:LCD_FULL()
* 功能:长软件延时
* 入口参数:dly 延时参数,值越大,延时越久
* 出口参数:无
****************************************************************************/
/* void LCD_FULL(void)
{
uint8 i,j;
IOSET = LCD_CS1;
IOSET = LCD_CS2; //用2个全局BIT变量传递左右屏幕,因为check_busy()函数里面有可能
for(i=0;i<8;i++)
{
Write_command_CS1(j|0xb8); // set page address
Write_command_CS2(j|0xb8);
Write_command_CS1(0x40);
Write_command_CS2(0x40);
for(j=0;j<64;j++)
{
Write_data_CS1(0xff); // set row address
Write_data_CS2(0xff); //对8个页面的DRAM全部送1
}
}
}*/
/****************************************************************************
* 名称:LCD_RESET()
* 功能:长软件延时
* 入口参数:dly 延时参数,值越大,延时越久
* 出口参数:无
****************************************************************************/
/* void LCD_RESET(void)
{
IODIR = LCD_RET;
IOCLR = LCD_E;
IOSET = LCD_E;
}*/
/****************************************************************************
* 名称: LCD_Init()
* 功能:长软件延时
* 入口参数:dly 延时参数,值越大,延时越久
* 出口参数:无
****************************************************************************/
void LCD_Int(void)
{
IODIR |= 0x00003807; // 0011 1000 0000 0111 设置为输出
IOCLR = LCD_E;
IOCLR = LCD_DI;
IOCLR = LCD_CS1;
IOCLR = LCD_CS2;
IOCLR = LCD_RET;
IOSET = LCD_RET;
IOSET = LCD_CS1;
IOSET = LCD_CS2;
Write_command(0x3F); // 开显示
Write_command(0xC0); // 显示起始行为0
Write_command(0xB8); // 显示页地址为0
Write_command(0x40); // 设置y=0
IODIR = 0x00003807;
IOCLR = LCD_CS1;
IOCLR = LCD_CS2;
}
/********************************************************************
* 名 称:
* 功 能:
* 入口参数:
* 出口参数:
*********************************************************************/
void LCD_Clr(void)
{
uint32 i,j;
IODIR = 0x00003807;
IOSET = LCD_CS1;
IOSET = LCD_CS2;
Write_command(0xc0);
for(j=8;j>0;j--)
{
Write_command(0xb8|j);
Write_command(0x40);
for(i=64;i>0;i--)
{
Write_data(0x00);
}
}
Write_command(0x3f);
}
/********************************************************************
* 名 称:
* 功 能:
* 入口参数:
* 出口参数:
*********************************************************************/
void Display8x8(uint32 x,uint32 y,uint8 *p)
{ //x表示屏幕的 x行(0-7),y表示屏幕的y列(0-15)
uint32 i;
y<<=3; //用左移3位的方法来代替乘以8,非常省空间的技巧
IODIR = 0x00003807;
IOSET = LCD_CS1;
IOCLR = LCD_CS2;
if(y&0x40)
{
//IODIR = 0x00003807;
IOCLR = LCD_CS1;
IOSET = LCD_CS2; //判断y,来选择左右屏幕
}
y&=0x3f;
Write_command(0xb8|x);
Write_command(0x40|y);
for(i=8;i>0;i--)
{
Write_data(*p++);
}
}
/********************************************************************
* 名 称:
* 功 能:
* 入口参数:
* 出口参数:
*********************************************************************/
void Display16x16(uint32 x,uint32 y,uint8 *p)
{
uint32 i;
x<<=1;
y<<=4;
IODIR = 0x00003807;
IOSET = LCD_CS1;
IOCLR = LCD_CS2;
if(y&0x40)
{
IODIR = 0x00003807;
IOCLR = LCD_CS1;
IOSET = LCD_CS2;
}
y&=0x3f;
Write_command(0xb8|x);
Write_command(0x40|y);
for(i=16;i>0;i--)
{
Write_data(*p++);
}
Write_command(0xb9|x);
Write_command(0x40|y);
for(i=16;i>0;i--)
{
Write_data(*p++);
}
}
/****************************************************************************
* 名称: main(void)
* 功能:长软件延时
* 入口参数:dly 延时参数,值越大,延时越久
* 出口参数:无
****************************************************************************/
int main(void)
{
System_Int();
//BEEP();
LCD_Int();
LCD_Clr(); //在屏幕0行0列显示字符0
// DelayNS(100); // 一定要加。否则不能正常显示
// Display8x8(1,2,a[4]);
// DelayNS(100);
}
//typedef unsigned char uint8; /* 无符号8位整型变量 */
//typedef signed char int8; /* 有符号8位整型变量 */
//typedef unsigned short uint16; /* 无符号16位整型变量 */
//typedef signed short int16; /* 有符号16位整型变量 */
//typedef unsigned int uint32; /* 无符号32位整型变量 */
//typedef signed int int32; /* 有符号32位整型变量 */
//typedef float fp32; /* 单精度浮点数(32位长度) */
//typedef double fp64; /* 双精度浮点数(64位长度) */
// 今天,晚上在网上看到一条信息,ARM 的速度比液晶的速度快,所以要有适当的延时,我加了,果然
// 正常显示了,但还有一个问题,ARM 复位后就不能正常显示。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -