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

📄 d_lock_dispaly.c

📁 12864的驱动程序
💻 C
字号:
/***************************************************************\
|*          12864LCD显示程序 proteus7.1仿真AMPIRE128*64       *|
|*        Copyright (c) 2007山师.传播       */
/*        All rights reserved.                  */
          /*赵彦彬                                  *|
|*                                       *|
|*          
\***************************************************************/



#include"w_word.h"






/**********************************************\
|*   写命令子程序                             *|
|*                 *|
\**********************************************/ 
void write_cmd(uchar cmd)             //写命令子程序 
{ RW=0;
  DI=0;   		 //DI=0 写命令 
  E=1;
  P1=cmd;
  E=0;       //RW="L",E="H->L" DB7~DB0的数据被写到IR或DR 
   }

/**********************************************\
|*   写数据子程序                             *|

|*   调用函数: null                           *|
\**********************************************/ 
void write_dat(uchar dat)             //写数据子程序
{ RW=0;
  DI=1;   //DI=1  写数据
  E=1;
  P1=dat;
  E=0;    //RW="L",E="H->L" DB7~DB0的数据被写到IR或DR 
   }

/**********************************************\
|*   设置显示起始行 X地址和Y地址              *|
|*   入口参数:st_line 显示起始行 0~63        *| 
|*             x_add   页地址  8行为一页 0~7  *|
|*   		   y_add   Y地址  0~128           *|

\**********************************************/ 

void set_dis(uchar st_line,uchar x_ad,uchar y_ad)  //设置显示起始行 X地址和Y地址
{  
//write_cmd(st_line+0xc0);                //+0xc0是参照设置起始行的格式
 write_cmd(x_ad+0xb8);                  //+0xb8是参照设置页地址的格式
  if(y_ad<64) { CS1=0;CS2=1;write_cmd(y_ad+0x40);} //Y_add地址实际上只有0~63 采用CS1和CS2选左右半屏
      else     { CS1=1;CS2=0;write_cmd(y_ad);}      //选第一片时,+64第二片为y_add-64+64
 }



/***********************************************\
|*   写汉字子程序1 可以在任意位置写入          *|
|*   入口参数:st_line 显示起始行 0~63         *| 
|*             x_add   页地址  8行为一页 0~7   *|
|*   		   y_add   Y地址  0~128            *|
       
              count 汉字个数
/*调用set_dis write_dat
\***********************************************/ 
void write_word(uchar st_line,uchar x_a,uchar y_a,uchar *buf,uchar count) //写入汉字
{ uint i,j,k=1;
    set_dis(st_line, x_a,y_a);
 for(j=0;j<count;j++)                //显示的字数
 {//	set_dis(st_line,x_ad,y_ad);
 	for(i=0;i<16;i++)
  	 write_dat(*(buf+i+j*32)) ;        //字的下半部分,x_add+1
 	set_dis(st_line,x_a+1,y_a);
 	for(i=16;i<32;i++)
   write_dat(*(buf+i+j*32));         
 	set_dis(st_line,x_a,y_a=y_a+16);

	if(y_a==128)                   //一行的字数超过8 y_add>128时换行
	{                         //为什么每次换行第一列子的上半部分出现错误?

	x_a=2*k;

	y_a=0;

	set_dis(st_line,x_a,y_a);
	set_dis(st_line,x_a,y_a);
	k++;
	}
}



}



 

⌨️ 快捷键说明

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