📄 disp1.c
字号:
#define uchar unsigned char
#define uint unsigned int
#define nop() asm("nop")
#include<reg51.h>
#include<absacc.h>
#include <stdio.h>
//#include <AT89X51.h>
sbit cs1=P2^6; //液晶屏左屏选通信号//
sbit cs2=P2^7; //液晶屏右屏选通信号//
sbit e_lcm=P2^5; //液晶屏使能信号//
sbit d_i=P2^4;
///////////////////////////////word/////////////////////////////////////
unsigned char code chinese[]=
{
/*-- 文字: 欢 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x80,0x00,0x80,0xFC,0x80,0x05,0xFE,0x85,0x04,0x4A,0x48,0x28,0x40,0x10,0x40,
0x18,0x40,0x18,0x60,0x24,0xA0,0x24,0x90,0x41,0x18,0x86,0x0E,0x38,0x04,0x00,0x00,
/*-- 文字: 迎 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x40,0x00,0x21,0x80,0x36,0x7C,0x24,0x44,0x04,0x44,0x04,0x44,0xE4,0x44,0x24,0x44,
0x25,0x44,0x26,0x54,0x24,0x48,0x20,0x40,0x20,0x40,0x50,0x00,0x8F,0xFE,0x00,0x00,
/*-- 文字: 使 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x08,0x40,0x0C,0x40,0x1B,0xFE,0x10,0x40,0x37,0xFC,0x64,0x44,0xA4,0x44,0x27,0xFC,
0x24,0x44,0x22,0x40,0x21,0x80,0x20,0x80,0x21,0x70,0x22,0x1E,0x2C,0x04,0x00,0x00,
/*-- 文字: 用 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x1F,0xFC,0x10,0x84,0x10,0x84,0x10,0x84,0x1F,0xFC,0x10,0x84,0x10,0x84,
0x10,0x84,0x1F,0xFC,0x10,0x84,0x10,0x84,0x20,0x84,0x20,0x84,0x40,0x94,0x80,0x88,
/*-- 文字: 高 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x02,0x00,0x01,0x00,0xFF,0xFE,0x00,0x00,0x0F,0xE0,0x08,0x20,0x0F,0xE0,0x00,0x00,
0x7F,0xFC,0x40,0x04,0x4F,0xE4,0x48,0x24,0x48,0x24,0x4F,0xE4,0x40,0x14,0x40,0x08,
/*-- 文字: 压 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x3F,0xFE,0x20,0x00,0x20,0x80,0x20,0x80,0x20,0x88,0x2F,0xFC,0x20,0x80,
0x20,0xA0,0x20,0x90,0x20,0x98,0x40,0x90,0x40,0x80,0xBF,0xFE,0x00,0x00,0x00,0x00,
/*-- 文字: 气 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x08,0x00,0x08,0x00,0x1F,0xFE,0x10,0x00,0x20,0x00,0x4F,0xF8,0x00,0x00,0x1F,0xF0,
0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x0A,0x00,0x0A,0x00,0x06,0x00,0x02,
/*-- 文字: 体 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x10,0x40,0x18,0x40,0x10,0x40,0x20,0x40,0x37,0xFC,0x60,0xC0,0xA0,0xE0,0x21,0x60,
0x21,0x50,0x22,0x48,0x24,0x4E,0x2B,0xF4,0x20,0x40,0x20,0x40,0x20,0x40,0x00,0x00,
/*-- 文字: 灯 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x10,0x00,0x10,0x00,0x11,0xFE,0x10,0x10,0x54,0x10,0x54,0x10,0x58,0x10,0x90,0x10,
0x10,0x10,0x18,0x10,0x24,0x10,0x22,0x10,0x40,0x10,0x40,0x50,0x80,0x20,0x00,0x00,
/*-- 文字: 点 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x01,0x00,0x01,0x00,0x01,0xF8,0x01,0x00,0x01,0x10,0x1F,0xF8,0x10,0x10,0x10,0x10,
0x10,0x10,0x1F,0xF0,0x10,0x10,0x01,0x10,0x28,0x88,0x24,0x44,0x44,0x44,0x00,0x00,
/*-- 文字: 火 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x01,0x00,0x01,0x80,0x01,0x00,0x01,0x10,0x11,0x18,0x11,0x20,0x11,0x40,0x11,0x00,
0x22,0x80,0x02,0x80,0x04,0x40,0x04,0x20,0x08,0x30,0x10,0x1C,0x20,0x08,0x40,0x00,
/*-- 文字: 测 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x40,0x02,0x27,0xC2,0x24,0x42,0x84,0x52,0x45,0x52,0x55,0x52,0x15,0x52,0x25,0x52,
0x25,0x52,0x25,0x52,0xC5,0x52,0x41,0x02,0x42,0x82,0x42,0x42,0x44,0x4A,0x48,0x04,
/*-- 文字: 试 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x20,0x40,0x28,0x20,0x24,0x30,0x24,0x27,0xFE,0x00,0x20,0xE0,0x20,0x27,0xE0,
0x21,0x20,0x21,0x10,0x21,0x10,0x21,0x0A,0x29,0xCA,0x36,0x06,0x20,0x02,0x00,0x00,
/*-- 文字: 仪 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x08,0x80,0x08,0x40,0x10,0x68,0x12,0x48,0x22,0x08,0x62,0x10,0xA1,0x10,0x21,0x10,
0x20,0xA0,0x20,0xA0,0x20,0x40,0x20,0xA0,0x21,0x10,0x22,0x0E,0x2C,0x04,0x20,0x00,
};
unsigned char code start[]=
{
0,1,2,3,4,5,6,7,255,8,9,10,11,12,13
};
///////////////////////////////display functions//////////////////////
//------------------------------------------------//
void send_command_l(uchar d) //左屏控制信号//
{uchar data i;
d_i=0; cs1=1; cs2=0;
P0=d;
e_lcm=1;
for(i=5;i!=0;i--);
e_lcm=0;
for(i=5;i!=0;i--);
e_lcm=1;
//EA=1;
}
//-------------------------------------------------//
void send_data_l(uchar d) //左屏数据信号//
{uchar data i;
d_i=1; cs1=1; cs2=0;
for(i=10;i!=0;i--);
P0=d;
for(i=10;i!=0;i--);
e_lcm=1;
for(i=10;i!=0;i--);
e_lcm=0;
for(i=5;i!=0;i--);
e_lcm=1;
// EA=1;
}
//------------------------------------------------//
void send_command_r(uchar d) //右屏控制信号//
{uchar data i;
d_i=0; cs1=0; cs2=1;
P0=d;
e_lcm=1;
for(i=5;i!=0;i--);
e_lcm=0;
for(i=5;i!=0;i--);
e_lcm=1;
// EA=1;
}
//-----------------------------------------------//
void send_data_r(uchar d) //右屏数据信号//
{uchar data i;
d_i=1; cs1=0; cs2=1;
P0=d;
e_lcm=1;
for(i=5;i!=0;i--);
e_lcm=0;
for(i=5;i!=0;i--);
e_lcm=1;
//EA=1;//
}
////////////////////////////显示文字函数//////////////////////////
//用于显示人机交互,参数输入,输出所需的文字,符号。单个文字或符//
//号均为16*16大小。函数无返回值,有4个变量,x表示要显示的列,y表//
//示要显示的行。p1为要显示的数组的首地址,表示数组中的第几个字。
//lth表示数组长度,回车不
//记长度.数组由字库中映射序号组成.数组中255表示回车换行.换行后与//
//x,y表示的初始位置对齐。x取值范围0,1,2,3,4,5,6。y取值范围1,2,3///
//,4.....125,126,127。sign==1表示正常显示,sign==0表示反色显示.//
//不能在中间区域显示汉字,要么左半屏,要么右半屏//
//////////////////////////////////////////////////////////////////
void display_output_word(uchar x,uchar y,uchar *p1,uchar lth,bit sign)
{
uchar *p2; //指向字库中某个字的地址
uchar idata j;
uchar idata i;
uchar idata k; //字记录,用于设定下一个字的起始列,便于换行。
k=0;
for(j=0;j<lth;j++)
{
if(*p1==255) //回车换行
{
x=x+2; //移动到下一行
k=0; //字记录初始化
}
else //无回车换行
{
p2=&chinese; //取字库首地址;保存在word.h中数组chinese
p2=p2+(*p1*32); //移动到相应字所对应的地址
if((y+k*16)>63) //右半屏
{
send_command_r(x+184);
send_command_r(y+k*16);
for(i=0;i<16;i++) //显示上半字
{
if(sign==1)
{
send_data_r(*p2);
p2++;
}
else
{
send_data_r(*p2^0xff); //反色显示
p2++;
}
}
send_command_r(x+184+1);
send_command_r(y+k*16);
for(i=0;i<16;i++) //显示下半字
{
if(sign==1)
{
send_data_r(*p2);
p2++;
}
else
{
send_data_r(*p2^0xff);
p2++;
}
}
k++; //字记录增一
}
else //左半屏
{
send_command_l(x+184);
send_command_l(y+64+k*16);
for(i=0;i<16;i++) //显示上半字
{
if(sign==1)
{
send_data_l(*p2);
p2++;
}
else
{
send_data_l(*p2^0xff);
p2++;
}
}
send_command_l(x+184+1);
send_command_l(y+64+k*16);
for(i=0;i<16;i++) //显示下半字
{
if(sign==1)
{
send_data_l(*p2);
p2++;
}
else
{
send_data_l(*p2^0xff);
p2++;
}
}
k++; //字记录增一
}
}
p1++; //数组指针后移向下一个字
}
}
///////////////////////////显示初始化函数/////////////////////////
//用于显示器的初始化,无返回参数,无输入参数。无全局变量。 //
//////////////////////////////////////////////////////////////////
void display_initial()
{
send_command_l(0x3e); //关显示器
send_command_r(0x3e);
send_command_l(0x3f); //开显示器
send_command_r(0x3f);
//send_command_l(0xc0); //设置起始行
//send_command_r(0xc0);
}
void main(void)
{
//display_initial();
display_output_word(0,0,start,14,1);
while(1){;}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -