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

📄 lcd12864.c

📁 数字功放DDX8001控制程序,包含LCD12864驱动,TWI驱动,旋转偏码驱动
💻 C
字号:
/***********************************************************************************
                       无字库LCD12864驱动
				       CPU:M16
                       晶振:8M
                       编译环境:AVRGCC20071221
                       BY:PENG    2008-1-5   
*************************************************************************************/

#include <AVR/io.h>
#include <AVR/delay.h>
#include <avr/pgmspace.h> 
#include "MAP.h"
#include "CHINA.h"
#include "LCD12864.h"
#include "ENGLISH.h"

/*---------------------------------------------------
  name:delay
  task:延时
return:NO
----------------------------------------------------*/
void delay(uint16 t)
{
 	for(;t>0;t--)
   	_delay_us(100);
}
/*---------------------------------------------------
  name:void busywait(void)
  task:busywait
return:
----------------------------------------------------*/
void busywait(void)
{
     Bus_in;
     Lcd_Bus=0xff;
	 Di_clr;
     RW_set;
	 //_delay_us(4);
	 Enable_set;
	 while(busy) ;
     Enable_clr;
	 Bus_out;
}

/*---------------------------------------------------
  name:void write_com(uint8 cmdcode)
  task:写命令到LCD
return:NO
----------------------------------------------------*/
void write_com(uint8 cmdcode)
{
    busywait( );
	Di_clr;
	RW_clr;
	Lcd_Bus=cmdcode;
	Enable_set;
	Enable_clr; 
}

/*---------------------------------------------------
  name:void write_data(uint8 Dispdata)
  task:写数据到LCD
return:NO
----------------------------------------------------*/
void write_data(uint8 Dispdata)
{
    busywait( );
	Di_set;
	RW_clr; 
	Lcd_Bus=Dispdata; 
	Enable_set;
	Enable_clr;
}
/*---------------------------------------------------
  name:
  task:清除内存
return:
----------------------------------------------------*/
void Clr_Scr(uint8 any)
{
	uint8 j,k;
	Mcs_set;Scs_set;
	write_com(Page_Add+0);
	write_com(Col_Add+0);
 if(any==1)                 //all screen
   {
     for(k=0;k<8;k++)
     {
	  write_com(Page_Add+k);
	  for(j=0;j<64;j++)write_data(0x00);
	  }
    }
 if(any==2)                 //left 
   {
     for(k=0;k<8;k++)
     {
      write_com(Page_Add+k);
      for(j=0;j<64;j++)write_data(0x00);    
      }
     }
 if(any==3)                 //right
   {
     for(k=0;k<8;k++) 
      {
       write_com(Page_Add+k);
       for(j=0;j<64;j++)write_data(0x00);
      }
    }
}
/*---------------------------------------------------
  name:void Disp_Img(uint8 *img)
  task:显示12864图片
return:NO
----------------------------------------------------*/
void Disp_Img(uint8 *img)
{
	uint8 j,k;
   for(k=0;k<8;k++)
   {
	Mcs_set;Scs_clr;
	write_com(Page_Add+k);
	write_com(Col_Add+0);
	for(j=0;j<64;j++) write_data(pgm_read_byte(&img[k*128+j]));
	Mcs_clr;Scs_set; 
	write_com(Page_Add+k);
	write_com(Col_Add+0);
	for(j=64;j<128;j++) write_data(pgm_read_byte(&img[k*128+j]));
	}
}
/*---------------------------------------------------
  name:ascii_disp8
  task:指定位置显示ASCII 8*8
return:NO
----------------------------------------------------*/
void ascii_disp8(uint8 c)
  {
    uint8 line;
    c -= 32;
    for (line=0; line<8; line++)
      write_data(pgm_read_byte(&font8[c][line]));
  }
/*---------------------------------------------------
  name:void Disp_char(uint8 Y,uint8 X,uint8 s)
  task:指定位置显示 8*8 数字
return:NO
----------------------------------------------------*/
void Disp_char(uint8 Y,uint8 X,uint8 s,uint8 l_r)
  {
    uint8 line;
	if(l_r){Mcs_set;Scs_clr;}
	 else {Mcs_clr;Scs_set;}
	write_com(Page_Add+Y);
	write_com(Col_Add+X);
    s -= 32;
    for (line=0; line<8; line++)
      write_data(pgm_read_byte(&font8[s][line]));
  }
/*---------------------------------------------------
  name:void Disp_english_string(uint8 Y,uint8 X,uint8 *s)
  task:指定位置显示ASCII 8*8 字符串
return:NO
----------------------------------------------------*/
void Disp_english_string(uint8 Y,uint8 X,uint8 *s)
  {
    uint8 num,bit;
	num=1;
	bit=0;
	Mcs_set;Scs_clr;
	write_com(Page_Add+Y);
	write_com(Col_Add+X);
    while (*s&&((num+X/8)<17))   //line full out
      {
	   if(((num*8+X)>64)&&(bit!=2)) bit=1;//less than 64 disp left or disp right
	   if(bit==1){Mcs_clr;Scs_set;write_com(Col_Add);write_com(Page_Add+Y);bit=2;}
	   ascii_disp8(*s);
	   num++;
	   s++;
      }
  }
/*---------------------------------------------------
  name:void Disp_nascii_string(uint8 Y,uint8 X,uint8 *s,uint8 n)
  task:指定位置显示ASCII N 个8*8 字符串
return:NO
----------------------------------------------------*/
void Disp_nascii_string(uint8 Y,uint8 X,uint8 *s,uint8 n)
  {
    uint8 num,bit;
	num=1;
	bit=0;
	Mcs_set;Scs_clr;
	write_com(Page_Add+Y);
	write_com(Col_Add+X);
    while ((n>0)&&((num+X/8)<17))   //line full out
      {
	   if(((num*8+X)>64)&&(bit!=2)) bit=1;//less than 64 disp left or disp right
	   if(bit==1){Mcs_clr;Scs_set;write_com(Col_Add);write_com(Page_Add+Y);bit=2;}
	   ascii_disp8(*s);
	   num++;
	   s++;
	   n--;
      }
  }
/*---------------------------------------------------
  name:void hz_disp16(uint8 pag,uint8 col, uint8 *hzk)
  task:指定位置显示汉字16*16
return:NO
----------------------------------------------------*/
void hz_disp16(uint8 pag,uint8 col, uint8 *hzk)
{
	uint8 j=0,i=0;
	for(j=0;j<2;j++)
	{
	write_com(Page_Add+pag+j);
	write_com(Col_Add+col);
	for(i=0;i<16;i++) write_data(pgm_read_byte(&hzk[16*j+i]));
	}
}
/*---------------------------------------------------
  name:void init_lcd(void)
  task:初始化LCD屏
return:NO
----------------------------------------------------*/
void init_lcd(void)
{
 	Bus_out;
	Lcd_Bus=0xff;
	DDRC=0Xfc;


	Li_on;
	_delay_ms(2);


	Mcs_set;
	Scs_set;

	write_com(Disp_Off);
	write_com(Page_Add+0);
	write_com(Start_Line+0);
	write_com(Col_Add+0);
	write_com(Disp_On);
}
/*---------------------------------------------------
  name:inform_disp
  task:information
return:NO
----------------------------------------------------*/
void inform_disp(void)
{
	Clr_Scr(all);
	Disp_Img(FirstPage);
    delay(10000);
	Clr_Scr(all);
	Disp_english_string(0,8,"VOL");
}

⌨️ 快捷键说明

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