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

📄 12864.c

📁 调试通过了的基于89S51的LCD12864液晶显示
💻 C
字号:
/*************************
名称:12864液晶显示

作者:dongpeiqin

修改时间:2007.4.23

功能:   西南交通大学
		机械工程学院
		  吴邦明
		 行胜于言!
*************************/
#include<reg51.h>
#include<intrins.h>
#include<absacc.h>

#define write_cmd_addr_1 XBYTE[0x8fff]	   //写指令地址左 
#define read_state_addr_1 XBYTE[0xafff]    //读状态地址左 
#define write_data_addr_1 XBYTE[0x9fff]    //写数据地址左 
#define read_data_addr_1 XBYTE[0xbfff]     //读数据地址左 

#define write_cmd_addr_2 XBYTE[0x4fff]	   //写指令地址右 
#define read_state_addr_2 XBYTE[0x6fff]    //读状态地址右 
#define write_data_addr_2 XBYTE[0x5fff]    //写数据地址右 
#define read_data_addr_2 XBYTE[0x7fff]     //读数据地址右 

#define Disp_On 0x3f//开显示
#define Disp_Off 0x3e//关显示
#define Col_Add 0x40//列地址
#define Page_Add 0xb8//页地址
#define Start_line 0xc0//起始页

/*****************************

字模,此字体下对应的
点阵为:宽x高=16x16

*****************************/
unsigned char code Chinese_character[][32]=
{
	
	{
		/*--  文字:  西  --*/
		0x02,0xF2,0x12,0x12,0x12,0xFE,0x12,0x12,0x12,0xFE,0x12,0x12,0x12,0xF2,0x02,0x00,
        0x00,0x7F,0x28,0x24,0x22,0x21,0x20,0x20,0x20,0x21,0x22,0x22,0x22,0x7F,0x00,0x00//“西",0
	},

	{
		/*--  文字:  南  --*/
		0x04,0x04,0xE4,0x24,0x24,0x64,0xB4,0x2F,0x24,0xA4,0x64,0x24,0x24,0xE6,0x04,0x00,
        0x00,0x00,0x7F,0x04,0x05,0x05,0x05,0x7F,0x05,0x05,0x05,0x25,0x44,0x3F,0x00,0x00//"南",1
	},

	{
		/*--  文字:  交 --*/
		0x00,0x08,0x88,0x48,0x38,0x28,0x09,0x0E,0x0C,0x08,0x98,0x28,0x68,0x48,0x08,0x00,
        0x00,0x80,0x80,0x40,0x41,0x22,0x14,0x18,0x0C,0x16,0x23,0x61,0xC0,0x40,0x00,0x00//"交",2
	},

	{
	 	/*--  文字:  通 --*/
		0x40,0x41,0xC6,0x00,0x00,0xF2,0x52,0x52,0x56,0xFA,0x5A,0x56,0xF2,0x00,0x00,0x00,
        0x40,0x20,0x1F,0x20,0x40,0x5F,0x42,0x42,0x42,0x5F,0x4A,0x52,0x4F,0x40,0x40,0x00//"通",3
	},
    {
        /*--  文字:  大 --*/
	    0x20,0x20,0x20,0x20,0x20,0x20,0xA0,0x7F,0xA0,0x20,0x20,0x20,0x20,0x20,0x20,0x00,
        0x00,0x80,0x40,0x20,0x10,0x0C,0x03,0x00,0x01,0x06,0x08,0x30,0x60,0xC0,0x40,0x00//"大",4
    },
	{
	 	/*--  文字: 学  --*/
		0x40,0x30,0x10,0x12,0x5C,0x54,0x50,0x51,0x5E,0xD4,0x50,0x18,0x57,0x32,0x10,0x00,
		0x00,0x02,0x02,0x02,0x02,0x02,0x42,0x82,0x7F,0x02,0x02,0x02,0x02,0x02,0x02,0x00//"学",5
	},



	{
		/*--  文字: 机 --*/
		0x08,0x08,0xC8,0xFF,0x48,0x88,0x08,0x00,0xFE,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,
        0x04,0x03,0x00,0xFF,0x00,0x41,0x30,0x0C,0x03,0x00,0x00,0x00,0x3F,0x40,0x78,0x00//"机",6
	},

	{
		/*--  文字: 械  --*/
		0x10,0xD0,0xFF,0x50,0x90,0x00,0xE8,0x08,0xE8,0x08,0xFF,0x08,0x0A,0xCC,0x08,0x00,
        0x06,0x01,0xFF,0x00,0x20,0x19,0x07,0x01,0x5F,0x21,0x13,0x0C,0x33,0x40,0xF8,0x00//"械",7
	},

	{
		/*--  文字: 工  --*/
		0x00,0x00,0x02,0x02,0x02,0x02,0x02,0xFE,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,
		0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00//"工",8
	},

	{
 		/*--  文字: 程  --*/
		0x10,0x12,0xD2,0xFE,0x91,0x11,0x80,0xBF,0xA1,0xA1,0xA1,0xA1,0xBF,0x80,0x00,0x00,
		0x04,0x03,0x00,0xFF,0x00,0x41,0x44,0x44,0x44,0x7F,0x44,0x44,0x44,0x44,0x40,0x00//"程",9
	},

	{
	 	/*--  文字: 学  --*/
		0x40,0x30,0x10,0x12,0x5C,0x54,0x50,0x51,0x5E,0xD4,0x50,0x18,0x57,0x32,0x10,0x00,
		0x00,0x02,0x02,0x02,0x02,0x02,0x42,0x82,0x7F,0x02,0x02,0x02,0x02,0x02,0x02,0x00//"学",10
	},
	{
	 	/*--  文字: 院  --*/
		0xFE,0x02,0x32,0x4A,0x86,0x0C,0x24,0x24,0x25,0x26,0x24,0x24,0x24,0x0C,0x04,0x00,
		0xFF,0x00,0x02,0x04,0x83,0x41,0x31,0x0F,0x01,0x01,0x7F,0x81,0x81,0x81,0xF1,0x00//"院",11
	},
	{
		/*--  文字: 吴 --*/
		0x00,0x00,0x80,0xBE,0xA2,0xA2,0xA2,0xA2,0xA2,0xA2,0xA2,0xBE,0x80,0x00,0x00,0x00,
		0x84,0x84,0x44,0x44,0x24,0x14,0x0C,0x07,0x0C,0x14,0x24,0x64,0xC4,0x44,0x04,0x00//"吴",12

	},

	{
		/*--  文字: 邦 --*/
		0x04,0x24,0x24,0x24,0xFF,0x24,0x24,0x04,0x00,0xFE,0x02,0x22,0x5A,0x86,0x02,0x00,
        0x01,0x41,0x21,0x19,0x07,0x01,0x01,0x01,0x00,0xFF,0x00,0x08,0x10,0x10,0x0F,0x00//"邦",13
	},

	{
		/*--  文字: 明 --*/
		0x00,0xFE,0x22,0x22,0x22,0xFE,0x00,0x00,0xFF,0x11,0x11,0x11,0x11,0xFF,0x00,0x00,
        0x00,0x03,0x02,0x02,0x02,0x43,0x20,0x18,0x07,0x01,0x01,0x41,0x81,0x7F,0x00,0x00//"明",14
	},

	{
    	/*--  文字: 行  --*/
		0x10,0x08,0x84,0xC6,0x73,0x22,0x40,0x44,0x44,0x44,0xC4,0x44,0x44,0x44,0x40,0x00,
		0x02,0x01,0x00,0xFF,0x00,0x00,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00//"行",15
	},

	{
		/*--  文字: 胜  --*/
		0x00,0x00,0xFE,0x12,0x12,0xFE,0x20,0x1C,0x10,0x10,0xFF,0x10,0x10,0x10,0x00,0x00,
		0x40,0x30,0x0F,0x21,0x41,0x3F,0x20,0x21,0x21,0x21,0x3F,0x21,0x21,0x21,0x20,0x00//"胜",16
	},

	{
		/*--  文字: 于  --*/
		0x40,0x40,0x42,0x42,0x42,0x42,0x42,0xFE,0x42,0x42,0x42,0x42,0x42,0x42,0x40,0x00,
		0x00,0x00,0x00,0x00,0x20,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00//"于",17
	},

	{
    	/*--  文字: 言  --*/
		0x00,0x04,0x04,0xA4,0xA4,0xA4,0xA5,0xA6,0xA4,0xA4,0xA4,0xA4,0x04,0x04,0x04,0x00,
		0x00,0x00,0x00,0xFC,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0xFC,0x00,0x00,0x00,0x00//"言",18
	}
};
unsigned char tanhao[]=
{
	/*--  文字: !  --*/
	0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x30,0x00,0x00,0x00//"!",19
};
unsigned char qingping[]=
{
	 /*-- 清屏  --*/
	 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};

/*********函数声明***********/
void busy_check_1(void);
void busy_check_2(void);
void write_cmd_1(unsigned char command);
void write_cmd_2(unsigned char command);
void write_data_1(unsigned char dis_data);
void write_data_2(unsigned char dis_data);
void clear_1(void);
void clear_2(void);
void Chinese_disp_1(unsigned char pag,unsigned char col,unsigned char n);
void Chinese_disp_2(unsigned char pag,unsigned char col,unsigned char n);
void display(void);
void tanhao_disp(unsigned char pag,unsigned char col,unsigned char *chinese2);
void qingping_disp1(unsigned char pag,unsigned char col,unsigned char *chinese2);
void qingping_disp2(unsigned char pag,unsigned char col,unsigned char *chinese2);

/***********************

检测忙状态左

***********************/
void busy_check_1(void)
{
	unsigned char busy;
	while(busy&0x80)
	{
		busy=read_state_addr_1;
	}
}
/***********************

检测忙状态右

***********************/
void busy_check_2(void)
{
	 unsigned char busy;
	 while(busy&0x80)
	 {	
		busy=read_state_addr_2;
	 }
	 
}
/***********************

写命令左

***********************/
void write_cmd_1(unsigned char command)
{
	 busy_check_1();
	 write_cmd_addr_1=command;
}
/***********************

写命令右  

***********************/
void write_cmd_2(unsigned char command)
{
	 busy_check_2();
	 write_cmd_addr_2=command;
}
/***********************

写数据左  

***********************/
void write_data_1(unsigned char dis_data)
{
	busy_check_1();
	write_data_addr_1=dis_data;
}
/***********************

写数据右  

***********************/
void write_data_2(unsigned char dis_data)
{
 	busy_check_2();
	write_data_addr_2=dis_data;
}
/***********************

清内存左  

***********************/
void clear_1(void)
{
 	unsigned char i;
	unsigned char k;
	write_cmd_1(Page_Add+0);
	write_cmd_1(Col_Add+0);
	for(i=0;i<8;i++)
	{
	 	 write_cmd_1(Page_Add+i);
		 for(k=0;k<64;k++)
		 	//write_data_1(0x00);
			qingping_disp1(i,k,qingping);
		
	}
}
/***********************

清内存右  

***********************/
void clear_2(void)
{
 	unsigned char i;
	unsigned char k;
	write_cmd_2(Page_Add+0);
	write_cmd_2(Col_Add+0);
	for(i=0;i<8;i++)
	{
	 	 write_cmd_2(Page_Add+i);
		 for(k=0;k<64;k++)
		 	//write_data_2(0x00);
			qingping_disp2(i,k,qingping);
		 
	}
}
/***********************

显示汉字16*16左	  

************************/
void Chinese_disp_1(unsigned char pag,unsigned char col,unsigned char n)
{
	unsigned char i=0;
	unsigned char j=0;
	for(i=0;i<2;i++)
	{	
		write_cmd_1(Page_Add+pag+i);
		write_cmd_1(Col_Add+col);
		for(j=0;j<16;j++)
			write_data_1(Chinese_character[n][16*i+j]);
	
	}

}
/***********************

显示汉字16*16右	  

***********************/
void Chinese_disp_2(unsigned char pag,unsigned char col,unsigned char n)
{
	unsigned char i=0;
	unsigned char j=0;
	for(i=0;i<2;i++)
	{	
		write_cmd_2(Page_Add+pag+i);
		write_cmd_2(Col_Add+col);
		for(j=0;j<16;j++)
			write_data_2(Chinese_character[n][16*i+j]);
		
	}

}
/***********************

显示叹号'!'	

***********************/
void tanhao_disp(unsigned char pag,unsigned char col,unsigned char *chinese2)
{
	unsigned char i=0;
	unsigned char j=0;
	for(i=0;i<2;i++)
	{	
		write_cmd_2(Page_Add+pag+i);
		write_cmd_2(Col_Add+col);
		for(j=0;j<8;j++)
			write_data_2(chinese2[8*i+j]);
		
	}

}
/***********************

清屏左	

***********************/
void qingping_disp1(unsigned char pag,unsigned char col,unsigned char *chinese2)
{
	unsigned char i=0;
	unsigned char j=0;
	for(i=0;i<2;i++)
	{	
		write_cmd_1(Page_Add+pag+i);
		write_cmd_1(Col_Add+col);
		for(j=0;j<8;j++)
			write_data_1(chinese2[8*i+j]);
		
	}

}
/***********************

清屏右	

***********************/
void qingping_disp2(unsigned char pag,unsigned char col,unsigned char *chinese2)
{
	unsigned char i=0;
	unsigned char j=0;
	for(i=0;i<2;i++)
	{	
		write_cmd_2(Page_Add+pag+i);
		write_cmd_2(Col_Add+col);
		for(j=0;j<8;j++)
			write_data_2(chinese2[8*i+j]);
		
	}

}
/***********************

延时子程序	

***********************/
void delay(unsigned int k)
{
 	unsigned int i;
	unsigned int j;
	for(i=0;i<k;i++)
	for(j=0;j<20;j++);
}

/***********************

LCD显示子程序

***********************/
void display(void)
{	   
//	unsigned char i;
//	for(i=Start_line;i<0xff;i++)
// 	{ 	
		Chinese_disp_1(0,16,0);
		Chinese_disp_1(0,32,1);
	 	Chinese_disp_1(0,48,2);
		Chinese_disp_2(0,0,3);
		Chinese_disp_2(0,16,4);
		Chinese_disp_2(0,32,5);
	 	Chinese_disp_1(2,16,6);
		Chinese_disp_1(2,32,7);
        Chinese_disp_1(2,48,8);
		Chinese_disp_2(2,0,9);
		Chinese_disp_2(2,16,10);
		Chinese_disp_2(2,32,11);
		//Chinese_disp_1(4,48,12);
		//Chinese_disp_2(4,0,13);
		//Chinese_disp_2(4,16,14);
		Chinese_disp_1(6,32,15);
		Chinese_disp_1(6,48,16);
		Chinese_disp_2(6,0,17);
		Chinese_disp_2(6,16,18);
		tanhao_disp(6,32,tanhao);
		//write_cmd_1(i);
		//write_cmd_2(i);
		//delay(3000);
	
//	}
//	delay(60000);
		

}
/***********主程序************/
void main(void)
{
 	clear_1();
	clear_2();
	
	while(1)
	{
	 	_nop_();
        display();
		
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -