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

📄 main.c

📁 这是一个液晶的测试程序,是一款用ST7920做芯片的12864液晶的程序,绝对可用,方便而且可移植调用
💻 C
字号:

/*********************************************************************************************
		出品		DoYoung.net 电子技术 & DY小卖店
		程序名		DY12864CBL测试程序(DY12864CBL显示屏专用测试)
		作者		杜 洋
		日期		2007-11-05
		参数		AT89S52(MCS-51)	12MHZ
/*********************************************************************************************
//更新日志
				2007-11-05 整理完成并发布。
				2006-11-04 LCM驱动程序植入完成。
		V1.0	2006-11-26 硬件制作完成。
		
/*********************************************************************************************
//程序说明
    本程序是DY12864CBL中文液晶显示屏模块的测试程序
	本程序须配合《DY12864CBL技术手册》一同参考使用
	仔细了解程序中的函数以在开发时方便调用
	DoYoung.net 电子技术 保留版权 
	欢迎莅临 http://doyoung.net/
/*********************************************************************************************/
/////////////////////////////////////////////////////////////////////////
// Bitmap点阵数据表                                                    //
// 横向取模左高位,数据排列:从左到右从上到下   						   //
// 图片尺寸: 128 * 64                                                  //
/////////////////////////////////////////////////////////////////////////
unsigned char code logo[] =                  // 数据表
{
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x31,0x80,0x0F,0x00,0x00,0x01,0x50,0x00,0x06,0xC0,0x00,0x00,0x00,
      0x00,0x00,0x00,0x7B,0xDB,0x1F,0x00,0x00,0x01,0x10,0x00,0x09,0x20,0x00,0x00,0x00,
      0x00,0x00,0x00,0x7F,0xDB,0x18,0x39,0xA0,0x00,0xA0,0x00,0x08,0x20,0x00,0x00,0x00,
      0x00,0x00,0x00,0x6E,0xDB,0x18,0x0D,0xE0,0x00,0x40,0x00,0x04,0x40,0x00,0x00,0x00,
      0x00,0x00,0x00,0x60,0xDB,0x18,0x3D,0x80,0x00,0x00,0x00,0x02,0x80,0x00,0x00,0x00,
      0x00,0x00,0x00,0x60,0xDB,0x9F,0x6D,0x86,0xD8,0x00,0x08,0x01,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x60,0xCF,0x0F,0x3D,0x86,0xD8,0x00,0x10,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x60,0xCF,0x0F,0x3D,0x86,0xD8,0x00,0x10,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x28,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x54,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x50,0x00,0x07,0xFF,0xC7,0x00,0x28,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x36,0x00,0xA8,0x00,0xFF,0xFF,0xFE,0x00,0x10,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x49,0x00,0x88,0x07,0xDF,0xFF,0x0F,0xC0,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x41,0x00,0x50,0x1C,0xF8,0x04,0xF1,0xF0,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x22,0x00,0x20,0x73,0x80,0x04,0x0E,0x3C,0x00,0x0A,0x00,0x00,0x00,
      0x00,0x00,0x00,0x14,0x00,0x00,0xEC,0x00,0x07,0x03,0x0F,0x00,0x15,0x00,0x00,0x00,
      0x00,0x00,0x00,0x08,0x00,0x03,0xBC,0xFF,0xE7,0x80,0xC7,0xC0,0x11,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x0E,0xF8,0x00,0x07,0x98,0x61,0xE0,0x0A,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x1C,0xF0,0x00,0x07,0xC0,0x30,0xF0,0x04,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x38,0x71,0x80,0x0F,0xE3,0xF8,0x38,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x38,0x71,0x80,0x0F,0xE3,0xF8,0x38,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x03,0xF7,0xFF,0xFF,0xFF,0xFF,0xFC,0x1E,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x7F,0xEF,0xFF,0xFF,0xFF,0xFF,0xE0,0x0F,0x80,0x00,0x00,0x00,
      0x00,0x00,0x00,0x01,0xFC,0x0F,0xF8,0x00,0x00,0x00,0x00,0xFF,0x80,0x00,0x00,0x00,
      0x00,0x00,0x00,0x07,0xF7,0x80,0x00,0x00,0x08,0x00,0x06,0x00,0xE0,0x00,0x00,0x00,
      0x00,0x00,0x00,0x1E,0x00,0x3C,0x00,0x00,0x1F,0x00,0x38,0x00,0xE0,0x00,0x00,0x00,
      0x00,0x00,0x00,0x1C,0x00,0x1A,0x00,0x00,0x1F,0x00,0x60,0x00,0x70,0x00,0x00,0x00,
      0x00,0x00,0x00,0x38,0x00,0x06,0x00,0x00,0x01,0x00,0xC0,0x00,0x38,0x00,0x00,0x00,
      0x00,0x00,0x00,0x48,0x0C,0x03,0x00,0x00,0x01,0x03,0x9C,0xF8,0x1C,0x00,0x00,0x00,
      0x00,0x00,0x00,0xF0,0x7F,0x91,0x00,0x00,0x01,0x03,0x3F,0xFE,0x0E,0x00,0x00,0x00,
      0x00,0x00,0x00,0xF0,0xFF,0xC9,0x80,0x00,0x01,0x07,0x7F,0xFF,0x07,0x00,0x00,0x00,
      0x00,0x00,0x01,0xC1,0xFF,0xE4,0x80,0x00,0x01,0x06,0x5F,0xFF,0xCF,0x80,0x00,0x00,
      0x00,0x00,0x03,0xFB,0xFF,0xF0,0x80,0x00,0x01,0x06,0xDF,0xFF,0xFF,0x80,0x00,0x00,
      0x00,0x00,0x03,0x77,0xCD,0xF8,0x80,0x00,0x01,0x07,0xBF,0x6F,0xFF,0x80,0x00,0x00,
      0x00,0x00,0x03,0xE7,0xE1,0xF8,0x80,0x00,0x01,0x03,0x3F,0x0F,0xEF,0x00,0x00,0x00,
      0x00,0x00,0x03,0xE7,0xE1,0xF8,0x80,0x00,0x01,0x03,0x3F,0x0F,0xEF,0x00,0x00,0x00,
      0x00,0x00,0x01,0xC7,0xE1,0xF8,0xC0,0x00,0x01,0x04,0x3F,0x07,0xEE,0x00,0x00,0x00,
      0x00,0x00,0x01,0xC7,0x8C,0x78,0xC0,0x00,0xFF,0x3C,0x3C,0xE3,0xEE,0x00,0x00,0x00,
      0x00,0x00,0x00,0xE7,0xF0,0xFC,0x0F,0xFF,0xFE,0x00,0x7F,0x07,0xFC,0x00,0x00,0x00,
      0x00,0x00,0x00,0x67,0xE1,0xFC,0x00,0x00,0x00,0x00,0x7F,0x0F,0xC0,0x00,0x00,0x00,
      0x00,0x00,0x00,0x07,0xCD,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x67,0xF0,0x00,0x00,0x00,
      0x00,0x00,0x00,0x1F,0xCD,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0x00,0x00,0x00,
      0x00,0x00,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,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,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,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xF0,0x04,0x08,0x02,0x40,0x80,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x24,0x10,0x44,0x07,0xE2,0x20,0xA0,
      0x1E,0x3B,0x88,0x38,0x70,0x70,0x47,0x9F,0x38,0x27,0xD0,0x44,0x02,0x2A,0x00,0xA0,
      0x09,0x11,0x18,0x44,0x88,0x90,0xC8,0x48,0x90,0x2C,0x90,0x44,0x12,0xAA,0x1F,0xF0,
      0x08,0x8A,0x08,0x44,0x89,0x01,0x48,0x08,0x90,0x33,0x10,0x7F,0xCA,0xAA,0x00,0x80,
      0x08,0x8A,0x08,0x04,0x51,0x62,0x48,0x0F,0x10,0x24,0x90,0x40,0x02,0xAA,0xEF,0x80,
      0x08,0x84,0x08,0x08,0x71,0x92,0x48,0x08,0x90,0x2A,0x70,0x7E,0x06,0xAA,0x22,0x80,
      0x08,0x84,0x08,0x10,0x89,0x14,0x48,0x08,0x90,0x31,0x10,0x42,0x0A,0xAA,0x22,0x80,
      0x08,0x84,0x08,0x20,0x89,0x13,0xC8,0x08,0x90,0x26,0x10,0x42,0x18,0x8A,0x22,0x40,
      0x09,0x04,0x08,0x40,0x89,0x10,0x48,0x48,0x91,0x21,0x10,0x42,0x09,0x42,0x33,0x50,
      0x1E,0x0E,0x1C,0x7C,0x70,0xE0,0xE7,0x9F,0x3F,0x3F,0xF0,0x82,0x0A,0x22,0x2C,0x30,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x11,0x02,0x0C,0x06,0x00,0x10,
      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,
};
//程序部分开始//
/******************************************************************************
//头文件
/******************************************************************************/
#include <AT89X52.h>
#include <string.h>
/******************************************************************************
//LCD接口定义(8位并口方式)
/******************************************************************************/
sbit RS = P1^0;//模式位,为0输入指令,为1输入数据
sbit RW = P1^1;//读写位,为0读,为1写
sbit E = P1^2;//使能位
#define Lcd_Bus P0 //数据总线

sbit back_LED = P2^0;//LED背光控制,低电平使能(如无背光控制此脚可不接)
/******************************************************************************/

/******************************************************************************/
//LCD驱动(DY12864CBL液晶显示屏并口驱动程序)
/******************************************************************************/
void chk_busy(){//检查忙位(底层)
   RS=0;
   RW=1;
   E=1;
   Lcd_Bus=0xff;
   while((Lcd_Bus&0x80)==0x80);
   E=0;
}
/******************************************************************************/
void write_com(unsigned char cmdcode){//写命令到LCD(底层)
	chk_busy();
	RS=0;
	RW=0;
	E=1;
	Lcd_Bus=cmdcode;
	E=0;
}
/******************************************************************************/
void write_data(unsigned char Dispdata){//写数据到LCD(底层)
	chk_busy();
	RS=1;
	RW=0;
	E=1;
	Lcd_Bus=Dispdata;
	E=0;
}
/******************************************************************************
//初始化LCD屏(被调用层)
/******************************************************************************/
void lcm_init(void){
   write_com(0x30);       //选择8bit数据流
   write_com(0x0c);       //开显示(无游标、不反白)
   write_com(0x01);       //清除显示,并且设定地址指针为00H
}
/******************************************************************************
//向LCM发送一个字符串,长度64字符之内。(被调用层)
/*****************************************************************************/
void lcm_w_word(unsigned char *s){//应用例:lcm_w_word("您好!");
	while(*s>0){					
    	write_data(*s); 
    	s++;
   }
}
/******************************************************************************
//写指令或数据(被调用层)
/******************************************************************************/
void lcm_w_test(bit i,unsigned char word){
	if(i == 0){
		write_com(word);//写指令或数据(0,指令)
	}else{
		write_data(word);//写指令或数据(1,数据)
	}
}
/******************************************************************************
//清屏函数(被调用层)
/******************************************************************************/
void lcm_clr(void){
	lcm_w_test(0,0x01);	
}
/******************************************************************************
//指定显示位置// (设置LCD显示的起始位置)(被调用层)
/******************************************************************************/
void LCD_set_xy( 	unsigned char x,	//X为行(1~4)
					unsigned char y ){	//Y为列(0~7)
    unsigned char address;
	switch(x){
		case 0: address = 0x80 + y; break;    
    	case 1: address = 0x80 + y; break; 
		case 2: address = 0x90 + y; break; 
   	 	case 3: address = 0x88 + y; break;
		case 4: address = 0x98 + y; break; 
		default:address = 0x80 + y; break;
	}
    lcm_w_test(0, address);
}
/******************************************************************************
//图形方式12864显示字模(横向8位左高位取模)(被调用层)
/******************************************************************************/
void Disp_img(unsigned char  *img){	
	unsigned char i,j;
	unsigned int k = 0;
	lcm_w_test(0,0x36); //图形方式
	for(i=0;i<32;i++){ 
		lcm_w_test(0,0x80+i);
		lcm_w_test(0,0x80);
    	for(j=0;j<16;j++) {
			lcm_w_test(1,img[k++]);
		}
  	}
 	for(i=0;i<32;i++){ 
		lcm_w_test(0,0x80+i);
		lcm_w_test(0,0x88);
    	for(j=0;j<16;j++) {
			lcm_w_test(1,img[k++]);
  		}
	}
}	
/******************************************************************************
//显示128*64全黑屏,用于测试坏点(被调用层)
/******************************************************************************/
void Disp_black(void){	
	unsigned char i,j;
	lcm_w_test(0,0x36); //图形方式
	for(i=0;i<32;i++){ 
		lcm_w_test(0,0x80+i);
		lcm_w_test(0,0x80);
    	for(j=0;j<16;j++) {
			lcm_w_test(1,0xff);
		}
  	}
 	for(i=0;i<32;i++){ 
		lcm_w_test(0,0x80+i);
		lcm_w_test(0,0x88);
    	for(j=0;j<16;j++) {
			lcm_w_test(1,0xff);
  		}
	}
}	
/******************************************************************************/

/******************************************************************************
//应用程序用的延时程序//
/******************************************************************************/
void DelayM(unsigned int a){//延时函数 1MS/次	
		unsigned char i;
		while( --a != 0){		
			for(i = 0; i < 125; i++);  //一个 ; 表示空语句,CPU空转。
		}   				   //i 从0加到125,CPU大概就耗时1毫秒
}
/******************************************************************************/

/*****************************************************************************
//---主程序---//
/*****************************************************************************/
main() {
	back_LED = 0;//打开LCD模块的背光(如无背光控制可删除本句)	  	

while(1){//主循环

	lcm_init();//初始化液晶显示器
	Disp_black();//显示黑屏测试“死点”
	DelayM(1000); //显示等留1秒

	lcm_init();//初始化液晶显示器(既显示白屏测试亮点)
	DelayM(1000); //显示等留1秒

	Disp_img(logo);//显示图片测试内容
	DelayM(1000); //显示等留1秒
	
	lcm_init();//初始化液晶显示器

	LCD_set_xy(1,0);//写入字符的位置
	lcm_w_word("DY12864CBL液晶屏");//写入字符内容
	LCD_set_xy(3,1);//写入字符的位置
	lcm_w_word("DoYoung.net");//写入字符内容
	DelayM(1000); //显示等留1秒

	LCD_set_xy(4,2);//写入字符的位置
	lcm_w_word("测试完成");//写入字符内容

	DelayM(1000); //显示等留1秒

}	
}	
/*****************************************************************************/
// DoYoung.net 电子技术 -- 创造独立资源!
/*****************************************************************************/





⌨️ 快捷键说明

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