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

📄 mdp.c

📁 用AT89S52编写的12864显示的方波!
💻 C
字号:
/***********************************************************************/  
/*显示模块的应用,LCD12864并行接法画波形程序
/*LCD12864点阵高电平亮,低电平暗
/*LCD12864在X轴方向分有上下各8个区(一个屏幕上共有16个区)
/*上半部分有00~07区;下半部分有08~0F区
/*每个区X轴向上有16个点阵;Y轴向上有32个点阵
/*LCD12864写点阵每个区都是先对前面的8个点阵进行操作,再对后8个点阵操作
/*      创作时间    2008.7.31
/************************************************************************/
#include<reg52.h>
#include<intrins.h>
#include<math.h>	 //调用sin()函数
#define uint unsigned int 
#define uchar unsigned char
/************变量定义**************/
uint i,j;
uchar temp,x,y;


/********* LCD12864边线图***********/
sbit RS=P2^5;    //数据\命令选择
sbit RW=P2^6;    //读\写选择
sbit E=P2^7;     //使能
/*************************/
/* 延迟子函数
/*************************/
void delay(uint ms)
{
    for(i=0;i<ms;i++)
        for(j=0;j<110;j++);	
}
/********************************/
/* LCD12864子函数
/********************************/
//============LCDbegin==========/
/*******检查LCD忙位********/
void check_busy()   	
{
    RS=0;   //命令选择	
    RW=1;
    E=1;
    P0=0xff;
    while((P0&0x80)==0x80);   //确定读忙标志位BF为0
    E=0;
}
/********LCD写命令子函数*********/
void write_com(uchar com)
{
    check_busy();    //检忙
    RS=0;
    RW=0;
    E=1;
    P0=com;
    delay(2);
    E=0;
    delay(2);	
}
/**********LCD写数据子函数**********/
void write_data(uchar dat)
{
    check_busy();
    RS=1;
    RW=0;
    E=1;
    P0=dat;
    delay(2);
    E=0;
    delay(2);
}
/********LCD写字符串子函数**********/
void write_str(uchar add,uchar *str)
{
    write_com(add);
    while(*str!='\0')
    {
        write_data(*str++);
        delay(2);
    }
}
/********LCD初始化子函数********/
void init_LCD()
{
    write_com(0x30);    //选择基本指令集  选择8bit数据流
    write_com(0x02);     //地址归位
    write_com(0x0c);     //开显示(无游标、不反白)
    write_com(0x06); //指定在资料的读取及写入时,设定游标的移动方向及指定显示的移位
    write_com(0x01);       //清除显示,并且设定地址指针为00H
    delay(5);
}

/**************显示坐标(x-y轴)*******************/
void display_XY_line()
{
	for(x=0;x<16;x++) 		//16个区
	for(y=0;y<32;y++)		//每个区有32行
	{ 
		if(x<8&&y==31)		 //在前八个区的第32行画一条横线---x轴
		{
			write_com(0x36);	  //扩充指令集,开绘图功能
			write_com(0x80+y);    //行地址
			write_com(0x80+x);     //列地址
			write_com(0x30);	   //改变“RE”位元,基本指令集,以下为写数据
//连续对一个区写入两个数据,第一个语句是对前面的8个点写,第二语句是对后面的8个点写			
			write_data(0xff);		//前8个点
			write_data(0xff);	   //后8个点
		}
		
		
		else if(x==0||x==8)		//在第零和第八区画一条竖线---y轴
		{
			write_com(0x36);	  //扩充指令集,开绘图功能
			write_com(0x80+y);    //行地址
			write_com(0x80+x);     //列地址
			write_com(0x30);	   //改变“RE”位元,基本指令集,以下为写数据
//连续对一个区写入两个数据,第一个语句是对前面的8个点写,第二语句是对后面的8个点写			
			write_data(0x80);	  //前8个点
			write_data(0x00);	  //后8个点
		}
		
		
		else  	 //在除去x轴和y轴的其它个位置写0(即无显示)
		{
			write_com(0x36);	   //扩充指令集,开绘图功能
			write_com(0x80+y);	   //行地址
			write_com(0x80+x);	   //列地址
			write_com(0x30); 	  //改变“RE”位元,基本指令集
//连续对一个区写入两个数据,第一个语句是对前面的8个点写,第二语句是对后面的8个点写
			write_data(0x00);	 //前8个点
			write_data(0x00);	  //后8个点	
		}
	}
	write_com(0x34);	 //扩充指令,关绘图功能
	write_com(0x36);	 //扩充指令,开绘图功能
}


void display_fangbo_line()
{
	for(x=0;x<16;x++) 		//16个区
	for(y=0;y<32;y++)		//每个区有32行
	{ 
		if(x<8&&y==31)		 
		{
			write_com(0x36);	  //扩充指令集,开绘图功能
			write_com(0x80+y);    //行地址
			write_com(0x80+x);     //列地址
			write_com(0x30);	   //改变“RE”位元,基本指令集,以下为写数据
		
			write_data(0xff);		//前8个点
			write_data(0xff);	   //后8个点
		}
			else if(x>=0&&x<2&&y==0)	
		{
			write_com(0x36);	  //扩充指令集,开绘图功能
			write_com(0x80+y);    //行地址
			write_com(0x80+x);     //列地址
			write_com(0x30);	   //改变“RE”位元,基本指令集,以下为写数据

			write_data(0xff);		//前8个点
			write_data(0xff);	   //后8个点
		} 
		else if(1<x&&x<4&&y==31)		
		{
			write_com(0x36);	  //扩充指令集,开绘图功能
			write_com(0x80+y);    //行地址
			write_com(0x80+x);     //列地址
			write_com(0x30);	   //改变“RE”位元,基本指令集,以下为写数据
			
			write_data(0xff);		//前8个点
			write_data(0xff);	   //后8个点
		} 
			else if(3<x&&x<6&&y==0)		
		{
			write_com(0x36);	  //扩充指令集,开绘图功能
			write_com(0x80+y);    //行地址
			write_com(0x80+x);     //列地址
			write_com(0x30);	   //改变“RE”位元,基本指令集,以下为写数据
			
			write_data(0xff);		//前8个点
			write_data(0xff);	   //后8个点
		}   
			else if(5<x&&x<8&&y==31)		
		{
			write_com(0x36);	  
			write_com(0x80+y);    
			write_com(0x80+x);     
			write_com(0x30);	  
		
			write_data(0xff);	
			write_data(0xff);	 
		} 
	
			else if(9<x&&x<12&&y==31)	
		{
			write_com(0x36);	 	
			write_com(0x80+y);    
			write_com(0x80+x);     
			write_com(0x30);	   
	
			write_data(0xff);		
			write_data(0xff);	  
		} 
	
			else if(13<x&&x<16&&y==31)		 
		{
			write_com(0x36);	  //扩充指令集,开绘图功能
			write_com(0x80+y);    //行地址
			write_com(0x80+x);     
			write_com(0x30);	  
			
			write_data(0xff);	
			write_data(0xff);	 
		}            
    	else if(x==0||x==8||x==2||x==10||x==4||x==12||x==6||x==14)	
		{
			write_com(0x36);	  
			write_com(0x80+y);    
			write_com(0x80+x);     
			write_com(0x30);	   
		
			write_data(0x80);	
			write_data(0x00);	  
		}
			else if(x==7||x==15)	
		{
			write_com(0x36);	  
			write_com(0x80+y);    
			write_com(0x80+x);    
			write_com(0x30);	   
			
			write_data(0x00);	 
			write_data(0x01);	 
		}
		
		
		else  	 //在除去x轴和y轴的其它个位置写0(即无显示)
		{
			write_com(0x36);	   
			write_com(0x80+y);	   //行地址
			write_com(0x80+x);	   //列地址
			write_com(0x30); 	 

			write_data(0x00);
			write_data(0x00);	
		}
	}
	write_com(0x34);	 //扩充指令,关绘图功能
	write_com(0x36);	 //扩充指令,开绘图功能
}

/*------------------整屏写入数据:全亮,或者竖条-----------------------------*/
void lcdfill(unsigned char disdata)
{ unsigned char x,y;
        for(y=0;y<32;y++)
         for(x=0;x<16;x++)
         {  write_com(0x36);
            write_com(y+0x80);        //行地址
            write_com(x+0x80);     //列地址
            write_com(0x30);
            write_data(disdata);
            write_data(disdata);
            }
   write_com(0x34);                            
   write_com(0x36);
 }


/*************************/
/*主函数
/*************************/
void main(void)
{
    init_LCD();
	write_com(0x01);		
	delay(5);
	write_str(0x80,"fangbo  display") ;
	write_str(0x90,"made by qjw222") ;
    delay(5000);
	write_com(0x01);
	lcdfill(0xff);
	display_XY_line();
    display_fangbo_line();
	while(1);



}

⌨️ 快捷键说明

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