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

📄 lcd.h

📁 基于mega128上实现ad7705的驱动程序
💻 H
字号:
/****************************************************************************/
//功能: LCD1602液晶显示程序
//输入: 无
//输出: 无
//备注: LCD1602采用四线连接方式4~7
/****************************************************************************/
#include "delay.h"

#define uchar unsigned char 
#define uint unsigned int
/****************************端口宏定义**************************************/
//LCD1602端口连接按照下面方式连接,RW接地.																		 
#define LCD_EN_PORT   PORTA 
#define LCD_EN_DDR    DDRA 
#define LCD_EN        (1<<PA3)

#define LCD_RS_PORT   PORTA 
#define LCD_RS_DDR    DDRA 
#define LCD_RS        (1<<PA1)

#define LCD_DATA_PORT PORTA 
#define LCD_DATA_DDR  DDRA 
#define LCD_DATA_PIN  PINA 
#define LCD_DATA ((1<<4)|(1<<5)|(1<<6)|(1<<7))
/****************************函数申明****************************************/
void LCD_init(void);
void LCD_en_write(void);
void LCD_Write_char(uchar command,uchar data);
void LCD_Clear(void);
void LCD_set_xy (uchar x, uchar y);
void LCD_DisplayCharacter (uchar Char);
void LCD_DisplayString (uchar x, uchar y ,uchar *string);
void LCD_DisplayInt (uchar x, uchar y ,uint t);
void LCD_Displayasc (uchar x, uchar y,  uchar asc);
void LCD_DisplayLong(uchar x, uchar y ,unsigned long t);

/*******************************液晶初始化***********************************/
void LCD_init(void) //液晶初始化 
{ 
  LCD_DATA_DDR|=LCD_DATA; //数据口方向为输出 
  LCD_EN_DDR|=LCD_EN; //设置EN方向为输出 
  LCD_RS_DDR|=LCD_RS; //设置RS方向为输出 
  LCD_Write_char(1,0x28); 
  LCD_en_write(); 
  delay_nus(40); 
  LCD_Write_char(1,0x28); //4位显示 
  LCD_Write_char(1,0x0c); //显示开 
  LCD_Write_char(1,0x01); //清屏 
  delay_nms(2); 
} 
/*******************************液晶使能*************************************/
void LCD_en_write(void) //液晶使能 
{ 
  LCD_EN_PORT|=LCD_EN; 
  delay_nus(1); 
  LCD_EN_PORT&=~LCD_EN; 
} 
/*******************************写操作***************************************/
void LCD_Write_char(unsigned char command,unsigned char data) 
{ 
  delay_nus(16); 
  if(command==1)        //command为1则写指令
  LCD_RS_PORT&=~LCD_RS; //RS=0 
  else                 //command为零则写数据
  LCD_RS_PORT&=LCD_RS; 
  
  LCD_DATA_PORT&=0x0f; //清高四位 
  LCD_DATA_PORT|=data&0xf0; //写高四位 
  LCD_en_write(); 
  data=data<<4; //低四位移到高四位 
  LCD_DATA_PORT&=0x0f; //清高四位 
  LCD_DATA_PORT|=data&0xf0; //写低四位 
  LCD_en_write(); 
} 



/*******************************清屏*****************************************/
void LCD_Clear(void)
{
LCD_Write_char(1,0x01);
}
/****************************************************************************/
//函数名:    LCD_Cursor (char row, char column)
//功能:      设置液晶显示横,纵坐标
//输入:      row,column
//输出:      无
//备注:      
/****************************************************************************/
void LCD_set_xy (uchar x, uchar y)
{
  uchar address;
   {
     if(y==0)
	 address=0x80+x;
	 else
	 address=0x90+x;
	 LCD_Write_char(1,address);
   }
}
/****************************************************************************/
//函数名:    LCD_DisplayCharacter (char Char)
//功能:      显示一个字符
//输入:      Char
//输出:      无
//备注:      
/****************************************************************************/
void LCD_DisplayCharacter (uchar Char)
{
  LCD_Write_char (0,Char);
}
/****************************************************************************/
//函数名:    LCD_DisplayString() 
//功能:      显示一个字符串
//输入:      x,y,*string
//输出:      无
//备注:      
/****************************************************************************/
void LCD_DisplayString (uchar x, uchar y ,uchar *string)
{
 LCD_set_xy (x, y);
 while (*string)
  LCD_DisplayCharacter (*string++);
}
/****************************************************************************/
//函数名:    LCD_DisplayString ()
//功能:      显示一个字符串
//输入:      x,y,t
//输出:      无
//备注:      
/****************************************************************************/
uchar ch1[6];                      //用于存放INT转换成字符串后的数据
void  LCD_DisplayInt (uchar x, uchar y ,uint t)
{ 
  unsigned char n;
  unsigned char a[5]; char i, j;   
  unsigned char *str=ch1;                             
  a[0]=(t/10000)%10;         //取得整数值到数组          
  a[1]=(t/1000)%10;                                      
  a[2]=(t/100)%10;                                       
  a[3]=(t/10)%10;                                        
  a[4]=(t/1)%10;                                         
                                                      
  for(i=0; i<5; i++)         //转成ASCII码               
    a[i]=a[i]+'0';                                     
  for(i=0; a[i]=='0' && i<=3; i++);   
    n=5-i;                   
  for(j=5-n; j<i; j++)       //填充空格                  
    { *str=' ';  str++; }                              
  for(; i<5; i++)                                        
    { *str=(char)a[i]; str++; }  //加入有效的数字            
  *str='\0'; 
  LCD_DisplayString(x,y,ch1);
}
/****************************************************************************/
//函数名:    LCD_Displayasc (char row, char column unsigned char *asc)
//功能:      显示一个ascii值
//输入:      x,y,*asc
//输出:      无
//备注:      
/****************************************************************************/
void LCD_Displayasc (uchar x, uchar y,  char asc)
{ uchar ascii[2],temp;
  temp=asc;
  ascii[0]=temp+'0';
  ascii[1]='\0';
  LCD_DisplayString(x,y,ascii);
}
/****************************************************************************/
//函数名:    LCD_DisplayLong(char row, char column ,unsigned long t)
//功能:      显示一个字符串
//输入:      x,y,t
//输出:      无
//备注:      
/****************************************************************************/
uchar ch2[8];                      //用于存放LONG转换成字符串的数据
void  LCD_DisplayLong(uchar x, uchar y ,unsigned long t)
{ 
  uchar n;
  uchar a[8]; 
  uchar i, j;   
  uchar *str=ch2; 
  a[0]=(t/10000000)%10;
  a[1]=(t/1000000)%10;
  a[2]=(t/100000)%10;                            
  a[3]=(t/10000)%10;         //取得整数值到数组          
  a[4]=(t/1000)%10;                                      
  a[5]=(t/100)%10;                                       
  a[6]=(t/10)%10;                                        
  a[7]=(t/1)%10;                                         
                                                      
  for(i=0; i<8; i++)         //转成ASCII码               
    a[i]=a[i]+'0';                                     
  for(i=0; a[i]=='0' && i<=7; i++);   
    n=8-i;                   
  for(j=8-n; j<i; j++)       //填充空格                  
    { *str=' ';  str++; }                              
  for(; i<8; i++)                                        
    { *str=(char)a[i]; str++; }  //加入有效的数字            
  *str='\0'; 
  LCD_DisplayString(x,y,ch2);
}

⌨️ 快捷键说明

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