⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 disp1.c

📁 HS12864显示程序
💻 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 + -