📄 lcd.c
字号:
#include <AT89X51.H>
#include <INTRINS.H>
#include <MATH.H>
#include <ABSACC.H>
#include <STRING.H>
#define uchar unsigned char
#define uint unsigned int
//#define ulong unsigned long
#define MODREG PBYTE[0]
#define CMREG PBYTE[1]
#define STAREG PBYTE[2]
#define INTEREG PBYTE[3]
#define IEREG PBYTE[4]
#define BT0REG PBYTE[6]
#define BT1REG PBYTE[7]
#define OCREG PBYTE[8]
#define CLODREG PBYTE[31]
#define AC0REG PBYTE[16]
#define AC1REG PBYTE[17]
#define AC2REG PBYTE[18]
#define AC3REG PBYTE[19]
#define AM0REG PBYTE[20]
#define AM1REG PBYTE[21]
#define AM2REG PBYTE[22]
#define AM3REG PBYTE[23]
#define RxFRAM PBYTE[16]
#define RxBUF1 PBYTE[17]
#define RxBUF2 PBYTE[18]
#define RxBUF3 PBYTE[19]
#define RxBUF4 PBYTE[20]
#define RxBUF5 PBYTE[21]
#define RxBUF6 PBYTE[22]
#define RxBUF7 PBYTE[23]
#define RxBUF8 PBYTE[24]
#define RxBUF9 PBYTE[25]
#define RxBUF10 PBYTE[26]
#define RxBUF11 PBYTE[27]
#define RxBUF12 PBYTE[28]
#define TxFRAM PBYTE[16]
#define TxBUF1 PBYTE[17]
#define TxBUF2 PBYTE[18]
#define TxBUF3 PBYTE[19]
#define TxBUF4 PBYTE[20]
#define TxBUF5 PBYTE[21]
#define TxBUF6 PBYTE[22]
#define TxBUF7 PBYTE[23]
#define TxBUF8 PBYTE[24]
#define TxBUF9 PBYTE[25]
#define TxBUF10 PBYTE[26]
#define TxBUF11 PBYTE[27]
#define TxBUF12 PBYTE[28]
sbit ELCD=P3^0;
sbit RWLCD=P2^6;
sbit RSLCD=P2^7;
sbit BKLGT=P3^5;
sbit CS1=P3^1;
sbit CS2=P3^3;
sbit BUSY=P1^7;
sbit CS=P2^5;
sfr DATALCD=0x90;
uchar code Ezk[]=
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x5e,0x5e,0x00,0x00,0x00,0x00,
0x00,0x07,0x03,0x00,0x07,0x03,0x00,0x00,
0x00,0x24,0x7e,0x24,0x7e,0x24,0x00,0x00,
0x00,0x24,0x2b,0x6a,0x12,0x00,0x00,0x00,
0x00,0x63,0x13,0x08,0x64,0x63,0x00,0x00,
0x00,0x36,0x49,0x56,0x20,0x50,0x00,0x00,
0x00,0x00,0x07,0x03,0x00,0x00,0x00,0x00,
0x00,0x00,0x3e,0x41,0x00,0x00,0x00,0x00,
0x00,0x00,0x41,0x3e,0x00,0x00,0x00,0x00,
0x00,0x54,0x38,0x38,0x38,0x54,0x00,0x00,
0x00,0x08,0x08,0x3e,0x08,0x08,0x00,0x00,
0x00,0x00,0xe0,0x60,0x00,0x00,0x00,0x00,
0x00,0x08,0x08,0x08,0x08,0x08,0x00,0x00,
0x00,0x00,0x60,0x60,0x00,0x00,0x00,0x00,
0x00,0x20,0x10,0x08,0x04,0x02,0x00,0x00,
0x00,0x3e,0x51,0x49,0x45,0x3e,0x00,0x00,
0x00,0x00,0x42,0x7f,0x40,0x00,0x00,0x00,
0x00,0x62,0x51,0x49,0x49,0x46,0x00,0x00,
0x00,0x22,0x49,0x49,0x49,0x36,0x00,0x00,
0x00,0x18,0x14,0x12,0x7f,0x10,0x00,0x00,
0x00,0x2f,0x49,0x49,0x49,0x31,0x00,0x00,
0x00,0x3c,0x4a,0x49,0x49,0x30,0x00,0x00,
0x00,0x01,0x71,0x09,0x05,0x03,0x00,0x00,
0x00,0x36,0x49,0x49,0x49,0x36,0x00,0x00,
0x00,0x06,0x49,0x49,0x29,0x1e,0x00,0x00,
0x00,0x00,0x6c,0x6c,0x00,0x00,0x00,0x00,
0x00,0x02,0x04,0x08,0x10,0x20,0x00,0x00,
0x00,0x08,0x14,0x22,0x41,0x00,0x00,0x00,
0x00,0x24,0x24,0x24,0x24,0x24,0x00,0x00,
0x00,0x00,0x41,0x22,0x14,0x08,0x00,0x00,
0,2,1,89,9,6,0,0, 0,62,65,93,85,30,0,0,
0,126,17,17,17,126,0,0, 0,127,73,73,73,54,0,0,
0,62,65,65,65,34,0,0, 0,127,65,65,65,62,0,0,
0,127,73,73,73,65,0,0, 0,127,9,9,9,1,0,0,
0,62,65,73,73,122,0,0, 0,127,8,8,8,127,0,0,
0,0,65,127,65,0,0,0, 0,48,64,64,64,63,0,0,
0,127,8,20,34,65,0,0, 0,127,64,64,64,64,0,0,
0,127,2,4,2,127,0,0, 0,127,2,4,8,127,0,0,
0,62,65,65,65,62,0,0, 0,127,9,9,9,6,0,0,
0,62,65,81,33,94,0,0, 0,127,9,9,25,102,0,0,
0,38,73,73,73,50,0,0, 0,1,1,127,1,1,0,0,
0,63,64,64,64,63,0,0, 0,31,32,64,32,31,0,0,
0,63,64,60,64,63,0,0, 0,99,20,8,20,99,0,0,
0,7,8,112,8,7,0,0, 0,113,73,69,67,0,0,0,
0,8,62,65,65,0,0,0, 0,2,4,8,16,32,0,0,
0,0,65,65,62,8,0,0, 0,4,2,1,2,4,0,0,
128,128,128,128,128,128,0,0, 0,0,3,7,0,0,0,0,
0,32,84,84,84,120,0,0, 0,127,68,68,68,56,0,0,
0,56,68,68,68,40,0,0, 0,56,68,68,68,127,0,0,
0,56,84,84,84,8,0,0, 0,8,126,9,9,0,0,0,
0,24,164,164,164,124,0,0, 0,127,4,4,120,0,0,0,
0,0,0,125,64,0,0,0, 0,64,128,132,125,0,0,0,
0,127,16,40,68,0,0,0, 0,0,0,127,64,0,0,0,
0,124,4,24,4,120,0,0, 0,124,4,4,120,0,0,0,
0,56,68,68,68,56,0,0, 4,254,35,34,34,28,0,0,
0,14,17,17,17,254,128,64, 0,68,120,68,4,8,0,0,
0,8,84,84,84,32,0,0, 0,4,62,68,36,0,0,0,
0,60,64,32,124,0,0,0, 0,28,32,64,32,28,0,0,
0,60,96,48,96,60,0,0, 0,108,16,16,108,0,0,0,
0,156,160,96,60,0,0,0, 0,100,84,84,76,0,0,0,
0,8,62,65,65,0,0,0, 0,0,0,119,0,0,0,0,
0,0,65,65,62,8,0,0, 0,2,1,2,1,0,0,0
};
/*uchar code Hzk[]=
{ 0x08,0xf8,0x38,0xc0,0x00,0x08,0xf8,0x08,0x00,0x08,0xf8,0x08,0x08,0x08,0x08,0x18,
0x40,0x7f,0x40,0x01,0x06,0x38,0x7f,0x00,0x00,0x40,0x7f,0x41,0x41,0x41,0x47,0x60, //0 NE
0x08,0xf8,0x08,0x08,0x08,0x10,0x20,0xc0,0x00,0x00,0x60,0x10,0x08,0x08,0x08,0xf8,
0x40,0x7f,0x40,0x40,0x40,0x20,0x10,0x0f,0x00,0x00,0x60,0x50,0x48,0x44,0x42,0x41, //1 D2
0x00,0x40,0x41,0x42,0xc6,0x00,0x08,0x88,0xe8,0x98,0x8f,0xe8,0x88,0x88,0x88,0x8c,
0x00,0x40,0x20,0x10,0x1f,0x20,0x24,0x44,0x44,0x84,0x84,0xbf,0x84,0x84,0x84,0x86, //2 连
0x00,0x40,0x60,0x58,0xc7,0x40,0x30,0x20,0x64,0xa4,0x24,0xbf,0x24,0x24,0xa4,0x64,
0x00,0x22,0x66,0x23,0x22,0x12,0x92,0x84,0x45,0x26,0x14,0x0f,0x14,0x24,0x44,0xc4, //3 续
0x00,0x10,0x61,0x06,0xc0,0x00,0xfe,0x02,0xf2,0x02,0xfe,0x00,0x00,0xf8,0x00,0xff,
0x00,0x08,0x08,0x7e,0x81,0x40,0x27,0x10,0x0f,0x10,0x67,0x00,0x00,0x4f,0x80,0x7f, //4 测
0x00,0x20,0x10,0x0c,0x47,0xd4,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0xd4,0x16,0x04,
0x00,0x10,0x14,0x12,0x09,0x49,0x57,0x55,0x97,0xa5,0x09,0x18,0x08,0x3f,0x40,0xc0, //5 氡
0x00,0x00,0x80,0x40,0xf8,0x07,0x00,0x18,0x60,0x81,0x02,0x0c,0x00,0xc0,0x38,0x00,
0x00,0x01,0x00,0x00,0xff,0x00,0x80,0x80,0x40,0x21,0x12,0x0c,0x13,0x20,0x40,0xc0, //6 仪
0x82,0x92,0xb2,0xd2,0x97,0xb2,0xd2,0x8f,0xca,0xba,0x8a,0x82,0x00,0x00,0x00,0x00,
0x08,0x08,0x04,0x02,0x01,0x00,0x0f,0x01,0x02,0x04,0x08,0x08,0x00,0x00,0x00,0x00, //7 菜
0x00,0x00,0xfc,0x95,0x96,0xfc,0x94,0x96,0x95,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,
0x02,0x02,0x02,0x02,0x02,0x0f,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00, //8 单
0x10,0x11,0xf2,0x20,0x34,0xa5,0xbe,0xa4,0xbe,0xa5,0xb4,0x24,0x00,0x00,0x00,0x00,
0x00,0x00,0x07,0x02,0x00,0x0f,0x0a,0x0a,0x0a,0x0a,0x0f,0x00,0x00,0x00,0x00,0x00, //9 谱
0x90,0xdc,0xb3,0x90,0x48,0x50,0x50,0xff,0x28,0x2a,0xac,0x28,0x00,0x00,0x00,0x00,
0x04,0x0c,0x04,0x02,0x02,0x08,0x08,0x05,0x02,0x05,0x08,0x0e,0x00,0x00,0x00,0x00, //10线
0x10,0xd0,0x48,0x54,0xd2,0x11,0xd2,0x54,0x48,0xd0,0x10,0x00,0x00,0x00,0x00,0x00,
0x00,0x07,0x02,0x02,0x07,0x00,0x0f,0x00,0x04,0x07,0x00,0x00,0x00,0x00,0x00,0x00, //11命
0x20,0x20,0x10,0x48,0x44,0x53,0x62,0x44,0xc8,0x50,0x20,0x20,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x02,0x02,0x06,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //12令
0xa8,0xae,0x98,0xff,0xac,0x8a,0x10,0xfc,0x06,0x88,0x78,0x08,0x00,0x00,0x00,0x00,
0x08,0x08,0x05,0x02,0x02,0x05,0x08,0x04,0x03,0x02,0x04,0x08,0x00,0x00,0x00,0x00, //13数
0x88,0x48,0xff,0x28,0x00,0xff,0x29,0x29,0xf9,0x29,0x2f,0x20,0x00,0x00,0x00,0x00,
0x00,0x08,0x0f,0x04,0x02,0x01,0x0f,0x09,0x09,0x09,0x0f,0x00,0x00,0x00,0x00,0x00, //14据
0x10,0x11,0xf6,0x00,0x10,0x68,0xa7,0x21,0xa1,0x6f,0x28,0x08,0x00,0x00,0x00,0x00,
0x00,0x00,0x07,0x02,0x09,0x04,0x02,0x01,0x02,0x04,0x08,0x08,0x00,0x00,0x00,0x00, //15设
0x10,0x17,0x15,0xd5,0x57,0xfd,0x55,0x57,0xd5,0x15,0x17,0x10,0x00,0x00,0x00,0x00,
0x08,0x08,0x08,0x0f,0x0a,0x0a,0x0b,0x0a,0x0f,0x08,0x08,0x08,0x00,0x00,0x00,0x00, //16置
0x04,0x98,0x40,0xff,0x10,0x10,0x10,0xff,0x10,0x12,0x14,0x10,0x00,0x00,0x00,0x00,
0x01,0x00,0x00,0x0f,0x08,0x04,0x03,0x00,0x01,0x02,0x04,0x08,0x00,0x00,0x00,0x00, //17状
0x44,0x44,0x24,0x14,0x0c,0x27,0x4c,0x14,0x24,0x44,0x46,0x44,0x00,0x00,0x00,0x00,
0x04,0x02,0x00,0x07,0x08,0x09,0x0a,0x08,0x0c,0x01,0x02,0x04,0x00,0x00,0x00,0x00, //18态
0x00,0x80,0x3e,0x2a,0xea,0x2a,0x2a,0xea,0x2a,0x3f,0x82,0x00,0x00,0x00,0x00,0x00,
0x08,0x08,0x09,0x0a,0x0f,0x08,0x08,0x0f,0x0a,0x09,0x0c,0x08,0x00,0x00,0x00,0x00, //19显
0x00,0x10,0x12,0xd2,0x12,0x12,0xf2,0x12,0x52,0x93,0x1a,0x10,0x00,0x00,0x00,0x00,
0x04,0x02,0x01,0x00,0x00,0x08,0x0f,0x00,0x00,0x00,0x01,0x06,0x00,0x00,0x00,0x00, //20示
0x20,0x21,0xe2,0x08,0x28,0x28,0xe8,0x28,0xff,0x08,0x0e,0x08,0x00,0x00,0x00,0x00,
0x00,0x00,0x07,0x02,0x04,0x04,0x03,0x02,0x00,0x03,0x04,0x0e,0x00,0x00,0x00,0x00, //21试
0x42,0xf2,0x2e,0x22,0xe2,0x08,0xfc,0x4b,0xfa,0x4e,0x4a,0xf8,0x00,0x00,0x00,0x00,
0x00,0x07,0x02,0x02,0x0b,0x04,0x03,0x01,0x0f,0x01,0x09,0x0f,0x00,0x00,0x00,0x00, //22确
0x00,0x0c,0x14,0xd4,0x14,0x15,0xf6,0x94,0x94,0x94,0x0c,0x00,0x00,0x00,0x00,0x00,
0x08,0x04,0x02,0x01,0x02,0x04,0x0f,0x08,0x08,0x08,0x08,0x08,0x00,0x00,0x00,0x00, //23定
0x08,0x91,0x42,0xfe,0x02,0xfa,0x02,0xfe,0x00,0xfc,0x00,0xff,0x00,0x00,0x00,0x00,
0x01,0x0f,0x08,0x04,0x02,0x01,0x02,0x04,0x00,0x01,0x08,0x0f,0x00,0x00,0x00,0x00, //24测
0x00,0x00,0x08,0x0c,0xfe,0xff,0xfe,0x0c,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x0f,0x0f,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //25上
0x00,0x00,0x00,0x00,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x01,0x03,0x07,0x0f,0x07,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00 //26下
};*/
uchar code STR0[]="2004-06-22,15:59";
uchar code STR1[]="ok";
void Delay(void);
void WrcodeL(uchar codel);
void WrcodeR(uchar coder);
void RdbusyL(void);
void RdbusyR(void);
void WrdataL(uchar datal);
void WrdataR(uchar datar);
void Clear(void);
void Ini(void);
void Dspl88(uchar RL,uchar *ebyte);
void Dsplstr(uchar RL1,uchar col,uchar row,uchar *STR);
void Dsplhz(uchar RL2,uchar col2,uchar row2,uchar num);
void Drawdot(uchar RL4,uchar row4,uchar col4);
void Horline(uchar RL5,uchar row5,uchar stcol,uchar encol);
uchar self(uchar x);
void Delayl(void);
void main()
{ uchar j7;
uchar temp0=0,temp1=0,str9[3]={0,0,0},str8[2]={0,0},str7[13];
BKLGT=0;
Ini();
Clear();
//PX0=1;
// IT0=0;
CS=0;
EA=0;
EX0=0;
while((MODREG&0x01)==0)
{MODREG=MODREG|0x01;}
CLODREG=0xC8;
IEREG=0x00;
AC0REG=0xaa;
AC1REG=0xa3;
AC2REG=0xad;
AC3REG=0x55;
AM0REG=0xff;
AM1REG=0xf0;
AM2REG=0xf9;
AM3REG=0xff;
BT0REG=0x04;
BT1REG=0x1c;
OCREG=0x1a;
do
{MODREG=0x00;}
while((MODREG&0x01)!=0);
/* do{
if((STAREG&0x01)==0x01)
{temp0=RxBUF3;
temp1=RxBUF4;
temp2=temp0*256+temp1;
str9[0]=temp2/10000+0x30;
str9[1]=(temp2%10000)/1000+0x30;
str9[2]=((temp2%10000)%1000)/100+0x30;
str9[3]=(((temp2%10000)%1000)%100)/10+0x30;
str9[4]=((((temp2%10000)%1000)%100)%10)+0x30;
Dsplstr(0,3,3,&str9);
CMREG=0x04;
}
}while(1);
temp1=0x1c;
str8[0]=temp1/10+0x30;
str8[1]=(temp1%10)+0x30;
Dsplstr(0,20,1,str8);*/
Clear();
do
{if((STAREG&0x01)==0x01)
{ j7=RxBUF3&0x0f;
switch(j7)
{case 1: str7[12]=RxBUF4&0x0f+0x30;
str7[11]=(RxBUF4>>4)&0x07+0x30;
str7[10]=RxBUF5&0x0f+0x30;
str7[9]=RxBUF5>>4+0x30;
str7[8]=RxBUF6&0x0f+0x30;
str7[7]=(RxBUF6>>4)&0x03+0x30;
str7[6]=RxBUF7&0x0f+0x30;
str7[5]=RxBUF7>>4+0x30;
str7[4]=RxBUF8&0x0f+0x30;
str7[3]=RxBUF8>>4+0x30;
str7[2]=RxBUF9&0x0f+0x30;
str7[1]=RxBUF10&0x0f+0x30;
str7[0]=RxBUF10>>4+0x30;
Dsplstr(0,10,2,str7);
CMREG=0x04;
break;
case 2: Clear(); break;
default: temp0=RxBUF4;
str9[0]=temp0/100+0x30;
str9[1]=((temp0%100)/10)+0x30;
str9[2]=((temp0%100)%10)+0x30;
Dsplstr(0,20,4,str9);
CMREG=0x04;
break;
}
}
}
while(1);
}
/*void XINT0() interrupt 0 using 2
{ ulong count;
uchar str9[6];
Clear();
Dsplstr(1,3,3,&STR1);
Delayl();
if((INTEREG&0x01)!=0)
{count=RxBUF3+256*RxBUF4;
CMREG=0x04;
str9[0]=count/100000+0x30;
str9[1]=(count%100000)/10000+0x30;
str9[2]=((count%100000)%10000)/1000+0x30;
str9[3]=(((count%100000)%10000)%1000)/100+0x30;
str9[4]=((((count%100000)%10000)%1000)%100)/10+0x30;
Dsplstr(0,3,2,str9);
}
}
void Delayl()
{ uchar i,j,k;
for(i=0;i<100;i++)
{for(j=0;j<100;j++)
{for(k=0;k<100;k++);}
}
}
*/
void Delay()
{ uchar i,j;
for(i=0;i<200;i++)
{for(j=0;j<200;j++);}
}
void WrcodeL(uchar codel)
{ RdbusyL();
RWLCD=0;
DATALCD=codel;
ELCD=1;
ELCD=1;
ELCD=0;
}
void WrcodeR(uchar coder)
{ RdbusyR();
RWLCD=0;
DATALCD=coder;
ELCD=1;
ELCD=1;
ELCD=0;
}
void RdbusyL()
{ CS1=1;
CS2=0;
RSLCD=0;
RWLCD=1;
do
{ DATALCD=0xFF;
ELCD=1;
}
while(BUSY==1);
ELCD=0;
ELCD=0;
}
void RdbusyR()
{ CS1=0;
CS2=1;
RSLCD=0;
RWLCD=1;
do
{ DATALCD=0xFF;
ELCD=1;
}
while(BUSY==1);
ELCD=0;
ELCD=0;
}
void WrdataL(uchar datal)
{ RdbusyL();
RSLCD=1;
RWLCD=0;
DATALCD=datal;
ELCD=1;
ELCD=1;
ELCD=0;
}
void WrdataR(uchar datar)
{ RdbusyR();
RSLCD=1;
RWLCD=0;
DATALCD=datar;
ELCD=1;
ELCD=1;
ELCD=0;
}
void Clear()
{ uchar i,j,pagecode;
for(i=0;i<8;i++)
{pagecode=i|0xb8;
WrcodeL(pagecode);
WrcodeL(0x40);
for(j=0;j<64;j++)
{WrdataL(0x00);}
}
for(i=0;i<8;i++)
{pagecode=i|0xb8;
WrcodeR(pagecode);
WrcodeR(0x40);
for(j=0;j<64;j++)
{WrdataR(0x00);}
}
}
void Ini()
{ ELCD=0;
CS1=0;
CS2=0;
Delay();
WrcodeL(0x3e);
WrcodeR(0x3e);
WrcodeL(0x3f);
WrcodeR(0x3f);
WrcodeL(0xc0);
WrcodeR(0xc0);
}
void Dspl88(uchar RL,uchar *ebyte)
{ uchar i;
uchar ch;
for(i=0;i<8;i++)
{ ch=*ebyte;
ebyte++;
if(RL==0)
WrdataL(ch);
else
WrdataR(ch);
}
}
void Dsplstr(uchar RL1,uchar col,uchar row,uchar *STR)
{ uchar j,string,length;
if(RL1==0)
{WrcodeL(0xb8|row);
WrcodeL(0x40|col);
}
else
{WrcodeR(0xb8|row);
WrcodeR(0x40|col);
}
length=strlen(STR);
if(col+length*8<=64)
{for(j=0;j<length;j++)
{string=*STR;
STR++;
Dspl88(RL1,&Ezk[(string-0x20)*8]);
}
}
else if(RL1==0)
{for(j=0;j<(64-col)/8;j++)
{string=*STR;
STR++;
Dspl88(0,&Ezk[(string-0x20)*8]);
}
WrcodeR(0xb8|row);
WrcodeR(0x40);
for(j=(64-col)/8;j<length;j++)
{string=*STR;
STR++;
Dspl88(1,&Ezk[(string-0x20)*8]);
}
}
else
{for(j=0;j<(64-col)/8;j++)
{string=*STR;
STR++;
Dspl88(1,&Ezk[(string-0x20)*8]);
}
row=row+1;
WrcodeL(0xb8|row);
WrcodeL(0x40);
for(j=(64-col)/8;j<length;j++)
{string=*STR;
STR++;
Dspl88(0,&Ezk[(string-0x20)*8]);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -