📄 串口12864.c
字号:
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
#define x1 0x80
#define x2 0x88
#define y 0x80
#define comm 0
#define dat 1
sbit cs = P3^0;
sbit std = P3^1; //数据口
sbit sclk = P3^2;
sbit psb = P3^3; //H=并口; L=串口;
sbit rst = P3^5; //Reset Signal 低电平有效
void wr_lcd (uchar dat_comm,uchar content);
void delay7(uint us);
uchar code tab1[]={
"温度 "
};
/*--------------显示点阵----------------*/
void lat_disp (uchar data1,uchar data2)
{
uchar i,j,k,x;
x=x1;
for(k=0;k<2;k++)
{
for(j=0;j<16;j++)
{
for(i=0;i<8;i++)
{
wr_lcd (comm,0x34);
wr_lcd (comm,y+j*2);
wr_lcd (comm,x+i);
wr_lcd (comm,0x30);
wr_lcd (dat,data1);
wr_lcd (dat,data1);
}
for(i=0;i<8;i++)
{
wr_lcd (comm,0x34);
wr_lcd (comm,y+j*2+1);
wr_lcd (comm,x+i);
wr_lcd (comm,0x30);
wr_lcd (dat,data2);
wr_lcd (dat,data2);
}
}
x=x2;
}
wr_lcd (comm,0x36);
}
/*---------------显示汉字或字符----------------*/
void chn_disp (uchar code *chn)
{
uchar i,j;
wr_lcd (comm,0x30);
wr_lcd (comm,0x80);
for (j=0;j<1;j++)
{
for (i=0;i<16;i++)
wr_lcd (dat,chn[j*16+i]);
}
}
/*------------------初始化-----------------*/
void init_lcd (void)
{
rst=1;
psb=0;
wr_lcd (comm,0x30); /*30---基本指令动作*/
wr_lcd (comm,0x01); /*清屏,地址指针指向00H*/
wr_lcd (comm,0x80); //不显示光标
delay7(100);
lat_disp (0x00,0x00);
chn_disp(tab1);
}
void gotoxy(unsigned char y5, unsigned char x5) //
{
if(y5==1)
wr_lcd(0,0x80|x5);
if(y5==2)
wr_lcd(0,0x90|x5);
if(y5==3)
wr_lcd(0,(0x80|x5)+8);
if(y5==4)
wr_lcd(0,(0x90|x5)+8);
}
//**********************************
//液晶显示字符串程序
//**********************************
void print(uchar *str)
{
while(*str!='\0')
{
wr_lcd(1,*str);
str++;
}
}
/*--------------清DDRAM------------------*/
void clrram (void)
{
wr_lcd (comm,0x30);
wr_lcd (comm,0x01);
delay7(180);
}
/*---------------------------------------*/
void wr_lcd (uchar dat_comm,uchar content)
{
uchar a,i,j;
delay7(50);
a=content;
cs=1;
sclk=0;
std=1;
for(i=0;i<5;i++)
{
sclk=1;
sclk=0;
}
std=0;
sclk=1;
sclk=0;
if(dat_comm)
std=1; //data
else
std=0; //command
sclk=1;
sclk=0;
std=0;
sclk=1;
sclk=0;
for(j=0;j<2;j++)
{
for(i=0;i<4;i++)
{
a=a<<1;
std=CY;
sclk=1;
sclk=0;
}
std=0;
for(i=0;i<4;i++)
{
sclk=1;
sclk=0;
}
}
}
/*-----------------------------------*/
void delay7(uint us) //delay time
{
while(us--);
}
void delay1 (uint ms)
{
uint i,j;
for(i=0;i<ms;i++)
for(j=0;j<15;j++)
delay7(1);
}
//当data1=0xff,data2=0xff时,在x0,y0处反白显示16xl*yl.
void con_disp (uchar data1,uchar data2,uchar x0,uchar y0,uchar xl,uchar yl)
{
uchar i,j;
for(j=0;j<yl;j++)
{
for(i=0;i<xl;i++)
{
wr_lcd (comm,0x34);
wr_lcd (comm,y0+j);
wr_lcd (comm,x0+i);
wr_lcd (comm,0x30);
wr_lcd (dat,data1);
wr_lcd (dat,data2);
}
}
wr_lcd (comm,0x36);
}
/*------------------主程序--------------------*/
void main ()
{
init_lcd ();
gotoxy(1,0);
print("时间 2009-03-10");
gotoxy(2,6);
print("temp");
gotoxy(2,0);
print("温度TT");
gotoxy(3,0);
print("电子 ****");
gotoxy(4,0);
print("温度#####");
// con_disp (0xff,0xff,0x80,0x80,8,16); //第1行反白显示
// con_disp (0xff,0xff,0x80,0x90,8,16);//第2行反白显示
//con_disp (0xff,0xff,0x98,0x80,8,16);//第3行反白显示
//con_disp (0xff,0xff,0x98,0x90,8,16);//第4行反白显示
delay1 (8000);
//clrram(); //清屏函数
while (1)
{
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -