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

📄 main2.c

📁 不带字库LCD12864设计,在田老师的MINI51上测试
💻 C
字号:
#include <reg51.h>
#include <absacc.h>

/*常用操作命令和参数定义*/
#define DISPON 0x3f      //显示开
#define DISPOFF 0x3e     //显示关,参考指令表"显示开关设置"
#define FIRSTROW 0xc0   //显示起始行设置,参考指令表,由LXBYTE[5..0]在0到63行选择
#define SETY 0xb8       	//Y方向,8页64行,参考指令表,由PXBYTE[2..0]在0到8页选择
#define SETX 0x40       	//X方向,半屏64列,参考指令表,由CXBYTE[5..0]在0到63列选择

#define LLCD_CMD_WR	XBYTE[0xf2ff]
#define LLCD_DAT_WR XBYTE[0xfaff]
#define LLCD_CMD_RD XBYTE[0xf6ff]
#define LLCD_DAT_RD XBYTE[0xfeff]
#define RLCD_CMD_WR	XBYTE[0xf1ff]
#define RLCD_DAT_WR XBYTE[0xf9ff]
#define RLCD_CMD_RD XBYTE[0xf5ff]
#define RLCD_DAT_RD XBYTE[0xfdff]

/*一贞图片,宽度x高度=128x64*/
code unsigned char logo[] =
{
	0xFF,0xFF,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,
	0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,
	0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,
	0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,
	0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,
	0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,
	0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,
	0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0xFF,0xFF,
	0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x0C,0x0C,0x0C,0x0E,0xCE,0xFE,0xFE,
	0xFE,0x1E,0x06,0x06,0x06,0x06,0x06,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x1C,
	0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,
	0x1C,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,
	0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xF0,0xFE,0x7F,0x0F,0x03,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFC,0xFF,0x0F,0x07,0x01,0x00,
	0x00,0x80,0xE0,0xF0,0xF8,0xDC,0xFC,0x6E,0xEE,0xCE,0xCE,0x80,0x80,0x00,0x00,0x80,
	0xF0,0xFE,0x7F,0x3F,0x18,0x0C,0x04,0x0C,0xFC,0xF8,0xC0,0x00,0x00,0x00,0x0E,0x9F,
	0x9F,0xF9,0x70,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFC,0xFF,0x0F,0x07,0x01,
	0x00,0x00,0xC0,0xF8,0xFF,0x7F,0x3F,0x1C,0x0E,0x06,0x06,0x02,0x02,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,
	0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x03,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,
	0x00,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x00,0x01,
	0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x00,0x01,0x01,0x01,0x01,
	0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,
	0x00,0x00,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,
	0xFF,0xFF,0x00,0x00,0x00,0xC0,0xE0,0x20,0x20,0x60,0x60,0x00,0x00,0xC0,0xE0,0xA0,
	0xA0,0xE0,0xC0,0x00,0x00,0xC0,0xE0,0xA0,0xA0,0xE0,0xC0,0x00,0x00,0x20,0x20,0xF8,
	0xF8,0x20,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xFC,0xFC,0x60,0x20,0xE0,
	0xC0,0x00,0x04,0xFC,0xFC,0x20,0x20,0xE0,0xC0,0x00,0x20,0xE0,0xE0,0x60,0x20,0xE0,
	0xC0,0x00,0x20,0xE0,0xE0,0x00,0x20,0xE0,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0xC0,0xE0,0xA0,0xA0,0xE0,0xC0,0x00,0x00,0xC0,0xE0,0x20,0x24,0xFC,0xFC,0x00,0x20,
	0xE0,0xE0,0x00,0x20,0xE0,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xE0,0x20,
	0x20,0x60,0x60,0x00,0x20,0xE0,0xE0,0x60,0x20,0xE0,0xC0,0x00,0x00,0x00,0xFF,0xFF,
	0xFF,0xFF,0x00,0x00,0x00,0x03,0x07,0x04,0x04,0x06,0x02,0x00,0x00,0x03,0x07,0x04,
	0x04,0x06,0x02,0x00,0x00,0x03,0x07,0x04,0x04,0x06,0x02,0x00,0x00,0x00,0x00,0x03,
	0x07,0x04,0x04,0x00,0x00,0x06,0x06,0x06,0x00,0x00,0x04,0x07,0x07,0x04,0x04,0x07,
	0x07,0x04,0x00,0x07,0x07,0x04,0x04,0x07,0x03,0x00,0x04,0x07,0x07,0x04,0x04,0x07,
	0x07,0x04,0x00,0x03,0x07,0x04,0x04,0x07,0x07,0x04,0x00,0x06,0x06,0x06,0x00,0x00,
	0x03,0x07,0x04,0x04,0x06,0x02,0x00,0x00,0x03,0x07,0x04,0x04,0x07,0x07,0x04,0x00,
	0x03,0x07,0x04,0x04,0x07,0x07,0x04,0x00,0x06,0x06,0x06,0x00,0x00,0x03,0x07,0x04,
	0x04,0x06,0x02,0x00,0x04,0x07,0x07,0x04,0x04,0x07,0x07,0x04,0x00,0x00,0xFF,0xFF,
	0xFF,0xFF,0x00,0x00,0x00,0x00,0x04,0xFC,0x40,0x20,0x20,0xC0,0x00,0x00,0x40,0xA0,
	0xA0,0x20,0x60,0x00,0x00,0x20,0x20,0xF8,0x20,0x20,0x00,0x00,0x20,0x20,0xE4,0x00,
	0x00,0x00,0x00,0x40,0x20,0xA0,0xA0,0xC0,0x00,0x20,0xE0,0x40,0x20,0x20,0xC0,0x00,
	0x00,0x40,0xA0,0xA0,0x20,0x60,0x00,0x00,0x20,0x20,0xE4,0x00,0x00,0x00,0x20,0x20,
	0xE0,0x40,0x20,0x20,0x00,0xF0,0x08,0xE4,0x14,0xF4,0x08,0xF0,0x00,0x08,0x08,0xFC,
	0x00,0x00,0x00,0xF0,0x48,0x24,0x24,0x24,0xCC,0x00,0x00,0x18,0x04,0x24,0x24,0xD8,
	0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x20,0x20,0x20,0x60,0x00,0x00,0xC0,0x20,0x20,
	0x20,0xC0,0x00,0x20,0xE0,0x20,0xE0,0x20,0xC0,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,
	0xFF,0xFF,0xC0,0xC0,0xC0,0xC0,0xC4,0xC7,0xC4,0xC0,0xC4,0xC7,0xC4,0xC0,0xC6,0xC4,
	0xC4,0xC5,0xC2,0xC0,0xC0,0xC0,0xC0,0xC3,0xC4,0xC4,0xC0,0xC0,0xC4,0xC4,0xC7,0xC4,
	0xC4,0xC0,0xC0,0xC2,0xC5,0xC4,0xC4,0xC7,0xC4,0xC4,0xC7,0xC4,0xC0,0xC4,0xC7,0xC4,
	0xC0,0xC6,0xC4,0xC4,0xC5,0xC2,0xC0,0xC0,0xC4,0xC4,0xC7,0xC4,0xC4,0xC0,0xC4,0xC4,
	0xC7,0xC4,0xC4,0xC0,0xC0,0xC1,0xC2,0xC5,0xC5,0xC4,0xC5,0xC2,0xC0,0xC4,0xC4,0xC7,
	0xC4,0xC4,0xC0,0xC3,0xC4,0xC4,0xC4,0xC4,0xC3,0xC0,0xC0,0xC3,0xC4,0xC4,0xC4,0xC3,
	0xC0,0xC0,0xC6,0xC6,0xC0,0xC0,0xC3,0xC4,0xC4,0xC4,0xC2,0xC0,0xC0,0xC3,0xC4,0xC4,
	0xC4,0xC3,0xC0,0xC4,0xC7,0xC0,0xC7,0xC0,0xC7,0xC4,0xC0,0xC0,0xC0,0xC0,0xFF,0xFF,
};

void delay(unsigned char timer);/*通用延时函数*/
void check_busy(unsigned char);/*LCD忙检测*/
void lcd_init(void);/*LCD初始化*/
void lcd_cmd_wr(unsigned char, unsigned char);/*写命令*/
void lcd_data_wr(unsigned char, unsigned char);/*写数据*/
void lcd_bmp_wr(unsigned char *bmp);/*写一贞128×64点的图片显示*/
void lcd_clr(void);/*数据清屏*/
void lcd_mov_up();/*整屏向上循环移动*/

/*主函数,显示一贞图片范例*/
void main(void)
{
  	delay(50000);//适当延时,等待LCD复位
	lcd_init();
	lcd_bmp_wr(logo);//logo图片数据附后
  	while(1)	
  	{ 	
		//整屏向上循环移动
		//lcd_mov_up();
		//lcd_clr();
		delay(500); 
		lcd_bmp_wr(logo);//logo图片数据附后
  	}
}

/*LCD忙检测*/
void check_busy(unsigned char right)
{
  	unsigned char temp;
  	do
  	{
  		if(right) temp=RLCD_CMD_RD;
  		else temp=LLCD_CMD_RD; 		
		temp = 0x7f;//仿真版不需要忙检测
  	} 
  	while(temp>>7==1);//检测D7是否为1,1表示LCD忙,如果忙,继续检测,直到空闲止
	  
}

/*写命令*/
void lcd_cmd_wr(unsigned char cmdcode, unsigned char right)
{
  	check_busy(right);
  	if(right) RLCD_CMD_WR = cmdcode;
  	else LLCD_CMD_WR = cmdcode;
}

/*LCD初始化*/
void lcd_init(void)
{
  	lcd_cmd_wr(DISPON,0); 		//开显示,0参数表示左屏
  	lcd_cmd_wr(FIRSTROW,0);		//设定显示首列
  	lcd_cmd_wr(SETY,0);			//设定Y坐标
  	lcd_cmd_wr(SETX,0);			//设定X坐标
  	lcd_cmd_wr(DISPON,1); 		//1参数表示右屏
  	lcd_cmd_wr(FIRSTROW,1);
  	lcd_cmd_wr(SETY,1);
  	lcd_cmd_wr(SETX,1);
}

/*写数据*/
void lcd_data_wr(unsigned char dispdata, unsigned char right)
{
  	//check_busy(right);
  	if(right) RLCD_DAT_WR = dispdata;
  	else LLCD_DAT_WR = dispdata;
}
/*数据清屏*/
void lcd_clr(void)
{
	unsigned char i,j;
	for(i=0;i<8;i++)//共8页
	{
		lcd_cmd_wr(SETY+i,0);
		lcd_cmd_wr(SETX,0);
		lcd_cmd_wr(SETY+i,1);
		lcd_cmd_wr(SETX,1);
		for(j=0;j<64;j++)//每页64列
		{
			lcd_data_wr(0,0);
			lcd_data_wr(0,1);
		}
	}
}

/*写一贞128×64点的图片显示*/
void lcd_bmp_wr(unsigned char *bmp)
{
  	unsigned char i,j;
  	for(i=0;i<8;i++)
  	{
		//页地址设定
		lcd_cmd_wr(SETY+i,0);
		lcd_cmd_wr(SETX,0);
   		lcd_cmd_wr(SETY+i,1);
	   	lcd_cmd_wr(SETX,1);	   	

		for(j=0;j<64;j++) 
		{
			lcd_data_wr(bmp[128*i+j],0);//左半屏
	   		lcd_data_wr(bmp[128*i+j+64],1);//右半屏
		}
	  }
}

/*整屏向上循环移动*/
void lcd_mov_up()
{
  	unsigned char i;
  	for(i=0;i<64;i++)//64行循环
  	{
    	lcd_cmd_wr(FIRSTROW+i,0);
 		lcd_cmd_wr(FIRSTROW+i,1);
 		delay(500);//适当延时
  	}
}

/*通用延时函数*/
void delay(unsigned char timer)
{
	unsigned char i;
	while(--timer)
	for(i=0;i<100;i++);
}







⌨️ 快捷键说明

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