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

📄 lcd.h

📁 51单片驱动18b20的源代码程序!供设计者参考!
💻 H
字号:
/****************************端口宏定义**************************************/
//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_RW_PORT   PORTA 
#define LCD_RW_DDR    DDRA 
#define LCD_RW        (1<<PA2)

#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_WriteControl(unsigned char command);
void LCD_WriteData(unsigned char data);
void LCD_Clear(void);
void LCD_Cursor (char row, char column);
void LCD_DisplayCharacter (char Char);
void LCD_DisplayString (char row, char column ,unsigned char *string);
void LCD_DisplayInt (char row, char column ,unsigned int t);
void LCD_Displayasc (char row, char column,  char asc);
void LCD_DisplayLong(char row, char column ,unsigned long t);
void delay_1us(void);
void delay_nus(unsigned int n);
void delay_1ms(void);
void delay_nms(unsigned int n);
/*******************************液晶初始化***********************************/
void LCD_init(void) //液晶初始化 
{ 
  LCD_DATA_DDR|=LCD_DATA; //数据口方向为输出 
  LCD_EN_DDR|=LCD_EN; //设置EN方向为输出 
  LCD_RS_DDR|=LCD_RS; //设置RS方向为输出 
  LCD_RS_DDR|=LCD_RW; //
  LCD_WriteControl(0x28); 
  LCD_en_write(); 
  delay_nus(40); 
  LCD_WriteControl(0x28); //4位显示 
  LCD_WriteControl(0x0c); //显示开 
  LCD_WriteControl(0x01); //清屏 
  delay_nms(2); 
} 
/*******************************液晶使能*************************************/
void LCD_en_write(void) //液晶使能 
{ 
  LCD_EN_PORT|=LCD_EN; 
  delay_nus(1); 
  LCD_EN_PORT&=~LCD_EN; 
} 
/*******************************写指令***************************************/
void LCD_WriteControl(unsigned char command) //写指令 
{ 
  delay_nus(16); 
  LCD_RS_PORT&=~LCD_RS; //RS=0 
  LCD_RW_PORT&=~LCD_RW; //
  LCD_DATA_PORT&=0X0f; //清高四位 
  LCD_DATA_PORT|=command&0xf0; //写高四位 
  LCD_en_write(); 
  command=command<<4; //低四位移到高四位 
  LCD_DATA_PORT&=0x0f; //清高四位 
  LCD_DATA_PORT|=command&0xf0; //写低四位 
  LCD_en_write(); 
} 
/*******************************写数据***************************************/
void LCD_WriteData(unsigned char data) //写数据 
{ 
  delay_nus(16); 
  LCD_RS_PORT|=LCD_RS; //RS=1 
  LCD_RW_PORT&=~LCD_RW; //
  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_WriteControl(0x01);
}

void LCD_Cursor (char row, char column)
{
  switch (row)
   {
    case 1: LCD_WriteControl (0x80 + column - 1); break;
    case 2: LCD_WriteControl (0xc0 + column - 1); break;
    default: break;
   }
}

void LCD_DisplayCharacter (char Char)
{
  LCD_WriteData (Char);
}

void LCD_DisplayString (char row, char column ,unsigned char *string)
{
 LCD_Cursor (row, column);
 while (*string)
  LCD_DisplayCharacter (*string++);
}

unsigned char ch1[6];                      //用于存放INT转换成字符串后的数据
void  LCD_DisplayInt (char row, char column ,unsigned int 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(row,column,ch1);
}

void LCD_Displayasc (char row, char column,  char asc)
{ 
  unsigned char ascii[2],temp;
  temp=asc;
  ascii[0]=temp+'0';
  ascii[1]='\0';
  LCD_DisplayString(row,column,ascii);
}

/****************************************************************************/
//////////////////////////////延时程序////////////////////////////////////////
/****************************************************************************/
#define XTAL 8                    //晶振频率,单位MHz
void delay_1us(void)                 //1us延时函数
  {
   asm("nop");
  }

void delay_nus(unsigned int n)       //N us延时函数
  {
   unsigned int i=0;
   for (i=0;i<n;i++)
   delay_1us();
  }
  
void delay_1ms(void)                 //1ms延时函数
  {
   unsigned int i;
   for (i=0;i<(unsigned int)(XTAL*143-2);i++);
  }
  
void delay_nms(unsigned int n)       //N ms延时函数
  {
   unsigned int i=0;
   for (i=0;i<n;i++)
   {
      delay_1ms();
   }   
  }

⌨️ 快捷键说明

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