📄 lcd.c
字号:
#include "reg5410.h"
sbit CS =P1^2;
sbit SID=P1^3;
sbit SCLK=P1^4;
void delay(unsigned int j)
{
unsigned char i;
do{
for(i=0;i<100;i++);
}while(j--);
}
void send_command(unsigned char command_data)
{
unsigned char i;
unsigned char i_data,temp_data1,temp_data2;
i_data=0xf8;
delay(10);
CS=1;
SCLK=0;
for(i=0;i<8;i++)
{
SID=(bit)(i_data&0x80);
SCLK=0;
SCLK=1;
i_data=i_data<<1;
}
i_data=command_data;
i_data&=0xf0;
for(i=0;i<8;i++)
{
SID=(bit)(i_data&0x80);
SCLK=0;
SCLK=1;
i_data=i_data<<1;
}
i_data=command_data;
temp_data1=i_data&0xf0;
temp_data2=i_data&0x0f;
temp_data1>>=4;
temp_data2<<=4;
i_data=temp_data1|temp_data2;
i_data&=0xf0;
for(i=0;i<8;i++)
{
SID=(bit)(i_data&0x80);
SCLK=0;
SCLK=1;
i_data=i_data<<1;
}
CS=0;
}
void send_data(unsigned char command_data)
{
unsigned char i;
unsigned char i_data,temp_data1,temp_data2;
i_data=0xfa;
delay(10);
CS=1;
for(i=0;i<8;i++)
{
SID=(bit)(i_data&0x80);
SCLK=0;
SCLK=1;
i_data=i_data<<1;
}
i_data=command_data;
i_data&=0xf0;
for(i=0;i<8;i++)
{
SID=(bit)(i_data&0x80);
SCLK=0;
SCLK=1;
i_data=i_data<<1;
}
i_data=command_data;
temp_data1=i_data&0xf0;
temp_data2=i_data&0x0f;
temp_data1>>=4;
temp_data2<<=4;
i_data=temp_data1|temp_data2;
i_data&=0xf0;
for(i=0;i<8;i++)
{
SID=(bit)(i_data&0x80);
SCLK=0;
SCLK=1;
i_data=i_data<<1;
}
CS=0;
}
void InitLCD() /*液晶初始化*/
{
send_command(0x30); //功能设置:一次送8位数据,基本指令集
send_command(0x06); //点设定:显示字符/光标从左到右移位,DDRAM地址加1
send_command(0x0c); //显示设定:开显示,显示光标,当前显示位反白闪动
send_command(0x04); //显示设定:开显示,显示光标,当前显示位反白闪动
send_command(0x01); //清DDRAM
send_command(0x02); //DDRAM地址归位
send_command(0x80); //把显示地址设为0X80,即为第一行的首位
}
/* flagnew 是刷新标志位,1则刷新,0不刷新,
x,y为起始座标 x(0<=x<=3),y(0<=y<=7),x为行座标,y为列座标;
how为要显示汉字的个数;
str是要显示汉字的地址 */
void DispHanzi(unsigned char x,unsigned char y,unsigned char how,unsigned char *stri)
{
unsigned char hi=0; //汉字显示
if(x==0) send_command(0x80+y);
else if(x==1) send_command(0x90+y);
else if(x==2) send_command(0x88+y);
else if(x==3) send_command(0x98+y);
for(hi=0;hi<how;hi++)
{
send_data(*(stri+hi*2));
send_data(*(stri+hi*2+1));
}
}
void DispZimu(unsigned char x,unsigned char y,unsigned char how,unsigned char *stri)
{
unsigned char hi=0; //字母显示
if(x==0) send_command(0x80+y);
else if(x==1) send_command(0x90+y);
else if(x==2) send_command(0x88+y);
else if(x==3) send_command(0x98+y);
for(hi=0;hi<how;hi++)
{
send_data(0xA3);
send_data(*(stri+hi));
}
}
/* x,y为起始座标 x(0<=x<=3),y(0<=y<=7),x为行座标,y为列座标;
n要显示数字*/
void DispShuzi(unsigned char x,unsigned char y,unsigned int n) //8*16数字显示
{
if(x==0) send_command(0x80+y);
else if(x==1) send_command(0x90+y);
else if(x==2) send_command(0x88+y);
else if(x==3) send_command(0x98+y);
if(n/1000%10!=0)
{
send_data(0x30+n/1000%10);
send_data(0x30+n/100%10);
send_data(0x30+n/10%10);
send_data(0x2E);
send_data(0x30+n%10);
send_data(0x20);
// send_data(0x73);
}
else if(n/100%10!=0)
{
send_data(0x20);
send_data(0x30+n/100%10);
send_data(0x30+n/10%10);
send_data(0x2E);
send_data(0x30+n%10);
send_data(0x20);
// send_data(0x73);
}
else if(n/10%10!=0)
{
send_data(0x20);
send_data(0x20);
send_data(0x30+n/10%10);
send_data(0x2E);
send_data(0x30+n%10);
send_data(0x20);
// send_data(0x73);
}
else
{
send_data(0x20);
send_data(0x20);
send_data(0x30);
send_data(0x2E);
send_data(0x30+n%10);
send_data(0x20);
// send_data(0x73);
}
}
void DispShuzi2(unsigned char x,unsigned char y,unsigned int n) //8*16数字显示
{
if(x==0) send_command(0x80+y);
else if(x==1) send_command(0x90+y);
else if(x==2) send_command(0x88+y);
else if(x==3) send_command(0x98+y);
if(n/1000%10!=0)
{
send_data(0x20);
send_data(0x2D);
send_data(0x30+n/1000%10);
send_data(0x30+n/100%10);
send_data(0x30+n/10%10);
send_data(0x2E);
send_data(0x30+n%10);
send_data(0x20);
send_data(0xb6);
send_data(0xc8);
}
else if(n/100%10!=0)
{
send_data(0x20);
send_data(0x20);
send_data(0x2D);
send_data(0x30+n/100%10);
send_data(0x30+n/10%10);
send_data(0x2E);
send_data(0x30+n%10);
send_data(0x20);
send_data(0xb6);
send_data(0xc8);
}
else if(n/10%10!=0)
{
send_data(0x20);
send_data(0x20);
send_data(0x20);
send_data(0x2D);
send_data(0x30+n/10%10);
send_data(0x2E);
send_data(0x30+n%10);
send_data(0x20);
send_data(0xb6);
send_data(0xc8);
}
else
{
send_data(0x20);
send_data(0x20);
send_data(0x20);
send_data(0x2D);
send_data(0x30);
send_data(0x2E);
send_data(0x30+n%10);
send_data(0x20);
send_data(0xb6);
send_data(0xc8);
}
}
void DispShuzi1(unsigned char x,unsigned char y,unsigned int n) //8*16数字显示
{
if(x==0) send_command(0x80+y);
else if(x==1) send_command(0x90+y);
else if(x==2) send_command(0x88+y);
else if(x==3) send_command(0x98+y);
if(n/1000%10!=0)
{
send_data(0x20);
send_data(0x20);
send_data(0x30+n/1000%10);
send_data(0x30+n/100%10);
send_data(0x30+n/10%10);
send_data(0x2E);
send_data(0x30+n%10);
send_data(0x20);
send_data(0xb6);
send_data(0xc8);
}
else if(n/100%10!=0)
{
send_data(0x20);
send_data(0x20);
send_data(0x20);
send_data(0x30+n/100%10);
send_data(0x30+n/10%10);
send_data(0x2E);
send_data(0x30+n%10);
send_data(0x20);
send_data(0xb6);
send_data(0xc8);
}
else if(n/10%10!=0)
{
send_data(0x20);
send_data(0x20);
send_data(0x20);
send_data(0x20);
send_data(0x30+n/10%10);
send_data(0x2E);
send_data(0x30+n%10);
send_data(0x20);
send_data(0xb6);
send_data(0xc8);
}
else
{
send_data(0x20);
send_data(0x20);
send_data(0x20);
send_data(0x20);
send_data(0x30);
send_data(0x2E);
send_data(0x30+n%10);
send_data(0x20);
send_data(0xb6);
send_data(0xc8);
}
}
void DispShuzi0(unsigned char x,unsigned char y,unsigned int n) //8*16数字显示
{
if(x==0) send_command(0x80+y);
else if(x==1) send_command(0x90+y);
else if(x==2) send_command(0x88+y);
else if(x==3) send_command(0x98+y);
if(n/1000%10!=0)
{
// send_data(0x30+n/1000%10);
// send_data(0x30+n/100%10);
send_data(0x30+n/10%10);
send_data(0x30+n%10);
}
else if(n/100%10!=0)
{
// send_data(0x20);
// send_data(0x30+n/100%10);
send_data(0x30+n/10%10);
send_data(0x30+n%10);
}
else if(n/10%10!=0)
{
// send_data(0x20);
// send_data(0x20);
send_data(0x30+n/10%10);
send_data(0x30+n%10);
}
else
{
// send_data(0x20);
// send_data(0x20);
send_data(0x20);
send_data(0x30+n%10);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -