📄 lcd.c
字号:
#include <SPCE061A.h>
extern void chn_disp(unsigned char ch_long,unsigned char *chn);
extern void wr_lcd (unsigned char dat_comm,unsigned char content);
extern void delay (unsigned long int us);
extern void init_lcd (void);
//#define cs IOB0 4 change to IOA8
//#define data IOB1 5 change to IOA9
//#define clk IOB2 6 change to IOA10
#define comm 0
#define dat 1
/*------------------初始化-----------------*/
void init_lcd (void)
{
wr_lcd (comm,0x30); //30---基本指令动作
wr_lcd (comm,0x01); //清屏,地址指针指向00H
delay (80);
wr_lcd (comm,0x06); //光标的移动方向
wr_lcd (comm,0x0c); //开显示,关游标
}
/*-------显示一段长为CH--LONG的字符串---------*/
void chn_disp(unsigned char ch_long,unsigned char *chn)
{
unsigned char i;
wr_lcd (comm,0x30);
for (i=0;i<ch_long;i++)
wr_lcd (dat,chn[i]);
}
/*--------------清DDRAM------------------*/
void clrram (void)
{
wr_lcd (comm,0x30);
wr_lcd (comm,0x01);
delay (120);
}
/*---------------------------------------*/
void wr_lcd (unsigned char dat_comm,unsigned char content)
{
unsigned char a,i,j;
delay (40);
a=content;
*P_IOB_Dir = 0xffff;
*P_IOB_Attrib = 0xffff;
*P_IOB_Data = 0x0000;
set_IOA(8); //*P_IOB_Data |= 0x0001;//cs=1;
clr_IOA(10); //*P_IOB_Data &= 0xfffb;//sclk=0;
set_IOA(9); //*P_IOB_Data |= 0x0002;//std=1;
for(i=0;i<5;i++)
{
set_IOA(10); //*P_IOB_Data |= 0x0004;//sclk=1;
clr_IOA(10); //*P_IOB_Data &= 0xfffb;//sclk=0;
}
clr_IOA(9); //*P_IOB_Data &= 0xfffd;//std=0;
set_IOA(10); // *P_IOB_Data |= 0x0004;//sclk=1;
clr_IOA(10); // *P_IOB_Data &= 0xfffb;//sclk=0;
if(dat_comm)
set_IOA(9); //*P_IOB_Data |= 0x0002;//std=1; //data
else
clr_IOA(9); // *P_IOB_Data &= 0xfffd;//std=0; //command
set_IOA(10); //*P_IOB_Data |= 0x0004;//sclk=1;
clr_IOA(10); //*P_IOB_Data &= 0xfffb;//sclk=0;
clr_IOA(9); //*P_IOB_Data &= 0xfffd;//std=0;
set_IOA(10); //*P_IOB_Data |= 0x0004;//sclk=1;
clr_IOA(10); //*P_IOB_Data &= 0xfffb;//sclk=0;
for(j=0;j<2;j++)
{
for(i=0;i<4;i++)
{
if (a & 0x80 )
set_IOA(9); //*P_IOB_Data |= 0x0002;//std=1;
else
clr_IOA(9); //*P_IOB_Data &= 0xfffd;//std=0;
set_IOA(10); //*P_IOB_Data |= 0x0004;//sclk=1;
clr_IOA(10); //*P_IOB_Data &= 0xfffb;//sclk=0;
a = a * 2;
}
clr_IOA(9); // *P_IOB_Data &= 0xfffd;//std=0;
for(i=0;i<4;i++)
{
set_IOA(10); //*P_IOB_Data |= 0x0004;//sclk=1;
clr_IOA(10); //*P_IOB_Data &= 0xfffb;//sclk=0;
}
}
}
/*---------------------------------------*/
void delay (unsigned long int us) //delay time
{
while(us--)
*P_Watchdog_Clear=1;
}
void delay2() //延时程序
{unsigned char i;
for(i=300;i>0;i--);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -