📄 main_lsd.c
字号:
/*****************************************************/
/* 远程智能数据采集终端单片机C语言的实现 作者:吕书东 */
/*****************************************************/
#include <reg51.h>
#include<absacc.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define wr_addr 0xa2 //i2c write address
#define NOP() _nop_() //define a null command
//define for LCD
#define RCOMM XBYTE[0x8000] //right half
#define LCOMM XBYTE[0x8800] //lift half
#define RWRITE XBYTE[0x8001] //write right half addr
#define LWRITE XBYTE[0x8801] //write lift half addr
#define RREAD XBYTE[0x8003] //read right half addr
#define LREAD XBYTE[0x8803] //read lift half addr
#define STATE XBYTE[0x8002] //state busy flag addr
//define for 5045
#define WREN 0x06 //write enable
#define WRDI 0x04 //write lock
#define RDSR 0x05 //read regester
#define WRSR 0x01 //write regester
#define READ0 0x03 //read 0 page address
#define WRITE0 0x02 //write 0 page address
//define for keyboard
#define com8155 XBYTE[0xa100] //8155 command register
#define pa8155 XBYTE[0xa101] //8155pa
#define pb8155 XBYTE[0xa102] //8155pb
#define IndexForCom8155 XBYTE[0xa103] //8155IndexForCom
sbit SDA=P1^0; //i2c data
sbit SCL=P1^1; //i2c clock
bit ACK; //i2c ack signal
sbit SDO=P1^4; //data in for 5045
sbit SDI=P1^5; //data out for 5045
sbit SCK=P1^3; //clk
sbit CS=P1^7;
sbit protect=P1^6;
sbit key_busy=P3^2; //key interrupt
#define IN0 XBYTE[0x9000] //A/D IN0
sbit ADEOC=P3^5; //EOC of ADC0809
uchar year1,year0,year,
month1,month0,month,
day1,day0,day,
date0,date,
hour1,hour0,hour,
minute1,minute0,minute,
second1,second0,second;
uchar year4,year3,year2,
month4,month3,month2,
date4,date3,date2,
hour4,hour3,hour2,
minute4,minute3,minute2,
second4,second3,second2,
day3;
uchar n;
uchar IndexForCom; //index for command array from computer
uint address_ram; //62256地址
uint address_scom; //address for fetch data
bit flag; //send signal?
unsigned char code lib8[170][8]={
{0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00},
{0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00}, //0 0
{0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00},
{0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00}, //1 1
{0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00},
{0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00}, //2 2
{0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00},
{0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00}, //3 3
{0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00},
{0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00}, //4 4
{0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00},
{0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00}, //5 5
{0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00},
{0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00}, //6 6
{0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00},
{0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00}, //7 7
{0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00},
{0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00}, //8 8
{0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00},
{0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00}, //9 9
{0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80},
{0x80,0x80,0x80,0x80,0x80,0xC0,0x80,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, //一 1
{0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04},
{0x04,0x04,0x04,0x06,0x04,0x00,0x00,0x00},
{0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x10},
{0x10,0x10,0x10,0x10,0x10,0x18,0x10,0x00}, //二 2
{0x00,0x04,0x84,0x84,0x84,0x84,0x84,0x84},
{0x84,0x84,0x84,0x84,0x84,0x04,0x00,0x00},
{0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x20},
{0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00}, //三 3
{0x00,0xFE,0x02,0x02,0x02,0xFE,0x02,0x02},
{0xFE,0x02,0x02,0x02,0x02,0xFE,0x00,0x00},
{0x00,0x7F,0x28,0x24,0x23,0x20,0x20,0x20},
{0x21,0x22,0x22,0x22,0x22,0x7F,0x00,0x00}, //四 4
{0x00,0x02,0x82,0x82,0x82,0x82,0xFE,0x82},
{0x82,0x82,0xC2,0x82,0x02,0x00,0x00,0x00},
{0x20,0x20,0x20,0x20,0x20,0x3F,0x20,0x20},
{0x20,0x20,0x3F,0x20,0x20,0x30,0x20,0x00}, //五 5
{0x10,0x10,0x10,0x10,0x10,0x91,0x12,0x1E},
{0x94,0x10,0x10,0x10,0x10,0x10,0x10,0x00},
{0x00,0x40,0x20,0x10,0x0C,0x03,0x01,0x00},
{0x00,0x01,0x02,0x0C,0x78,0x30,0x00,0x00}, //六 6
{0x40,0x20,0x10,0x0C,0xE3,0x22,0x22,0x22},
{0xFE,0x22,0x22,0x22,0x22,0x02,0x00,0x00},
{0x04,0x04,0x04,0x04,0x07,0x04,0x04,0x04},
{0xFF,0x04,0x04,0x04,0x04,0x04,0x04,0x00}, //年 7
{0x00,0x00,0x00,0x00,0x00,0xFF,0x11,0x11},
{0x11,0x11,0x11,0xFF,0x00,0x00,0x00,0x00},
{0x00,0x40,0x20,0x10,0x0C,0x03,0x01,0x01},
{0x01,0x21,0x41,0x3F,0x00,0x00,0x00,0x00}, //月 8
{0x00,0x00,0x00,0xFE,0x42,0x42,0x42,0x42},
{0x42,0x42,0x42,0xFE,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x3F,0x10,0x10,0x10,0x10},
{0x10,0x10,0x10,0x3F,0x00,0x00,0x00,0x00}, //日 0
{0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00},
{0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00}, //: 10
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, //一个字的空格 9
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x40,0x42,0x5C,0x48,0x40,0x40},
{0x7F,0x40,0x50,0x4E,0x44,0xC0,0x00,0x00},
{0x00,0x00,0x20,0x22,0x22,0x22,0x22,0x22}, //当 10
{0x22,0x22,0x22,0x22,0x22,0x7F,0x00,0x00},
{0x08,0x08,0xE8,0xA8,0xA9,0xAE,0xEA,0x08},
{0x08,0xC8,0x0C,0x0B,0xEA,0x08,0x08,0x00},
{0x00,0x00,0x7F,0x04,0x24,0x44,0x3F,0x00}, //前 11
{0x00,0x1F,0x40,0x80,0x7F,0x00,0x00,0x00},
{0x00,0xFC,0x44,0x44,0x44,0xFC,0x10,0x90},
{0x10,0x10,0x10,0xFF,0x10,0x10,0x10,0x00},
{0x00,0x07,0x04,0x04,0x04,0x07,0x00,0x00}, //时 12
{0x03,0x40,0x80,0x7F,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, //一个字符的空格 11
{0x00,0x48,0xe8,0x58,0x49,0xce,0xea,0x48},
{0x08,0x00,0xf8,0x00,0x00,0xff,0x00,0x00},
{0x48,0x48,0x24,0x26,0x13,0x09,0x0c,0x76}, //刻 13
{0x23,0x02,0x07,0x40,0x80,0x7f,0x00,0x00},
{0x00,0x10,0x10,0x10,0x11,0x1e,0x14,0xf0},
{0x10,0x18,0x17,0x12,0x18,0x10,0x00,0x00},
{0x01,0x81,0x41,0x21,0x11,0x09,0x05,0x03}, //关 14
{0x05,0x09,0x31,0x61,0xc1,0x41,0x00,0x00},
{0x08,0x08,0xc8,0xff,0x48,0x88,0x08,0x00},
{0xfe,0x02,0x02,0x02,0xfe,0x00,0x00,0x00}, //机 15
{0x04,0x03,0x00,0xff,0x00,0x40,0x30,0x0c},
{0x03,0x00,0x00,0x00,0x3f,0x40,0x78,0x00},
{0x40,0x40,0x42,0xCC,0x00,0x40,0xA0,0x9F},
{0x81,0x81,0x81,0x9F,0xA0,0x20,0x20,0x00},
{0x00,0x00,0x00,0x7F,0xA0,0x90,0x40,0x43},
{0x2C,0x10,0x28,0x26,0x41,0xC0,0x40,0x00}, //设 16
{0x00,0x10,0x17,0xD5,0x55,0x57,0x55,0x7D},
{0x55,0x57,0x55,0xD5,0x17,0x10,0x00,0x00},
{0x40,0x40,0x40,0x7F,0x55,0x55,0x55,0x55},
{0x55,0x55,0x55,0x7F,0x40,0x60,0x40,0x00}, //置 17
{0x00,0x00,0xFE,0x82,0x92,0x92,0x92,0xFE},
{0x92,0x9A,0xD2,0x82,0xFF,0x02,0x00,0x00},
{0x40,0x20,0x1F,0x00,0x00,0x7E,0x22,0x22},
{0x22,0x3F,0x42,0x80,0x7F,0x00,0x00,0x00}, //周 18
{0x00,0x80,0x40,0x20,0x98,0x86,0x80,0x80},
{0x83,0x8C,0x90,0x20,0xC0,0x80,0x80,0x00},
{0x01,0x00,0x80,0x40,0x20,0x1F,0x00,0x40},
{0x80,0x40,0x3F,0x00,0x00,0x01,0x00,0x00}, //分 19
{0x20,0x24,0x24,0xA4,0xFE,0xA3,0x22,0x80},
{0x70,0x00,0xFF,0x00,0x10,0x20,0x60,0x00},
{0x10,0x08,0x06,0x01,0xFF,0x00,0x81,0x80},
{0x40,0x20,0x17,0x08,0x04,0x03,0x00,0x00}, //秒 20
{0x00,0x02,0x02,0xC2,0x02,0x02,0x02,0xFE}, //正 21
{0x82,0x82,0x82,0xC2,0x83,0x02,0x00,0x00},
{0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x7F},
{0x40,0x40,0x40,0x40,0x40,0x60,0x40,0x00},
{0x08,0x08,0x08,0x08,0xC8,0x38,0x0F,0x08}, //在 22
{0x08,0xE8,0x08,0x88,0x08,0x0C,0x08,0x00},
{0x08,0x04,0x02,0xFF,0x00,0x40,0x41,0x41},
{0x41,0x7F,0x41,0x41,0x41,0x60,0x40,0x00},
{0x00,0x04,0x04,0x14,0x24,0x04,0x04,0xD4}, //采 23
{0x24,0x02,0x22,0x12,0x1B,0x82,0x00,0x00},
{0x01,0x21,0x21,0x11,0x09,0x05,0x03,0xFF},
{0x03,0x05,0x09,0x09,0x11,0x31,0x11,0x00},
{0x20,0x10,0x08,0xFC,0x57,0x54,0x54,0xFD}, //集 24
{0x56,0x54,0x54,0x56,0x04,0x00,0x00,0x00},
{0x04,0x44,0x44,0x27,0x15,0x0D,0x05,0xFF},
{0x05,0x0D,0x15,0x25,0x65,0x24,0x04,0x00},
{0x00,0x00,0xc0,0x38,0xe0,0x00,0x00,0x00}, //A 0A
{0x20,0x3c,0x23,0x02,0x02,0x27,0x38,0x20},
{0x08,0xf8,0x88,0x88,0x88,0x70,0x00,0x00}, //B 0B
{0x20,0x3f,0x20,0x20,0x20,0x11,0x0e,0x00},
{0xc0,0x30,0x08,0x08,0x08,0x08,0x38,0x00}, //C 0C
{0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00},
{0x08,0xf8,0x08,0x08,0x08,0x10,0xe0,0x00}, //D 0D
{0x20,0x3f,0x20,0x20,0x20,0x20,0x0f,0x00},
{0x08,0xf8,0x88,0x88,0xe8,0x08,0x10,0x00}, //E 0E
{0x20,0x3f,0x20,0x20,0x23,0x20,0x18,0x00},
{0x08,0xf8,0x88,0x88,0xe8,0x08,0x10,0x00}, //F 0F
{0x20,0x3f,0x20,0x00,0x03,0x00,0x00,0x00},
{0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x00}, //. 18
{0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00},
{0x10,0x92,0x54,0x38,0xFF,0x38,0x54,0x52},
{0x80,0xF0,0x1F,0x12,0x10,0xF0,0x10,0x00},
{0x42,0x42,0x2A,0x2E,0x13,0x1A,0x26,0x02},
{0x40,0x20,0x13,0x0C,0x33,0x60,0x20,0x00}, //数 25
{0x08,0x08,0x08,0xFF,0x88,0x40,0xFE,0x92},
{0x92,0x92,0xF2,0x92,0x92,0x9E,0x80,0x00},
{0x02,0x42,0x81,0x7F,0x40,0x30,0x0F,0xFC},
{0x44,0x44,0x47,0x44,0x44,0xFC,0x00,0x00}, //据 26
{0x00,0x00,0xFC,0x08,0x08,0x08,0x08,0xFF},
{0x08,0x08,0x08,0x08,0xFC,0x08,0x00,0x00},
{0x00,0x00,0x07,0x02,0x02,0x02,0x02,0xFF},
{0x02,0x02,0x02,0x02,0x07,0x00,0x00,0x00}, //中 27
{0x10,0x0C,0x04,0x24,0x24,0x24,0x25,0xE6},
{0x24,0x24,0x34,0x24,0x04,0x14,0x0C,0x00},
{0x80,0x40,0x20,0x1F,0x20,0x40,0x40,0x7F},
{0x42,0x42,0x43,0x42,0x40,0x60,0x20,0x00}, //定 28
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF},
{0x20,0x20,0x20,0x30,0x20,0x00,0x00,0x00},
{0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x7F},
{0x40,0x40,0x40,0x40,0x40,0x60,0x40,0x00}, //上 29
{0x80,0x40,0x20,0xF8,0x47,0x48,0x48,0x48},
{0xC8,0x7F,0x48,0x48,0x4C,0x68,0x40,0x00},
{0x00,0x00,0x00,0xFF,0x00,0x00,0x02,0x0B},
{0x12,0x62,0xD2,0x0A,0x06,0x02,0x00,0x00}, //传 30
{0x10,0x10,0x10,0xFF,0x90,0x50,0x00,0xFC},
{0x92,0x80,0xFF,0x80,0x92,0xFF,0x02,0x00},
{0x02,0x42,0x81,0x7F,0x00,0x00,0x82,0x82},
{0x46,0x2A,0x13,0x2A,0x46,0xC2,0x40,0x00}, //搜 31
{0x40,0x30,0x14,0x14,0x94,0xD4,0xB4,0x9F},
{0x94,0x94,0x54,0x16,0x14,0x50,0x30,0x00},
{0x00,0x00,0x44,0x24,0x14,0x44,0x86,0x7D},
{0x04,0x04,0x14,0x26,0x6C,0x00,0x00,0x00} //索 32
};
/******* The module of delay function ****************/
void delay( uchar y )
{
uint i;
while(y-->0)
{
for(i=0;i<2000;i++)
{;}
}
}
/************************************************************/
/********************** busy flag for LCD ****************/
void busy( )
{
uchar i;
i=STATE;
while((i&0x80)!=0) //check the MSB(1 for write and read)
{i=STATE;}
return;
}
/************************************************************/
/*********** The module of LCD display function ********/
void display(uchar Data,uchar length,uchar xpage,uchar y,bit side)
{
uchar addr,i,dd,j;
if(side==0)
{
LCOMM=xpage;
busy();
LCOMM=y;
}
else
{
RCOMM=xpage;
busy();
RCOMM=y;
}
if(length==0x10)
{ switch(Data)
{
case 0x00: addr=0x34;goto BB; //日
case 0x01: addr=0x14;goto BB; //一
case 0x02: addr=0x18;goto BB; //二
case 0x03: addr=0x1c;goto BB; //三
case 0x04: addr=0x20;goto BB; //四
case 0x05: addr=0x24;goto BB; //五
case 0x06: addr=0x28;goto BB; //六
case 0x07: addr=0x2c;goto BB; //年
case 0x08: addr=0x30;goto BB; //月
case 0x09: addr=0x3a;goto BB; //空格
case 0x10: addr=0x3e;goto BB; //当
case 0x11: addr=0x42;goto BB; //前
case 0x12: addr=0x46;goto BB; //时
case 0x13: addr=0x4c;goto BB; //刻
case 0x14: addr=0x50;goto BB; //关
case 0x15: addr=0x54;goto BB; //机
case 0x16: addr=0x58;goto BB; //设
case 0x17: addr=0x5c;goto BB; //置
case 0x18: addr=0x60;goto BB; //周
case 0x19: addr=0x64;goto BB; //分
case 0x20: addr=0x68;goto BB; //秒
case 0x21: addr=0x6c;goto BB; //正
case 0x22: addr=0x70;goto BB; //在
case 0x23: addr=0x74;goto BB; //采
case 0x24: addr=0x78;goto BB; //集
case 0x25: addr=0x8A;goto BB; //数
case 0x26: addr=0x8E;goto BB; //据
case 0x27: addr=0x92;goto BB; //中
case 0x28: addr=0x96;goto BB; //定
case 0x29: addr=0x9A;goto BB; //上
case 0x30: addr=0x9E;goto BB; //传
case 0x31: addr=0xA2;goto BB; //搜
case 0x32: addr=0xA6;goto BB; //索
default: break;
}
BB: for(i=0;i<2;i++)
{
for(j=0;j<8;j++)
{ dd=lib8[addr+i][j];
if (side==0) LWRITE=dd;
else RWRITE=dd;
busy();
}
}
xpage=xpage+1;
if(side==0)
{
LCOMM=xpage;
busy();
LCOMM=y;
}
else
{
RCOMM=xpage;
busy();
RCOMM=y;
}
for(i=0;i<2;i++)
{
for(j=0;j<8;j++)
{ dd=lib8[addr+i+2][j];
if (side==0) LWRITE=dd;
else RWRITE=dd;
busy();
}
}
}
else
{switch(Data)
{
case 0x00: addr=0x00;goto AA; //0
case 0x01: addr=0x02;goto AA; //1
case 0x02: addr=0x04;goto AA; //2
case 0x03: addr=0x06;goto AA; //3
case 0x04: addr=0x08;goto AA; //4
case 0x05: addr=0x0a;goto AA; //5
case 0x06: addr=0x0c;goto AA; //6
case 0x07: addr=0x0e;goto AA; //7
case 0x08: addr=0x10;goto AA; //8
case 0x09: addr=0x12;goto AA; //9
case 0x10: addr=0x38;goto AA; //:
case 0x11: addr=0x4a;goto AA; //空格
case 0x0A: addr=0x7c;goto AA; //A
case 0x0B: addr=0x7e;goto AA; //B
case 0x0C: addr=0x80;goto AA; //C
case 0x0D: addr=0x82;goto AA; //D
case 0x0E: addr=0x84;goto AA; //E
case 0x0F: addr=0x86;goto AA; //F
case 0x18: addr=0x88;goto AA; //.
default: break;
}
AA: for(i=0;i<2;i++)
{
for(j=0;j<8;j++)
{ dd=lib8[addr+i][j];
if (side==0) LWRITE=dd;
else RWRITE=dd;
}
xpage=xpage+1;
if(side==0)
{
LCOMM=xpage;
busy();
LCOMM=y;
}
else
{
RCOMM=xpage;
busy();
RCOMM=y;
}
}
}
}
/*************************************************/
/*************************************************/
/* the sub functions of I2c */
/*************************************************/
/******* Start i2c device bus ************/
void Start_i2c()
{
SDA=1;
NOP();
SCL=1;
NOP();
NOP();
NOP();
NOP();
NOP();
SDA=0;
NOP();
NOP();
NOP();
NOP();
NOP();
SCL=0;
NOP();
NOP();
}
/*************************************************/
/****** Stop i2c device bus **************/
void Stop_i2c()
{
SDA=0;
NOP();
SCL=1;
NOP();
NOP();
NOP();
NOP();
NOP();
SDA=1;
NOP();
NOP();
NOP();
NOP();
}
/*************************************************/
/******** Set ACK signal function ************/
void MACK(bit a)
{
if(a==0) SDA=0;
else SDA=1;
NOP();
NOP();
NOP();
SCL=1;
NOP();
NOP();
NOP();
NOP();
NOP();
SCL=0;
NOP();
NOP();
}
/*************************************************/
/***** flag byte to the i2c device *********/
void WrByte(uchar c)
{
uchar count;
for(count=0;count<8;count++)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -