📄 lcd_direct_demo.c
字号:
#include <reg51.h>
#include <math.h>
#include <stdio.h>
#include <absacc.h>
#include <intrins.H>
#define uchar unsigned char
/**********液晶显示器接口引脚定义**********/
sbit cs0lcm=P2^2;
sbit cs1lcm=P2^3;
sbit dilcm=P2^0;
sbit rwlcm=P2^1;
sfr datalcm=0x80;
#define CWADD2 XBYTE[0X8800]
#define CRADD2 XBYTE[0X8A00]
#define DWADD2 XBYTE[0X8900]
#define DRADD2 XBYTE[0X8B00]
#define CWADD3 XBYTE[0X8400]
#define CRADD3 XBYTE[0X8600]
#define DWADD3 XBYTE[0X8500]
#define DRADD3 XBYTE[0X8700]
/**********常用操作命令和参数定义**********/
#define SETX 0x40
#define SETY 0xb8
#define lcdbusy 0x80
/**********显示分区边界位置**********/
#define modl 0x00
#define modm 0x40
#define modr 0x80
#define lcmlimit 0xc0
/**********全局变量定义**********/
uchar col,row,cbyte;
bit xy;
/**********函数列表**********/
void lcminit (void);
void delay (uchar ms);
void lcmcls (void);
void write_com_mid (uchar);
void write_data_mid (uchar);
void read_data_mid (uchar);
void write_com_right (uchar);
void write_data_right (uchar);
void read_data_right (uchar);
void test (uchar);
void lcdbusym(void);
void lcdbusyr(void);
void putedot(uchar);
void putcdot(uchar);
void putstr(uchar *puts,uchar i);
void point(uchar col,uchar row);
void locatexy(void);
void linehv(uchar length);
void linexy(uchar endx,uchar endy);
void rollscreen(uchar length);
/**********数组列表**********/
uchar code ezk[];
uchar code hzk[];
uchar code str1[];
uchar code str2[];
uchar code str3[];
uchar code str4[];
void delay (uchar ms)
{ uchar us,usn;
while(ms!=0)
{usn=4;
while(usn!=0)
{us=0xf0;
while(us!=0){us--;};
usn--;
}
ms--;
}
}
void write_com_mid(uchar c)
{
uchar in;
while(1)
{
in=CRADD2;
if((in & lcdbusy)==0)
break;
}
CWADD2=c;
}
void write_data_mid(uchar d)
{
uchar in;
while(1)
{
in=CRADD2;
if((in & lcdbusy)==0)
break;
}
DWADD2=d;
}
void read_data_mid(uchar d)
{
uchar in;
while(1)
{
in=CRADD2;
if((in & lcdbusy)==0)
break;
}
d=DRADD2;
}
void write_com_right(uchar c)
{
uchar in;
while(1)
{
in=CRADD3;
if((in & lcdbusy)==0)
break;
}
CWADD3=c;
}
void write_data_right(uchar d)
{
uchar in;
while(1)
{
in=CRADD3;
if((in & lcdbusy)==0)
break;
}
DWADD3=d;
}
void read_data_right(uchar d)
{
uchar in;
while(1)
{
in=CRADD3;
if((in & lcdbusy)==0)
break;
}
d=DRADD3;
}
void lcmcls(void)
{
uchar i,j;
for(i=0;i<8;i++)
{ write_com_mid(i+SETY);
write_com_right(i+SETY);
for(j=0;j<64;j++)
{
write_com_mid(j+SETX);
write_com_right(j+SETX);
write_data_mid(0x00);
write_data_right(0x00);
}
}
}
void lcminit(void)
{
write_com_mid(0x3e);
write_com_right(0x3e);
write_com_mid(0x3f);
write_com_right(0x3f);
write_com_mid(0xc0);
write_com_right(0xc0);
lcmcls();
}
void test(uchar num)
{
uchar i,j;
for(i=0;i<8;i++)
{
write_com_mid(i+SETY);
write_com_right(i+SETY);
for(j=0;j<64;j++)
{
write_com_mid(j+SETX);
write_com_right(j+SETX);
write_data_mid(num);
write_data_right(num);
}
}
}
void point(uchar col,uchar row)
{
uchar x,y;
uchar x1,y1;
x1=col;
y1=row;
y=y1&0x07;
y1=y1>>3;
x=0x01;
x=x<<y;
switch(x1&0xc0)
{
case 0x40:{
write_com_mid (x1-0x40+SETX);
write_com_mid (y1+SETY);
write_data_mid(x);
break;
}
case 0x80:{
write_com_right (x1-0x80+SETX);
write_com_right (y1+SETY);
write_data_right(x);
break;
}
}
}
void main()
{
uchar dbyte;
lcminit();
dbyte=0xf0;
test(dbyte);
delay(100000);
lcmcls();
point(64,0);
point(127,0);
point(128,0);
point(191,0);
point(64,63);
point(127,63);
point(128,63);
point(191,63);
while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -