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

📄 5110-avr.txt

📁 诺基亚5110驱动程序AVR诺基亚5110驱动程序AVR
💻 TXT
字号:
/**********************************************
            NOKIA5110LCD驱动函数
-----------------------------------------------
1:模拟SPI方式实现任意端口接入液晶
2:能实现中英文,图片的显示,由于液晶没有y轴指针,
  使用起来不是很方便.
3:汉字或图片必须使用纵向取模,字节倒序方式
-----------------------------------------------   
***********************************************/
#include "font.h"        
/*************************************************************                
5110LCD与单片机的连接如下        
RESET   PB0        
D/C     PB1        
SDIN    PB2        
SCLK    PB3        
SCE     GND 
常用函数:
1:LCD_clr();                           清屏函数
2:LCD_init();                初始化函数
3:LCD_SET_XY(x,y);           光标定位函数 
4:LCD_write_char('A');           字符输入函数
5:LCD_write_string(x,y,"AA")      字符串输入函数 
6:LCD_draw_bmp(x,y,bmp,x_pix,y_pix)    位图绘制函数
7:LCD_write_hz(x,y,"字")           汉字输入函数
8:LCD_write_hz_sring(x,y,"汉字")       多汉字输入函数                                     
****************************************************************/
#define SET_BIT(io,bit)  (  io |=  (1<<bit) ) //example: SET_BIT(PORTA,0);SET_BIT(DDRA,0);
#define CLR_BIT(io,bit)  (  io &= ~(1<<bit) ) //example: CLR_BIT(PORTA,0);CLR_BIT(DDRA,0);
#define GET_BIT(pin ,bit) ( pin &   (1<<bit) ) //example: GET_BIT(PINA,0);
          
#define LCD_DDR_RESET    SET_BIT(DDRB,0 )                              
#define LCD_SET_RESET    CLR_BIT(PORTB,0)          //RESET=0时,LCD复位
#define LCD_CLR_RESET    SET_BIT(PORTB,0)
 
#define LCD_DDR_DATA     SET_BIT(DDRB,1 )
#define LCD_SET_DATA     SET_BIT(PORTB,1)           //DC=0_指令,DC=1_数据 
#define LCD_SET_COM      CLR_BIT(PORTB,1) 

#define LCD_DDR_SDIN     SET_BIT(DDRB,2 )
#define LCD_SDIN_1     SET_BIT(PORTB,2)
#define LCD_SDIN_0     CLR_BIT(PORTB,2)

#define LCD_DDR_SCLK         SET_BIT(DDRB,3 )
#define LCD_SCLK_1     SET_BIT(PORTB,3)
#define LCD_SCLK_0     CLR_BIT(PORTB,3)              

/*-----------------------------------------------------------------------
LCD_write    : 液晶位操作函数         
-----------------------------------------------------------------------*/
void LCD_write(unsigned char byte)
{      
  unsigned char i;                        //先写数据的高位,后写低位    
  for(i=128;i>0;i>>=1)      
     {       
       if( byte & i ) LCD_SDIN_1;
     else LCD_SDIN_0;      
       LCD_SCLK_0;
    LCD_SCLK_1;       
     }      
}              
#include "font.h"        
/*************************************************************                
5110LCD与单片机的连接如下        
RESET   PB0        
D/C     PB1        
SDIN    PB2        
SCLK    PB3        
SCE     GND 
常用函数:
1:LCD_clr();                           清屏函数
2:LCD_init();                初始化函数
3:LCD_SET_XY(x,y);           光标定位函数 
4:LCD_write_char('A');           字符输入函数
5:LCD_write_string(x,y,"AA")      字符串输入函数 
6:LCD_draw_bmp(x,y,bmp,x_pix,y_pix)    位图绘制函数
7:LCD_write_hz(x,y,"字")           汉字输入函数
8:LCD_write_hz_sring(x,y,"汉字")       多汉字输入函数                                     
****************************************************************/
#define SET_BIT(io,bit)  (  io |=  (1<<bit) ) //example: SET_BIT(PORTA,0);SET_BIT(DDRA,0);
#define CLR_BIT(io,bit)  (  io &= ~(1<<bit) ) //example: CLR_BIT(PORTA,0);CLR_BIT(DDRA,0);
#define GET_BIT(pin ,bit) ( pin &   (1<<bit) ) //example: GET_BIT(PINA,0);
          
#define LCD_DDR_RESET    SET_BIT(DDRB,0 )                              
#define LCD_SET_RESET    CLR_BIT(PORTB,0)          //RESET=0时,LCD复位
#define LCD_CLR_RESET    SET_BIT(PORTB,0)
 
#define LCD_DDR_DATA     SET_BIT(DDRB,1 )
#define LCD_SET_DATA     SET_BIT(PORTB,1)           //DC=0_指令,DC=1_数据 
#define LCD_SET_COM      CLR_BIT(PORTB,1) 

#define LCD_DDR_SDIN     SET_BIT(DDRB,2 )
#define LCD_SDIN_1     SET_BIT(PORTB,2)
#define LCD_SDIN_0     CLR_BIT(PORTB,2)

#define LCD_DDR_SCLK         SET_BIT(DDRB,3 )
#define LCD_SCLK_1     SET_BIT(PORTB,3)
#define LCD_SCLK_0     CLR_BIT(PORTB,3)              

/*-----------------------------------------------------------------------
LCD_write    : 液晶位操作函数         
-----------------------------------------------------------------------*/
void LCD_write(unsigned char byte)
{      
  unsigned char i;                        //先写数据的高位,后写低位    
  for(i=128;i>0;i>>=1)      
     {       
       if( byte & i ) LCD_SDIN_1;
     else LCD_SDIN_0;      
       LCD_SCLK_0;
    LCD_SCLK_1;       
     }      
}              
/*-----------------------------------------------------------------------
LCD_SET_XY      : 光标定位函数

输入参数:X、Y    :光标定位,x(0-83)是列地址,y(0-5)是行地址?        
-----------------------------------------------------------------------*/            
void LCD_SET_XY(unsigned char x,unsigned char y)        
{      
  LCD_SET_COM;        
  LCD_write(x+128);        
  LCD_write(y+64);        
}        

/*-----------------------------------------------------------------------
LCD_write_char      : 字符输入函数

输入参数:X、Y    :字符串的起始X、Y坐标;         
-----------------------------------------------------------------------*/            
void LCD_write_char(unsigned char character) //显示ASCII值的字符        
{        
  unsigned char i=0;        
  unsigned int No;        
  No=character-32;                        //字模数据是由空格开始,空格字符的ASCII的值就是32        
  No=No*5;                                //每个字符的字模是5个字节        
  LCD_SET_DATA;         
  while(i<5)                              //一个字符的字模是5个字节,就是5*8点阵        
     {        
       LCD_write(data[No]);          
       i++;        
       No++;        
     }        
 LCD_write(0);                           //每个字符之间空一列        
}          
/*-----------------------------------------------------------------------
lcd_put_string    : 字符串输入函数

输入参数:X、Y    :字符串的起始X、Y坐标;
          *string :最多14*6=84个字符
-----------------------------------------------------------------------*/        
void LCD_write_string(unsigned char x,unsigned char y, unsigned char *string ) //显示FLASH里面的字符串        
{                
        LCD_SET_XY(x,y);
  while(*string)        
       {          
         LCD_write_char( *string++ );        //顺序显示字符        
                                       
       }        
}   

/*-----------------------------------------------------------------------
LCD_draw_bmp      : 位图绘制函数

输入参数:X、Y    :位图绘制的起始X、Y坐标;
          *map    :位图点阵数据;
          Pix_x   :位图像素(长)
          Pix_y   :位图像素(宽)
-----------------------------------------------------------------------*/
void LCD_draw_bmp(unsigned char X,unsigned char Y,unsigned char *map,
                  unsigned char Pix_x,unsigned char Pix_y)
  {
    unsigned int i,n;
    unsigned char row;
    
    if (Pix_y%8==0) row=Pix_y/8;      //计算位图所占行数
      else
        row=Pix_y/8+1;
    
    for (n=0;n<row;n++)
      {
       LCD_SET_XY(X,Y);
        for(i=0; i<Pix_x; i++)
          {
            LCD_write_data(map[i+n*Pix_x]);
          }
        Y++;                         //换行
      }      
  }
/*-----------------------------------------------------------------------
LCD_write_hz      : 汉字输入函数

输入参数:X、Y    :字符串的起始X、Y坐标;
-----------------------------------------------------------------------*/   
void LCD_write_hz(unsigned char x, unsigned char y, unsigned char *hz)
{   unsigned char k,i;
   for(k=0;k<sizeof(GB_12)/sizeof(GB_12[0]);k++)
   {
      if(hz[0] == GB_12[k].Index[0] && hz[1] == GB_12[k].Index[1])
         break;
   }
LCD_SET_XY(x,y); 
for(i=0;i<12;i++)
LCD_write_data(GB_12[k].Msk[i]);
LCD_SET_XY(x,y+1);
for(i=12;i<24;i++)
LCD_write_data(GB_12[k].Msk[i]);
}
 /*-----------------------------------------------------------------------
LCD_write_hz_sring  : 多汉字输入函数

输入参数:X、Y     :汉字的起始X、Y坐标;
     *string  :没有换行功能,一次最多输入7个汉字
-----------------------------------------------------------------------*/          
void LCD_write_hz_sring(unsigned char x, unsigned char y,unsigned char *string)
{unsigned char i=0,j=0,k=0;
 
while(string[i])
{LCD_write_hz(x,y,&string[i]);
x=x+12;
i=i+2;
}

}




⌨️ 快捷键说明

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