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

📄 av240128.c

📁 在MAGE128下使用240*128液晶实例
💻 C
字号:
/*---------
240128液晶参考程序
ATMEGA128
接口  PA0-PA7---->10-17
      PC3-------->9
	  PC4-PC7---->5-8
	  液晶18接地
下面注释掉的函数是显示各种字体的函数.打开就能用.
-----------*/
#include <mega128.h>                        
#include <stdlib.h>
#include <stdio.h>
#include "av240128.h"
void wr_comm (uchar comm);
void wr_data (uchar dat);
void chk_busy (uchar autowr);
/*---------------延时子程序----------------*/
void delay (uint us)
{
  while(us--);
}
void delay1 (uint ms)
{
  uint i,j;
  for(i=0;i<ms;i++)
  for(j=0;j<1000;j++)
  ;
}
/*------------写命令或数据到LCD--------------*/
void wr_od (uchar dat,uchar comm)       //写一个数据和一个命令
{
  wr_data(dat);
  wr_comm(comm);
}
void wr_td (uchar datl,uchar dath,uchar comm)  //写两个数据和一个命令
{
  wr_data(datl);
  wr_data(dath);
  wr_comm(comm);
}
void wr_xd(uint dat,uchar comm)       //写一个16进制数据和一个命令
{
  uchar datl,dath;
  datl=dat;
  dath=dat>>8;
  wr_data(datl);
  wr_data(dath);
  wr_comm(comm);
}
void wr_auto (uchar dat)               //自动写数据
{
  chk_busy (1);
  ClrCD;
  SetRE;
  PORTA=dat;
  ClrWR;
  SetWR; 
}

void wr_comm(uchar comm)       //写命令
{
  chk_busy (0);
  SetCD;
  SetRE;
  PORTA=comm;
  ClrWR;
  SetWR; 
}
void wr_data(uchar dat)       //写数据
{
  chk_busy (0);
  ClrCD;
  SetRE;
  PORTA=dat;
  ClrWR;
  SetWR; 
}
void chk_busy (uchar autowr)    //测状态
{
  uchar PPA;
  PORTA=0xff;
  DDRA=0X00;
  SetCD;
  SetWR;
  ClrRE;
  PPA=PINA;
  if(autowr)
    {
	while(PPA&0X08==0X00)
	;
	}
  else
    {
	while((PPA&0X01==0X00)|(PPA&0X02==0X00))
     ;
	 }
//    PORTC|=BIT(5);
  SetRE;
	DDRA=0Xff;
}
/*------------------初始化-----------------*/
void init_lcd (void)
{
  DDRA|=0XFF;    //A为输出
  DDRB|=0XFF;    //PB4-PB7为输出
  DDRC|=0XFF;    //PC5为输出
/*  PORTC &= ~BIT(3);
  PORTC|=BIT(3);       
  PORTC &= ~BIT(6);
  PORTC|=BIT(4);
  PORTC|=BIT(5);*/
  PORTC.3=0;
  PORTC.3=1;
  ClrCE;
  SetWR;
  SetRE;
  wr_xd(addr_w,0x40);                   //文本显示区首地址
  wr_xd(addr_t,0x42);              //图形显示区首地址
  wr_td(width,0x00,0x41);               //文本显示区宽度
  wr_td(width,0x00,0x43);               //图形显示区宽度
  wr_comm(0x81);                        //逻辑"异或"
  wr_td(0x02,0x00,0x22);                //CGRAM偏置地址设置
  wr_comm(0x9c);                        //启用文本显示,启用图形显示
}
/*--------------清RAM------------------*/
void clrram (void)
{
  uchar i,j;
  wr_xd(addr_w,0x24);
  wr_comm(0xb0);
  for(j=0;j<144;j++)
  {
    for(i=0;i<width;i++)
      wr_auto(0x00);
  }
  wr_comm(0xb2);
}
/*--------------显示点阵------------------*/
void disp_dz(uchar data1,uchar data2)
{
  uchar i,j;
  wr_xd(addr_t,0x24);
  wr_comm(0xb0);
  for(j=0;j<32;j++)
  {
    for(i=0;i<width*2;i++)
      wr_auto(data1);
    for(i=0;i<width*2;i++)
      wr_auto(data2);
  }
  wr_comm(0xb2);
}
/*--------------在addr处显示8xl*yl的图形--------------*/
void disp_img(unsigned int addr,unsigned int xl,unsigned int yl,unsigned char flash *img)
{
  uint i,j;
  for(j=0;j<yl;j++)
  {
    for(i=0;i<xl;i++)
    {
      wr_xd(addr+j*width+i,0x24);
      wr_od(img[j*xl+i],0xc0);
    }
  }
}
/*----------在addr处显示row_yl行(每行row_xl个)8xl*yl的文字----------*/
void disp_hanzi(uint addr,uchar xl,uchar yl,uchar row_xl,uchar row_yl, unsigned char flash *chn)
{
  uint i,j,k,m;
  for(m=0;m<row_yl;m++)
  {
    for(k=0;k<row_xl;k++)
    {
      for(j=0;j<yl;j++)
      {
        for(i=0;i<xl;i++)
        {
          wr_xd(addr+m*yl*width+k*xl+j*width+i,0x24);
          wr_od(chn[(m*row_xl*xl*yl)+(k*xl*yl)+(j*xl)+i],0xc0);
        }
      }
    }
  }
}
/*--------------显示字符------------------*/
void disp_eng(unsigned char *eng)
{
  uint i,j;
  wr_xd(addr_w,0x24);
  wr_comm(0xb0);
  for(j=0;j<9;j++)
  {
    for(i=0;i<width;i++)
      wr_auto(eng[j*width+i]);
  }
  wr_comm(0xb2);
}           

/*void disp_1224(uint x,uint y,unsigned char ss)
{
 unsigned int i,j,no,offset;
 switch(ss)
 {
   case '+':no=0;
            break;
   case '-':no=1;
            break;
   case '.':no=2;
            break;
   case '0':no=3;
            break;
   case '1':no=4;
            break;
   case '2':no=5;
            break;
   case '3':no=6;
            break;
   case '4':no=7;
            break;
   case '5':no=8;
            break;
   case '6':no=9;
            break;
   case '7':no=10;
            break;
   case '8':no=11;
            break;
   case '9':no=12;
            break;
   default: return;         
 }                         
 offset=0x1e0+x+y*30;
 for(i=0;i<32;i++)
 {
  for(j=0;j<2;j++)
  {     
    wr_xd(offset+j,0x24);
    wr_od(shuzi3216[no][j+i*2],0xc0);
  }
  offset+=30;
 } 
 return;
}
void disph_3216(uint x,uint y,unsigned char ss)
{
 unsigned int i,j,no,offset;
 switch(ss)
 {
   case '+':no=0;
            break;
   case '-':no=1;
            break;
   case '.':no=2;
            break;
   case '0':no=3;
            break;
   case '1':no=4;
            break;
   case '2':no=5;
            break;
   case '3':no=6;
            break;
   case '4':no=7;
            break;
   case '5':no=8;
            break;
   case '6':no=9;
            break;
   case '7':no=10;
            break;
   case '8':no=11;
            break;
   case '9':no=12;
            break;
   default: return;         
 }                         
 offset=0x1e0+x+y*30;
 for(i=0;i<16;i++)
 {
  for(j=0;j<4;j++)
  {     
    wr_xd(offset+j,0x24);
    wr_od(shuzis1632[no][j+i*4],0xc0);
  }
  offset+=30;
 } 
 return;
}
void disph_4824(uint x,uint y,unsigned char ss)
{
 unsigned int i,j,no,offset;
 switch(ss)
 {
   case '+':no=0;
            break;
   case '-':no=1;
            break;
   case '.':no=2;
            break;
   case '0':no=3;
            break;
   case '1':no=4;
            break;
   case '2':no=5;
            break;
   case '3':no=6;
            break;
   case '4':no=7;
            break;
   case '5':no=8;
            break;
   case '6':no=9;
            break;
   case '7':no=10;
            break;
   case '8':no=11;
            break;
   case '9':no=12;
            break;
   default: return;         
 }                         
 offset=0x1e0+x+y*30;
 for(i=0;i<24;i++)
 {
  for(j=0;j<6;j++)
  {     
    wr_xd(offset+j,0x24);
    wr_od(shuzis2448[no][j+i*6],0xc0);
  }
  offset+=30;
 } 
 return;
}       

void disph_4024(uint x,uint y,unsigned char ss)
{
 unsigned int i,j,no,offset;
 switch(ss)
 {
   case '+':no=0;
            break;
   case '-':no=1;
            break;
   case '.':no=2;
            break;
   case '0':no=3;
            break;
   case '1':no=4;
            break;
   case '2':no=5;
            break;
   case '3':no=6;
            break;
   case '4':no=7;
            break;
   case '5':no=8;
            break;
   case '6':no=9;
            break;
   case '7':no=10;
            break;
   case '8':no=11;
            break;
   case '9':no=12;
            break;
   default: return;         
 }                         
 offset=0x1e0+x+y*30;
 for(i=0;i<24;i++)
 {
  for(j=0;j<5;j++)
  {     
    wr_xd(offset+j,0x24);
    wr_od(shuzis2440[no][j+i*5],0xc0);
  }
  offset+=30;
 } 
 return;
} */      
void disphz(uint x,uint y,unsigned char ss,unsigned char flag)
{
 unsigned int i,j,no,offset;
 unsigned char lsd;
 offset=0x1e0+x+y*30;
 for(i=0;i<16;i++)
 {
  for(j=0;j<2;j++)
  {     
    wr_xd(offset+j,0x24);
    if(flag==1)
     lsd=~hz1616[ss][j+i*2];
    else
     lsd=hz1616[ss][j+i*2]; 
    wr_od(lsd,0xc0);
  }
  offset+=30;
 } 
 return;
}       
void dispshuzi(uint x,uint y,unsigned char ss,unsigned char flag)
{
 unsigned int i,j,no,offset;
 unsigned char lsd;
 offset=0x1e0+x+y*30;
 for(i=0;i<16;i++)
 {
  for(j=0;j<2;j++)
  {     
    wr_xd(offset+j,0x24);
    if(flag==1)
     lsd=~shuzi[ss][j+i*2];
    else
     lsd=shuzi[ss][j+i*2]; 
    wr_od(lsd,0xc0);
  }
  offset+=30;
 } 
 return;
}       

/*------------------主程序--------------------*/    
void dispfirst(void )
{
  unsigned int i;
for(i=0;i<4;i++)
 { 	 
/*  disp_1224(0,i*32,'+');  
  disp_1224(2,i*32,'-');  
  disp_1224(4,i*32,'.');  
  disp_1224(6,i*32,'1');  
  disp_1224(8,i*32,'2');  
  disp_1224(10,i*32,'3');  
  disp_1224(12,i*32,'4');  
  disp_1224(14,i*32,'5');  
  disp_1224(16,i*32,'6');  
  disp_1224(18,i*32,'7');  
  disp_1224(20,i*32,'8');  
  disp_1224(22,i*32,'9');  
  disp_1224(24,i*32,'0');  */
 }
 return;
}       
void dispsecond(void)
{
 unsigned int i;
 for(i=0;i<4;i++)
 { 
/*  disph_3216(i*8,112,'+');
  disph_3216(i*8,96,'-');  
  disph_3216(i*8,80,'.');  
  disph_3216(i*8,64,'0');  
  disph_3216(i*8,48,'1');  
  disph_3216(i*8,32,'2');  
  disph_3216(i*8,16,'3');  
  disph_3216(i*8,0,'4');  
  if(i<3)
  {
   disph_3216(i*8+4,112,'5');  
   disph_3216(i*8+4,96,'6');  
   disph_3216(i*8+4,80,'7');  
   disph_3216(i*8+4,64,'8');  
   disph_3216(i*8+4,48,'9');  
  } */
 }
}               
void dispthird( void)
{
/* disph_4824(0,104,'+');
 disph_4824(0,80,'-');  
 disph_4824(0,56,'.');  
 disph_4824(6,104,'0');  
 disph_4824(6,80,'1');  
 disph_4824(6,56,'2');  
 disph_4824(6,32,'3');  
 disph_4824(6,8,'4');  
 disph_4824(12,104,'5');  
 disph_4824(12,80,'6');  
 disph_4824(12,56,'7');  
 disph_4824(12,32,'8');  
 disph_4824(12,8,'9');  
 disph_4824(18,104,'0');  
 disph_4824(18,80,'1');  
 disph_4824(18,56,'2');  
 disph_4824(18,32,'3');  
 disph_4824(18,8,'4');  
 disph_4824(24,104,'5');  
 disph_4824(24,80,'6');  
 disph_4824(24,56,'7');  
 disph_4824(24,32,'8');  
 disph_4824(24,8,'9');    */
 return;
}       
void dispforth(void )
{
/* disph_4024(0,104,'+');
 disph_4024(0,80,'-');  
 disph_4024(0,56,'.');  
 disph_4024(5,104,'0');  
 disph_4024(5,80,'1');  
 disph_4024(5,56,'2');  
 disph_4024(5,32,'3');  
 disph_4024(5,8,'4');  
 disph_4024(10,104,'5');  
 disph_4024(10,80,'6');  
 disph_4024(10,56,'7');  
 disph_4024(10,32,'8');  
 disph_4024(10,8,'9');  
 disph_4024(15,104,'+');
 disph_4024(15,80,'-');  
 disph_4024(15,56,'.');  

 disph_4024(20,104,'0');  
 disph_4024(20,80,'1');  
 disph_4024(20,56,'2');  
 disph_4024(20,32,'3');  
 disph_4024(20,8,'4');  
 disph_4024(25,104,'5');  
 disph_4024(25,80,'6');  
 disph_4024(25,56,'7');  
 disph_4024(25,32,'8');  
 disph_4024(25,8,'9');    */
 return;
}
void main ()
{
 unsigned int i,j,k;
 unsigned char sss[7]={28,29,4,30,5,31,32};
  init_lcd();  
/*     wr_xd(0x1e0,0x24);
     wr_od(0xff,0xc0);
     wr_xd(0x1f0,0x24);
     wr_od(0x0,0xc0);*/
    j=1;            
    k=0;
  	 clrram();   
 /*for(i=0;i<4;i++)
 { 	 
  disp_1224(0,i*32,'+');  
  disp_1224(2,i*32,'-');  
  disp_1224(4,i*32,'.');  
  disp_1224(6,i*32,'1');  
  disp_1224(8,i*32,'2');  
  disp_1224(10,i*32,'3');  
  disp_1224(12,i*32,'4');  
  disp_1224(14,i*32,'5');  
  disp_1224(16,i*32,'6');  
  disp_1224(18,i*32,'7');  
  disp_1224(20,i*32,'8');  
  disp_1224(22,i*32,'9');  
  disp_1224(24,i*32,'0');  
}*/    
/* for(i=0;i<4;i++)
 { 
  disph_3216(i*8,112,'+');
  disph_3216(i*8,96,'-');  
  disph_3216(i*8,80,'.');  
  disph_3216(i*8,64,'0');  
  disph_3216(i*8,48,'1');  
  disph_3216(i*8,32,'2');  
  disph_3216(i*8,16,'3');  
  disph_3216(i*8,0,'4');  
  if(i<3)
  {
   disph_3216(i*8+4,112,'5');  
   disph_3216(i*8+4,96,'6');  
   disph_3216(i*8+4,80,'7');  
   disph_3216(i*8+4,64,'8');  
   disph_3216(i*8+4,48,'9');  
  } 
 }*/
/* disph_4824(0,104,'+');
 disph_4824(0,80,'-');  
 disph_4824(0,56,'.');  
 disph_4824(6,104,'0');  
 disph_4824(6,80,'1');  
 disph_4824(6,56,'2');  
 disph_4824(6,32,'3');  
 disph_4824(6,8,'4');  
 disph_4824(12,104,'5');  
 disph_4824(12,80,'6');  
 disph_4824(12,56,'7');  
 disph_4824(12,32,'8');  
 disph_4824(12,8,'9');  
 disph_4824(18,104,'0');  
 disph_4824(18,80,'1');  
 disph_4824(18,56,'2');  
 disph_4824(18,32,'3');  
 disph_4824(18,8,'4');  
 disph_4824(24,104,'5');  
 disph_4824(24,80,'6');  
 disph_4824(24,56,'7');  
 disph_4824(24,32,'8');  
 disph_4824(24,8,'9');    
*/
 /*disph_4024(0,104,'+');
 disph_4024(0,80,'-');  
 disph_4024(0,56,'.');  
 disph_4024(5,104,'0');  
 disph_4024(5,80,'1');  
 disph_4024(5,56,'2');  
 disph_4024(5,32,'3');  
 disph_4024(5,8,'4');  
 disph_4024(10,104,'5');  
 disph_4024(10,80,'6');  
 disph_4024(10,56,'7');  
 disph_4024(10,32,'8');  
 disph_4024(10,8,'9');  
 disph_4024(15,104,'+');
 disph_4024(15,80,'-');  
 disph_4024(15,56,'.');  

 disph_4024(20,104,'0');  
 disph_4024(20,80,'1');  
 disph_4024(20,56,'2');  
 disph_4024(20,32,'3');  
 disph_4024(20,8,'4');  
 disph_4024(25,104,'5');  
 disph_4024(25,80,'6');  
 disph_4024(25,56,'7');  
 disph_4024(25,32,'8');  
 disph_4024(25,8,'9');    */
   	 clrram();
	 for(i=0;i<12;i++)
 	  disphz(i*2+3,0,i,0);
 	 for(i=0;i<7;i++)
 	  disphz(i*2+8,16,sss[i],0);
	 for(i=0;i<12;i++)
 	  disphz(i*2+3,32,i,1);
 	 for(i=0;i<7;i++)
 	  disphz(i*2+8,48,sss[i],1);
	 for(i=0;i<12;i++)
	 dispshuzi(i*2+3,64,i,0);
  while (1)
 {
	 for(i=0;i<12;i++)
	 dispshuzi(i*2+3,96,i,0);
 	 delay1(100);      
	 for(i=0;i<12;i++)
	 dispshuzi(i*2+3,96,i,1);
 	 
 	 delay1(100);      
/* 	 clrram();
 	 dispsecond();
 	 delay1(800);
 	 delay1(800);
 	 clrram();
 	 dispthird();
 	 delay1(800);
 	 delay1(800);
 	 clrram();
 	 dispforth();
 	 delay1(800);
 	 delay1(800);      */
 	  
//	 disp_hanzi(0x01e0,4,32,4,1,tabAVR1);  //显示汉字   "欢迎光临"
/*      for(i=0;i<30;i++)
     { wr_xd(0x1e0+i+k*30,0x24);
       wr_od(0xff,0xc0);
     }*/  
/*     for(i=0;i<j;i++)
     { wr_xd(0x1e0+1500+i,0x24);
       wr_od(0x55,0xc0);
     }  
     delay1(800);	
	 clrram();
//	 disp_img(0x01e0,30,56,tabAVR2);	 //显示含有"我们的AVR"的图片    
     for(i=0;i<j;i++)
     { wr_xd(0x1e0+2100+i,0x24);
       wr_od(0xaa,0xc0);
     }*/  
  } 
}

⌨️ 快捷键说明

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