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

📄 lcm12864.c

📁 12864液晶显示不同的复杂图形
💻 C
📖 第 1 页 / 共 2 页
字号:
void ceshi() 
{
	write_com(0x01);//清除显示,并且设定地址指针为00H 
	delay(5); 
	
	write_com(0x80);//第一行(如果是地址是:80H,即LCD的第一行的第一个位置显示) 
	hzkdis("吾将上下而求索!"); 
	
	write_com(0x90);//第二行(如果是地址是:90H,即LCD的第二行的第一个位置显示) 
	hzkdis("初级单片机开发"); 
	
	write_com(0x88);//第三行(如果是地址是:88H,即LCD的第二行的第一个位置显示) 
	hzkdis("TEL:13928574872"); 
	
	write_com(0x98);//第四行(如果是地址是:98H,即LCD的第二行的第一个位置显示) 
	hzkdis("测试程序: 李燕绪"); 


} 
/*------------------显示图片------------------------*/ 
void Disp_Img(unsigned char code *img) 
{  unsigned int j=0; 
   unsigned char x,y,i; 
       for(i=0;i<9;i+=8) 
       		for(y=0;y<32;y++)/*原来 为 y<26 ,上下两个半屏不能正常对接显示,导致显示的图片中间有空隙*/ 
         		for(x=0;x<8;x++) 
			         {  write_com(0x36);//功能设置---8BIT控制界面,扩充指令集绘图显示开
			            write_com(y+0x80);        //行地址 
			            write_com(x+0x80+i);     //列地址 
			            write_com(0x30); 
			            write_data(img[j++]); 
			            write_data(img[j++]); 
			         }   
           
} 
/*------------------清整个GDRAM空间----------------------------*/ 
void clrgdram() 
{ 
		unsigned char x,y; 
        for(y=0;y<64;y++) 
        	for(x=0;x<16;x++) 
         	{  
				write_com(0x34);//功能设置---8BIT控制界面,扩充指令集绘图显示关 
	            write_com(y+0x80);        //行地址 
	            write_com(x+0x80);     //列地址 
	            write_com(0x30); 
	            write_data(0x00); 
	            write_data(0x00); 
            } 
   } 
/*------------------整屏写入数据:全亮,或者竖条-----------------------------*/ 
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 Disp_H_Line() 
{  
	unsigned char x,y; 
    unsigned char k=0x00;   
       for(y=0;y<32;y++) 
         { 
			 k=~k; 
	         for(x=0;x<16;x++) 
		         {  
					 	write_com(0x36); 
			            write_com(y+0x80);      //行地址 
			            write_com(x+0x80);     //列地址 
			            write_com(0x30); 
			            write_data(k); 
			            write_data(k); 
		          }; 
         } 
     write_com(0x34);                           
   	 write_com(0x36); 
} 
/*------------------显示边框-------------------------------*/ 
void Frame() 
{
	unsigned char x,y; 
    lcdfill(0x00); 
        for(x=0;x<9;x+=8) 
        	for(y=0;y<32;y++) 
	           { 
				   	write_com(0x36); 
		            write_com(y+0x80);      //行地址 
		            write_com(x+0x80);        //列地址 
		            write_com(0x30); 
		            write_data(0x80); 
		            write_data(0x00); 
		           
		            write_com(0x36); 
		            write_com(y+0x80);      //行地址 
		            write_com(x+0x87);        //列地址 
		            write_com(0x30); 
		            write_data(0x00); 
		            write_data(0x01); 
	             
	            } 
      for(y=0;y<2;y++) 
         for(x=0;x<8;x++) 
           {
			    write_com(0x36); 
	            write_com(y*31+0x80);      //行地址 
	            write_com(x+0x80+8*y);        //列地址 
	            write_com(0x30); 
	            write_data(0xff); 
	            write_data(0xff); 
           } 
         write_com(0x34); 
         write_com(0x36); 
                    } 

/*------------------在第7列的位置加入两条竖线--------------------------*/ 
void shuxian() 
{ 
	unsigned char x,y; 
     
    for(x=0;x<9;x+=8) 
       for(y=0;y<32;y++) 
          { 
			  	write_com(0x36); 
	            write_com(y+0x80);    //行地址 
	            write_com(x+0x86);     //列地址 
	            write_com(0x30); 
	            write_data(0x00); 
	            write_data(0x14); 
          }; 
}     
           
/*------------------清屏命令--------------------------*/   
void clrscreen() 
{ 
   write_com(0x01); 
   delay(10); 
} 
   
/*------------------唐诗《登鹳雀楼》--------------------------*/ 
void gushi_display() 
{  
   write_com(0x30); 
   clrscreen();   
   write_com(0x80+FIRST_ADDR); 
   hzkdis("白日依山尽,"); 
   write_com(0x90+FIRST_ADDR); 
   hzkdis("黄河入海流。"); 
   write_com(0x88+FIRST_ADDR); 
   hzkdis("欲穷千里目,"); 
   write_com(0x98+FIRST_ADDR); 
   hzkdis("更上一层楼。"); 
   write_com(0xb3+FIRST_ADDR); 
   hzkdis("登鹳雀楼"); 
   write_com(0xaa+FIRST_ADDR); 
   hzkdis("( 唐 )王之焕"); 
} 

main() 
{  
	unsigned char i; 
	P0 = 0;
   while(1) 
   { 
    	PSB=0;
	 	delay(300);
	 	PSB=1;        
     	RW=0; 
        lcdreset();                    //初始化LCD屏 
        CGRAM();                         
        ceshi();                      //显示测试字样 
        delay(2000); 
     
        clrgdram(); 
        clrscreen();                  //清屏 
        Disp_Img(BMP);               //调入一幅图画 
        delay(30000); 

        Disp_Img(BMP1);               //调入一幅图画 
        delay(20000); 
                   
        lcdfill(0xff);               //显示全开 
        delay(2000);             
     
        Disp_H_Line();                //显示横条 
        delay(2000); 

        lcdfill(0xaa);               //显示竖条 
        delay(2000); 
     
        Frame();                     //显示边框 
        delay(2000); 
       
      gushi_display();             //显示唐诗 
      clrgdram(); 
           
      write_com(0x87);          //调用自定义的CGRAM的代码 
      write_data(0x00); 
      write_data(0x00); 
      delay(400); 
       
      shuxian();              //加入两条竖线 
      delay(8000); 
      write_com(0x30); 
      delay(2000); 
             
      gushi_display(); 
      delay(6000); 
      for(i=0;i<8;i++)        //字符循环左移 
     {
		 	write_com(0x18);   
	        delay(2000);} 
	           
	       	gushi_display(); 
	      	delay(6000);   
	     	write_com(0x36);         
	        write_com(0x04);          //第一行反白显示 
	        delay(6000); 
	        write_com(0x04);          //第一行恢复正常 
	        delay(6000); 
            write_com(0x05);          //第二行反白显示 
            delay(6000); 
            write_com(0x05);          //第二行恢复正常 
            delay(6000); 
           
		     write_com(0x03);         //垂直滚动屏幕的内容 
		     write_com(0x60); 
		     delay(6000); 
   } 
} 

⌨️ 快捷键说明

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