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

📄 lcd1602.h

📁 自己设计的5路定时器!用于公司。内附电路图(DXP)
💻 H
字号:
#ifndef _LCD1602_H_
#define _LCD1602_H_
#include <avr/io.h>
#include "delayzz.h"

       
/*-----------------------------------------------------------------------------------------
管脚宏定义
------------------------------------------------------------------------------------------*/ 
#define LCD_EN_PORT    PORTA   
#define LCD_EN_DDR     DDRA 

#define LCD_RW_PORT    PORTA
#define LCD_RW_DDR     DDRA

#define LCD_RS_PORT    PORTA   
#define LCD_RS_DDR     DDRA 

#define LCD_DATA_PORT  PORTA   
#define LCD_DATA_DDR   DDRA     
#define LCD_DATA_PIN   PINA 

#define LCD_RS         (1<<PA1) //0x02   porta1      out
#define LCD_RW          PA2//0x04   porta2       out
#define LCD_EN         (1<<PA3) //0x08   portA3       out 
#define LCD_DATA       ((1<<PA4)|(1<<PA5)|(1<<PA6)|(1<<PA7)) //0xf0   portA4/5/6/7 out .
#define LCD_BUSY       (1<<PA7) //测忙位

void LCD_init(void);                           //液晶初始化函数
void LCD_en_write(void);                      //液晶使能函数
void LCD_wait_Ready(void);                 //判断忙函数
void LCD_write_command(unsigned char command,unsigned char mang,unsigned char mingdata); //写命令或数据
void LCD_set_xy (unsigned char x, unsigned char y);                         //写显示坐标
void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s);    //字符串写入
//void LCD_write_single(unsigned char X,unsigned char Y,unsigned char *s);    //写入数组的单个原数
void LCD_write_struutg(unsigned char X,unsigned char Y,unsigned char *s,unsigned char i);



/**********************************************************************************************
液晶使能
************************************************************************************************/
void LCD_en_write(void)   
{ 
  LCD_EN_PORT|=LCD_EN;                          //EN=1
  delay_nus(1);   
  LCD_EN_PORT&=~LCD_EN;                          //EN=0
} 
/*---------------------------------------------------------------------------------------------
测忙
---------------------------------------------------------------------------------------------*/
void LCD_wait_Ready(void)                               //等待LCD空闲
  {
    LCD_DATA_DDR&=~LCD_BUSY;                               //忙位设置为输入
    LCD_RW_PORT|=(1<<LCD_RW);                                 //RW=1
    LCD_RS_PORT&=~LCD_RS;                                  //RS=0
    LCD_EN_PORT|=LCD_EN;                                  //EN=1                         
    while(!(LCD_DATA_PIN&LCD_BUSY)==0);                 //读忙位,为0表示空闲;
    LCD_EN_PORT&=~LCD_EN;                                //EN=0
    LCD_DATA_DDR|=LCD_BUSY;                             //数据口方向为输出          
  }
/*---------------------------------------------------------------------------------------------
写指令或数据
-----------------------------------------------------------------------------------------------*/ 
void LCD_write_command(unsigned char command,unsigned char mang,unsigned char mingdata)  
   { 
   
     if(mang==1)LCD_wait_Ready();                           //检测是否测忙!
        if(mingdata==1)LCD_RS_PORT&=~LCD_RS;              //RS=0 //判断是数据还是命令
           else LCD_RS_PORT|=LCD_RS;                 //RS=1 
                      LCD_RW_PORT &=~(1<<LCD_RW);                 //RW=0
	                  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_init(void)          
{ 
  LCD_DATA_DDR|=LCD_DATA;               //数据口方向为输出 
  LCD_EN_DDR|=LCD_EN;                   //设置EN方向为输出 
  LCD_RS_DDR|=LCD_RS;                   //设置RS方向为输出
  LCD_RW_DDR|=(1<<LCD_RW);
  LCD_RW_PORT&=~(1<<LCD_RW);
  delay_nms(15);                          //初始化三次
  LCD_write_command(0x28,0,1);            
  delay_nms(5); 
  LCD_write_command(0x28,0,1);  
  LCD_write_command(0x01,1,1);            //清屏  
} 
/*------------------------------------------------------------------------------------------------
写地址
  delay_nms(5);
  LCD_write_command(0x28,1,1);           //4位显示 
  LCD_write_command(0x0c,1,1);            //显示开
  LCD_write_command(0x06,1,1);
-----------------------------------------------------------------------------------------------------*/ 
void LCD_set_xy(unsigned char x,unsigned char y)   
{ 
    unsigned char address; 
    if (y==0) address =0x80 + x; 
    else   address = 0xc0 + x; 
    LCD_write_command(address,1,1); 
} 
/*-----------------------------------------------------------------------------------------------------
英文字符串写入函数
-----------------------------------------------------------------------------------------------------*/ 
void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s) //列x=0~15,行y=0,1 
   { 
         LCD_set_xy(X,Y);                                  //写地址     
         while (*s)                                         // 写显示字符 
          { 
                LCD_write_command(*s,1,0); 
                s ++; 
          }    
   } 

void LCD_write(unsigned char X,unsigned char Y,unsigned char S) //列x=0~15,行y=0,1 
   { 
         LCD_set_xy(X,Y);                                  //写地址     
        
                LCD_write_command(S,1,0); 
                
          
   } 
/*-----------------------------------------------------------------------------------------------------
英文字符写入连续两个字符
-----------------------------------------------------------------------------------------------------*/ 
void LCD_write_struutg(unsigned char X,unsigned char Y,unsigned char *s,unsigned char i) //列x=0~15,行y=0,1 
   { 
        LCD_set_xy(X,Y);                                       
        s=s+i ; 
		LCD_write_command(*s,1,0);
		s++;
		LCD_write_command(*s,1,0);
              
}
#endif

⌨️ 快捷键说明

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