📄 lcdmain.c
字号:
#include "lcddrive.h"
#include <reg51f.h>
sbit RUN_LED = P3^4;
sbit RESET=P1^0;
sbit RDB=P3^7;
//sbit TDA=P1^3;
//sbit P15=P1^5;
//sbit TCK=P3^2;
sfr SPCTL=0xD5;
sfr SPCFG=0xAA;
sfr SPDAT=0x86;
sfr WDTC=0xc0;
sfr WDTD=0x85;
void LCD_WriteData(char dat);
void LCD_WriteCommand(char com);
extern unsigned char xdata DispBuff[GUI_LCM_YMAX][GUI_LCM_XMAX/8];
uchar xdata i=0,disnum=0;
uchar data dispbuf[8];
uchar xdata fflag=0;
//char xdata strpct[20]="CT: A= B= C= ";
#define strpnum 9
#define receibufnum 8
data char strp[6]="FHKZ";
//data char strpu[20]="U: . . . ";
//data char strpi[20]="I: . . . ";
char xdata strpui[7][11];
data uchar receibuf[receibufnum];
const uchar xdata ledcode[]={0x7E,0x0C,0xB6,0x9E,0xCC,0xDA,0xFA,0x0E,0xFE,0xDE,0xEE,0xF8,0x72,0xBC,0xF2,0xE2};
void refresh()
{
uchar col,row;
for(row=0; row<16; row++)
for(col=0; col<20; col++)
DispBuff[row][col]=0x0;
for(row=0; row<160; row++)
for(col=0; col<81; col++)
LCD_WriteData(0x00);
}
findnum()
{
uchar i,j,codenum;
for(i=3,j=0;i<receibufnum;i++,j++)
{
for(codenum=0;codenum<strlen(ledcode);codenum++)
{
if(ledcode[codenum]==dispbuf[i])
break;
}
if(codenum<10)
strp[j]=codenum+0x30;
else
strp[j]=codenum+0x57;
}
if((dispbuf[0]==0x7e)&&(dispbuf[1]==0xee||dispbuf[1]==0xf8||dispbuf[1]==0x72))
{
if(dispbuf[1]==0xee)
{
strpui[0][3]=strp[0];
strpui[0][4]=strp[1];
strpui[0][5]=strp[2];
strpui[0][7]=strp[4];
disnum=1;
}
if(dispbuf[1]==0xf8)
{
strpui[1][3]=strp[0];
strpui[1][4]=strp[1];
strpui[1][5]=strp[2];
strpui[1][7]=strp[4];
disnum=2;
}
if(dispbuf[1]==0x72)
{
strpui[2][3]=strp[0];
strpui[2][4]=strp[1];
strpui[2][5]=strp[2];
strpui[2][7]=strp[4];
disnum=3;
}
}
else if((dispbuf[0]==0x0c)&&(dispbuf[1]==0xee||dispbuf[1]==0xf8||dispbuf[1]==0x72))
{
if(dispbuf[1]==0xee)
{
strpui[3][3]=strp[0];
strpui[3][4]=strp[1];
strpui[3][6]=strp[2];
strpui[3][7]=strp[4];
disnum=4;
}
if(dispbuf[1]==0xf8)
{
strpui[4][3]=strp[0];
strpui[4][4]=strp[1];
strpui[4][6]=strp[2];
strpui[4][7]=strp[4];
disnum=5;
}
if(dispbuf[1]==0x72)
{
strpui[5][3]=strp[0];
strpui[5][4]=strp[1];
strpui[5][6]=strp[2];
strpui[5][7]=strp[4];
disnum=6;
}
}
else
{
for(i=0,j=0;i<receibufnum;i++,j++)
{
for(codenum=0;codenum<strlen(ledcode);codenum++)
{
if(ledcode[codenum]==dispbuf[i])
break;
}
if(codenum<10)
strp[j]=codenum+0x30;
else
strp[j]=codenum+0x57;
}
strpui[6][3]=strp[0];
strpui[6][4]=strp[1];
strpui[6][5]=strp[2];
strpui[6][6]=strp[3];
strpui[6][7]=strp[4];
strpui[6][8]=strp[5];
disnum=7;
}
if(disnum >=1 ) GUI_DispStringAt(&strpui[disnum-1][0], 0, 0);
}
void datapro()
{
uchar a;
uchar tempqian,temphou,temp7;
for(a=0;a<7;a++)
{
tempqian=receibuf[a];
temphou=receibuf[a+1];
tempqian=tempqian<<1;
temphou=(temphou&0x80)>>7;
dispbuf[a]=tempqian|temphou;
}
temp7=receibuf[7];
temp7=temp7<<1;
dispbuf[7]=temp7;
findnum();
}
init()
{
RDB=1;
RESET=0;
delay(200);
RESET=1;
delay(200);
init_uc1698();
RAM_ADDRESS();
refresh();
}
void init_serial()
{
TMOD=0x20;
TH1=0xcb;
TL1=0xcb;
TR1=1;
SM0=0;
SM1=1;
REN=1;
ES=1;
}
SPI_init()
{
EA=1;
ES=1; //开串口中断 (须和SPI中断使能位都置高 才能使能SPI中断)
SPCTL=0xc8; //SPI控制寄存器 (从机模式 时钟极性为低有效 时钟线后延触发移位)
SPCFG=0x00; //该配置寄存器最高位--SPI字节数据传送结束标志位
}
void look()
{
unsigned char cnt;
for(cnt=0;cnt<receibufnum;cnt++)
{
ES=0;
SBUF=dispbuf[cnt];
while(!TI);
TI=0;
ES=1;
}
}
void initstrpui(void)
{
uchar i, j;
for(i=0; i<7; i++)
for(j=0; j<11; j++)
{strpui[i][j]=0;}
strpui[0][0] ='U';
strpui[0][1] ='a';
strpui[0][2] =':';
strpui[0][6] ='.';
strpui[0][8] ='V';
strpui[1][0] ='U';
strpui[1][1] ='b';
strpui[1][2] =':';
strpui[1][6] ='.';
strpui[1][8] ='V';
strpui[2][0] ='U';
strpui[2][1] ='c';
strpui[2][2] =':';
strpui[2][6] ='.';
strpui[2][8] ='V';
strpui[3][0] ='I';
strpui[3][1] ='a';
strpui[3][2] =':';
strpui[3][5] ='.';
strpui[3][8] ='A';
strpui[4][0] ='I';
strpui[4][1] ='b';
strpui[4][2] =':';
strpui[4][5] ='.';
strpui[4][8] ='A';
strpui[5][0] ='I';
strpui[5][1] ='c';
strpui[5][2] =':';
strpui[5][5] ='.';
strpui[5][8] ='A';
strpui[6][0] ='C';
strpui[6][1] ='T';
strpui[6][2] =':';
for(i=0; i<7; i++)
{
GUI_DispStringAt(&strpui[i][0], 0, 0);
CopyRAMToLCD(0, i*16, 81, 15+i*16);
}
}
void main(void)
{
RUN_LED=0;
init();
init_serial(); //串口初始化
SPI_init();//SPI初始化
// GUI_DispStringAt(strp, 0, 0);
// CopyRAMToLCD(0, 0, 159, 15); //写液晶"XJT-5000/f"
RUN_LED=1;
initstrpui();
while(1)
{
RUN_LED=1;
if(fflag==1)
{
fflag=0;
RUN_LED=0;
datapro();
look();
// for(i=0; i<7; i++)
// {GUI_DispStringAt(&strpui[0][0], 0, 0);}
if(disnum >=1 ) CopyRAMToLCD(0, (disnum-1)*16, 81, 15+(disnum-1)*16);
#if 0
if((disnum==1)||(disnum==2)||(disnum==3))
{
GUI_DispStringAt(strpu, 0, 0);
CopyRAMToLCD(0, 0, 159, 15); //写液晶"XJT-5000/f"
}
else if((disnum==4)||(disnum==5)||(disnum==6))
{
GUI_DispStringAt(strpi, 0, 0);
CopyRAMToLCD(0, 16, 159, 31); //写液晶"XJT-5000/f
}
#endif
}
}
}
void serial() interrupt 4
{
while(!SPCFG); //等待SPI接受数据结束,SPI中断硬件置位SPCFG最高位(一字节数据传送结束标志,须软件清零)
receibuf[i++]=SPDAT;
SPCFG=0; //软件清零数据传送结束标志位
if(i==8)
{
i=0;
fflag=1;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -