📄 lcd.c
字号:
#include <.\zm.h>
#include <reg52.h>
#include <absacc.h>
#define uchar unsigned char
#define asscii 46 //how many one byte
#define null 44//NULL
#define cheng 46 //成
#define du1 47//都
#define si 48//世
#define ji1 49//纪
#define zhong1 50//中
#define ke 51//科
#define ping 52//平
#define jun 53//均
#define su 54//速
#define du2 55//度
#define jia 56//加
#define guang 57//光
#define dian 58//电
#define men 59//门
#define zi 60//自
#define jian 61//检
#define dan 62//单
#define shuang 63//双
#define bai 64//摆
#define zhou 65//周
#define qi1 66//期
#define zhong2 67//钟
#define pen 68//碰
#define zhuang 69//撞
#define jiao 70//角
#define zhuan 71//转
#define xian 72//线
#define miao 73//秒
#define fen 74//分
#define shou 75//手
#define dong 76//动
#define ce 77//测
#define liang 78//量
#define zhi 79//智
#define neng 80//能
#define ji2 81//计
#define shu 82//数
#define shi 83//时
#define qi2 84//器
#define tong 85//通
#define dao 86//道
#define gao 87//高
#define di 88 //低
#define duo 89
#define mai 90
#define chong 91
#define ci 92
//code char ZM[];
extern select_id;
extern void PR0(char COM);
extern void PR1(char DAT);
extern void PR3(char COM);
extern void PR4(char DAT);
void char_byte(unsigned char lin,unsigned char byte,unsigned char linehead )
{
unsigned char i;
unsigned char k;
unsigned int addr_ziku;
i=byte*8;
if(i<=53)//left
{
PR0(i);
PR0(0xb8|lin);
for(k=0;k<8;k++)
{
addr_ziku=linehead*16+k;
PR1(ZM[addr_ziku]);
}
PR0(i);
PR0(0xb8|(lin+1));
for(k=0;k<8;k++)
{addr_ziku=linehead*16+k+8;
PR1(ZM[addr_ziku]);
}
}
else if(i>=61)//right
{
PR3(i%61);
PR3(0xb8|lin);
for(k=0;k<8;k++)
{addr_ziku=linehead*16+k;
PR4(ZM[addr_ziku]);
}
PR3(i%61);
PR3(0xb8|(lin+1));
for(k=0;k<8;k++)
{addr_ziku=linehead*16+k+8;
PR4(ZM[addr_ziku]);
}
}
else //mid
{
PR0(i);
PR0(0xb8|lin);
for(k=0;k<(61-i);k++)
{addr_ziku=linehead*16+k;
PR1(ZM[addr_ziku]);
}
PR3(0);
PR3(0xb8|lin);
for(k=0;k<(i+8-61);k++)
{addr_ziku=linehead*16+k+61-i;
PR4(ZM[addr_ziku]);
}
PR0(i);
PR0(0xb8|(lin+1));
for(k=0;k<(61-i);k++)
{addr_ziku=linehead*16+k+8;
PR1(ZM[addr_ziku]);
}
PR3(0);
PR3(0xb8|(lin+1));
for(k=0;k<(i+8-61);k++)
{addr_ziku=linehead*16+8+k+61-i;
PR4(ZM[addr_ziku]);
}
}
}
void line_lcd(unsigned char lin,unsigned char linehead[])
{
unsigned char i=0;
unsigned char j=0;
unsigned char k=0;
unsigned int addr_ziku;
while(linehead[i]!=0xff)
{
if(linehead[i]>=asscii)//判断是汉字还是字符
j+=16;
else j+=8;
if((j<69)&&(j>61)&&(linehead[i]<asscii))//字符从56列开始,左屏有5列,右屏有3列
{
PR0(j-8);
PR0(0xb8|lin);
for(k=0;k<(8-j+61);k++)
{
addr_ziku=linehead[i]*16+k;
PR1(ZM[addr_ziku]);}
PR3(0);
PR3(0xb8|lin);
for(k=0;k<=(j-61);k++)
{addr_ziku=linehead[i]*16+k-j+69;
PR4(ZM[addr_ziku]);}
PR0(j-8);
PR0(0xb8|(lin+1));
for(k=0;k<(69-j);k++)
{addr_ziku=linehead[i]*16+k+8;
PR1(ZM[addr_ziku]);}
PR3(0);
PR3(0xb8|(lin+1));
for(k=0;k<=(j-61);k++)
{addr_ziku=linehead[i]*16+k+77-j;
PR4(ZM[addr_ziku]);}
}
else if((j<77)&&(j>61)&&(linehead[i]>=asscii))//汉字从56列或48列开始,左屏有5列,右屏有11列或左屏有13列,右屏有5列
{
PR0(j-16);
PR0(0xb8|lin);
for(k=0;k<(77-j);k++)
{addr_ziku=(linehead[i]-asscii)*32+asscii*16+k;
PR1(ZM[addr_ziku]);}
PR3(0);
PR3(0xb8|lin);
for(k=0;k<=(j-61);k++)
{addr_ziku=(linehead[i]-asscii)*32+asscii*16+16-(j-61)+k;
PR4(ZM[addr_ziku]);}
PR0(j-16);
PR0(0xb8|(lin+1));
for(k=0;k<(61-(j-16));k++)
{addr_ziku=(linehead[i]-asscii)*32+asscii*16+k+16;
PR1(ZM[addr_ziku]);}
PR3(0);
PR3(0xb8|(lin+1));
for(k=0;k<(j-61);k++)
{addr_ziku=(linehead[i]-asscii)*32+asscii*16+16+16-(j-61)+k;
PR4(ZM[addr_ziku]);}
}
else
{
if(linehead[i]<asscii)//8*16
{
if(j<61)//左屏字符
{
PR0(j-8);
PR0(0xb8|lin);
for(k=0;k<8;k++)
{addr_ziku=linehead[i]*16+k;
PR1(ZM[addr_ziku]);}
PR0(j-8);
PR0(0xb8|(lin+1));
for(k=0;k<8;k++)
{addr_ziku=linehead[i]*16+k+8;
PR1(ZM[addr_ziku]);}
}
else
{
PR3((j-8)%61);
PR3(0xb8|lin);
for(k=0;k<8;k++)
{addr_ziku=linehead[i]*16+k;
PR4(ZM[addr_ziku]);}
PR3((j-8)%61);
PR3(0xb8|(lin+1));
for(k=0;k<8;k++)
{addr_ziku=linehead[i]*16+k+8;
PR4(ZM[addr_ziku]);}
}//右屏字符
}
else//16*16
{
if(j<61)//左屏汉字
{
PR0(j-16);
PR0(0xb8|lin);
for(k=0;k<16;k++)
{addr_ziku=(linehead[i]-asscii)*32+asscii*16+k;
PR1(ZM[addr_ziku]);}
PR0(j-16);
PR0(0xb8|(lin+1));
for(k=0;k<16;k++)
{addr_ziku=(linehead[i]-asscii)*32+asscii*16+k+16;
PR1(ZM[addr_ziku]);}
}
else//右屏汉字
{
PR3(j-61-16);
PR3(0xb8|lin);
for(k=0;k<16;k++)
{addr_ziku=(linehead[i]-asscii)*32+asscii*16+k;
PR4(ZM[addr_ziku]);}
PR3(j-61-16);
PR3(0xb8|(lin+1));
for(k=0;k<16;k++)
{addr_ziku=(linehead[i]-asscii)*32+asscii*16+k+16;
PR4(ZM[addr_ziku]);}
}
}
}
i+=1;
}
}
void clear_up(void)
{
char i;
PR0(0);
PR3(0);
PR0(0xb8);
PR3(0xb8);
for(i=0;i<61;i++)
{
PR1(0);
PR4(0);
}
PR0(0);
PR3(0);
PR0(0xb8|1);
PR3(0xb8|1);
for(i=0;i<61;i++)
{
PR1(0);
PR4(0);
}
}
void clear_down(void)
{
char i;
PR0(0);
PR3(0);
PR0(0xb8|2);
PR3(0xb8|2);
for(i=0;i<61;i++)
{
PR1(0);
PR4(0);
}
PR0(0);
PR3(0);
PR0(0xb8|3);
PR3(0xb8|3);
for(i=0;i<61;i++)
{
PR1(0);
PR4(0);
}
}
//void start(void)
//{
//char show[11]=0;
//}
void celiang()
{
char show[16];
clear_down();
show[0]=null;
show[1]=null;
show[2]=ce;
show[3]=liang;
show[4]=zhong1;
show[5]=42;
show[6]=42;
show[7]=42;
show[8]=42;
show[9]=42;
show[10]=null;
show[11]=null;
show[12]=0xff;
line_lcd(2,show);
// char_byte(0,14,null);
}
void menu(char id)
{
char show[16];
char i;
i=id;
i=i&0xf0;
clear_up();
clear_down();
switch(i)
{
case 0x00:
show[0]=1;
show[1]=ji2;
show[2]=shi;
show[3]=null;
show[4]=null;
show[5]=null;
show[6]=null;
show[7]=null;
show[8]=null;
show[9]=null;
show[10]=null;
show[11]=null;
show[12]=31;
show[13]=0xff;
line_lcd(2,show);
break;
case 0x10:
show[0]=2;
show[1]=ping;
show[2]=jun;
show[3]=su;
show[4]=du2;
show[5]=null;
show[6]=null;
show[7]=null;
show[8]=null;
show[9]=null;
show[10]=31;
show[11]=0xff;
line_lcd(2,show);
break;
case 0x20:
show[0]=3;
show[1]=jia;
show[2]=su;
show[3]=du2;
show[4]=null;
show[5]=null;
show[6]=null;
show[7]=null;
show[8]=null;
show[9]=null;
show[10]=null;
show[11]=31;
show[12]=0xff;
line_lcd(2,show);
break;
case 0x30:
show[0]=4;
show[1]=ji2;
show[2]=shu;
show[3]=null;
show[4]=null;
show[5]=null;
show[6]=null;
show[7]=null;
show[8]=null;
show[9]=null;
show[10]=null;
show[11]=null;
show[12]=31;
show[13]=0xff;
line_lcd(2,show);
break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -