📄 lcd.c
字号:
#include "config.h"
/*************************LCD***************************/
#define LCD_RST 0X00000010
#define LCD_CMD 0X00000020
#define LCD_CSI 0X00000040
#define LCD_CLK 0X00000080
#define LCD_DATA 0X00000200
#define LCD_RST_MASK 0XFFFFFFEF
#define LCD_CMD_MASK 0XFFFFFFDF
#define LCD_CSI_MASK 0XFFFFFFBF
#define LCD_CLK_MASK 0XFFFFFF7F
#define LCD_DATA_MASK 0XFFFFFDFF
#define LCD_TEST 0x000002F0
/*************************LCD***************************/
void gpio_init_lcd(void)
{
SCS = 0x20;
PINSEL0 &= 0xFFFFFCFF; //* P0.04 set as LCD_RST IO
PINSEL0 &= 0xFFFFF3FF; //* P0.05 set as LCD_CMD IO
PINSEL0 &= 0xFFFFCFFF; //* P0.06 set as LCD_CSI IO
PINSEL0 &= 0xFFFF3FFF; //* P0.07 set as LCD_CLK IO
PINSEL0 &= 0xFFF3FFFF; //* P0.09 set as LCD_DATA IO
IODIR0 |= LCD_RST; //* LCD_RST out dir
IODIR0 |= LCD_CMD; //* LCD_CMD out dir
IODIR0 |= LCD_CSI; //* LCD_CSI out dir
IODIR0 |= LCD_CLK; //* LCD_CLK output direction
IODIR0 |= LCD_DATA; //* LCD_DATA output direction
}
void LcdTest(void)
{
IOSET0 = LCD_TEST;
delay2us();
IOCLR0 = LCD_TEST;
delay2us();
}
void Send2LcdCmd(uint8 cmd )/* rs=0时写入控制指令,rs=1时写入显示数据 */
{
uint8 i;
IOCLR0 = LCD_CSI;
delay1us();
IOCLR0 = LCD_CMD;
for(i=0;i<8;i++)
{
IOCLR0 = LCD_CLK;
if ((cmd & 0x80)!=0)
IOSET0 = LCD_DATA;
else
IOCLR0 = LCD_DATA;
delay1us();
IOSET0 = LCD_CLK;
delay1us();
cmd = cmd<<1;
}
IOSET0 = LCD_CSI;
}
void Send2LcdData(uint8 dat)/* A0=0时写入控制指令,A0=1时写入显示数据 */
{
uint8 i;
IOCLR0 = LCD_CSI;
delay1us();
IOSET0 = LCD_CMD;
for(i=0;i<8;i++)
{
IOCLR0 = LCD_CLK;
if ((dat & 0x80)!=0)
IOSET0 = LCD_DATA;
else
IOCLR0 = LCD_DATA;
delay1us();
IOSET0 = LCD_CLK;
delay1us();
dat = dat<<1;
}
IOSET0 = LCD_CSI;
}
void disbmp(uint8 *p)/*显示一幅128*64的图片*/
{
uint8 i,j;
for (i = 0xb0;i<0xb8;i++)
{
Send2LcdCmd(i);
Send2LcdCmd(0x10);
Send2LcdCmd(0x01); //从第1列开始
for (j=0;j<128;j++) //到第128列为止
Send2LcdData(*p++);
}
}
void disp_all(uint8 xx,uint8 yy,uint8 l1,uint8 l2)
{
uint8 i=0,j=0;
for(j=l1;j<l2;j++)
{
Send2LcdCmd(j);
Send2LcdCmd(0x10);
Send2LcdCmd(0x01);
for(i=0;i<64;i++)
{
Send2LcdData(xx);
Send2LcdData(yy);
}
}
}
void dishz(uint8 x_add,uint8 y_add,uint8 *p)
{/*x_add 页地址 y_add 列地址 *p 字模数据地址*/
uint8 i, pag,colh,coll;
pag = x_add+0xb0;
colh = y_add>>4; /*取y_add的高4位*/
colh = colh | 0xf0;
colh = colh & 0x1f;
coll = y_add & 0x0f; /*取y_add的低4位*/
Send2LcdCmd(colh);
Send2LcdCmd(coll);
Send2LcdCmd(pag);
for (i=0;i<32;i++)
{
if (i == 16)
{
Send2LcdCmd(pag+1);
Send2LcdCmd(colh);
Send2LcdCmd(coll);
}
Send2LcdData(*p++);
}
}
void LcdClear()
{
uint8 i=0,j=0;
for(j=0xb0;j<0xb8;j++)
{
Send2LcdCmd(j);
Send2LcdCmd(0x10);
Send2LcdCmd(0x01);
for(i=0;i<129;i++)
{
Send2LcdData(0x00);
}
}
}
void InitLcd(void) /*初始化LCM*/
{
delayms(250);
IOCLR0 = LCD_RST;
delayms(100);
IOSET0 = LCD_RST;
Send2LcdCmd(0xe2); /*软件复位*/
delayms(250);
Send2LcdCmd(0x2f); /*电源控制模式:VC,VR,VF=111*/
Send2LcdCmd(0xa3); /*a2 LCD BIAS=1/9 a3 LCD BIAS=1/7 */
Send2LcdCmd(0xa0); /*列地址移动方向:ADC=0(SEG1->SEG132)从左往右*/
Send2LcdCmd(0xc8); /*c0 行扫描方向:SHL=0(COM0->COM63)从上往下*/
Send2LcdCmd(0x81); /*对比度寄存器模式*/
Send2LcdCmd(0x08); /*对比度寄存器值 修改这个值就可以调节对比度了 */
Send2LcdCmd(0x60); /*初始行偏移量,偏移32=4 pages,0x40+0x20=0x60*/
Send2LcdCmd(0xaf); /*开显示*/
delayms(100);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -