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

📄 yej.c

📁 AVR12864液晶程序
💻 C
字号:
/***************************************************************************/
/*      12864LCD测试程序											       */
/*		目标器件:ATmega128												   */
/*		晶振:RC 1MHZ													   */
/*		编译环境:ICCAVR V6.31A											   */
/***************************************************************************/

/*********************************包含头文件********************************/
#include <iom128v.h>
#include <macros.h>
#include "zf.h"
#define uchar unsigned char
uchar gunping_bzw=0;//滚屏标志位

/*********************************端口定义*****************************/
#define		cs1on				  PORTB |=BIT(3);     //选屏1
#define		cs1off			      PORTB &=~BIT(3);

#define		cs2on				  PORTD |=BIT(7);     //选屏2
#define		cs2off			      PORTD &=~BIT(7);

#define		Eon				      PORTB |=BIT(2);    //读写使能
#define		Eoff			      PORTB &=~BIT(2);   

#define		DIon				  PORTB |=BIT(0);    //数据/命令
#define		DIoff			      PORTB &=~BIT(0);

#define		Rwon				  PORTB |=BIT(1);    //R/W
#define		Rwoff			      PORTB &=~BIT(1);


/**********************************字模表***********************************/
 
unsigned char      bz1=1;          //写数据时 DI=bz1
unsigned char      bz0=0;          //写命令时 DI=bz0
//_______________________________________________
void xie(unsigned char bz,char dat)	//写数据★★//写指令★★ok
{ 
     Rwoff;
	 Eon;
	 if(bz==0)
	 DIoff;
	 if(bz==1)
	 DIon;
	 PORTA=dat;            //Pa口
	 Eoff;
}
void fasong_x(uchar dat)	//发送行地址
{	 
     dat=dat&0x07;	//0~7行	
	 dat=dat|0xb8;	//1011 1xxx
	 xie(bz0,dat);
}
void fasong_y(uchar dat)	//发送列地址 
{
	 dat=dat&0x3f;	//0~63列	
	 dat=dat+0x40;	//01xx xxxx
	 xie(bz0,dat);
}

//====================选择液晶屏=============================
xuan_ping(uchar cs)//选择液晶屏 0全屏 1左屏 2中屏 3右屏
{	switch(cs)
	   {case 0: //全屏
			   cs1on;
			   cs2on;
			   delay(10);break; 
	    case 1: //左屏
			   cs1on;
			   cs2off;
			   delay(10);break; 
	    case 2: //中屏
			   cs1off;
			   cs2on;
			   delay(10);break; 
	    }
}
//====================显示函数==================================
//8*8??
/*void LED_xie_char1(uchar x,uchar y,uchar *p)
{ uchar i;
  if(y<8) xuan_ping(1);
  else {if(y<16) xuan_ping(2);
   	    else xuan_ping(3);}
  fasong_y(y<<3);
  fasong_x(x);
  for(i=0;i<8;i++,p++)  xie(bz1,*p);
}
//8*16?? ?>>?
void LED_xie_char2(uchar x,uchar y,uchar *p)
{ uchar i;
  if(y<8) xuan_ping(1);
  else {if(y<16) xuan_ping(2);
   	    else xuan_ping(3);}
  fasong_y(y<<3);
  fasong_x(x);
  for(i=0;i<8;i++,p++)  xie(bz1,*p);
  fasong_x(x+1);
  fasong_y(y<<3);
  for(i=0;i<8;i++,p++)  xie(bz1,*p);
}*/
//16*16?? ??>>??>>??>>??
void LED_xie_char3(uchar x,uchar y,uchar *p)
{ uchar i;
  if(y<8) xuan_ping(1);
  else {if(y<16) xuan_ping(2);
   	    else xuan_ping(3);}
  fasong_y(y<<3);//要左移3位,如不移会覆盖前一字  
  fasong_x(x);
  for(i=0;i<16;i++,p++)  xie(bz1,*p);//16*16汉字的上半部
  fasong_y(y<<3); 
  fasong_x(x+1);
  for(i=0;i<16;i++,p++)  xie(bz1,*p);//16*16汉字的下半部
}
//-----------------------------------------------------------------
void LED_qingping()	//清全屏
{ uchar i,j;
  xuan_ping(0);     //选中(左 右)三屏  也可只清其中一屏   
  for(i=0;i<8;i++)
    { fasong_x(i);fasong_y(0);
      for(j=0;j<64;j++) xie(bz1,0);
    }
}
//___________________________________________________________________
void LED_on_off(uchar D)//1:开显示  0:关显示
{ xuan_ping(0);			//3个屏全部选中(一起开关) 也可分别开/关
  D=D&0x01;
  D=D|0x3e;
  xie(bz0,D);
}
void LED_sta_x(uchar x)	//设置起始行
{ xuan_ping(0);		   //3个屏全部选中(一起设置起始行)也可分开设置
  x=x&0x3f;
  x=x|0xc0;
  xie(bz0,x);
}
void qing_hang(uchar x)//清行
{ uchar i;
  xuan_ping(0);
  fasong_y(0);
  fasong_x(x);
  for(i=0;i<64;i++)  xie(bz1,0);
  fasong_y(0);
  fasong_x(x+1);
  for(i=0;i<64;i++)  xie(bz1,0);
}
//+++++++++++++++++++++++++++++++++++++++
void xianshixy_chuli( )//显示处理
{  
   static uchar dat_i,qishihang,i,j;//滚屏时,数字计数器 
   LED_xie_char3(i,dat_i,wengzi[j]);//写16*16汉字 
   dat_i=dat_i+2;                   //一个字的间距  
   j++;
   if(j>16) j=0;  //汉字个数
   if(gunping_bzw==0)
     {
      if(dat_i>15)//一行8个汉字写满时 
		 { 
		   dat_i=0; 
		   i=i+2;  //在下一行开始
		 }
      if(i==8)//共4行 4*2
		   { 
		     gunping_bzw=1;
		     qishihang=qishihang+16;//移动一行
			 qing_hang(i);//清行
		   }
     }
   else
   {
		 if(dat_i>15)
		 { 
		   dat_i=0; 
		   i=i+2;                 //在下一行开始
	       qishihang=qishihang+1;//滚屏时,数字计数器   
	       qing_hang(i);         //清行
           if(i==8) i=0;         //一屏写满时共四行     
		  }
   }
  LED_sta_x(qishihang);//设置起始行 
  delay(6500);//每移动一个字的速度
  delay(6500);delay(6500);delay(6500);
}
void main()
{	DDRB=0xff;
    //PORTB=0xff;
	DDRD=0xff;
	//PORTD=0xff;
	DDRA=0xff;
	//PORTA=0xff;
    LED_on_off(1);//1:开显示  0:关显示
	LED_qingping();		//清屏		//3屏
	LED_sta_x(0);	//设置起始行
    while(1)
		{   
		     xianshixy_chuli( );
             //LED_xie_char3(0,0,wengzi[0]);
        }
	 
}



⌨️ 快捷键说明

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