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

📄 lcd1602.c~

📁 用isis构建的一个简单的仿真平台
💻 C~
字号:
#include <mega162.h>
#include <delay.h>


/***********************************************************************
*
*函 数 名:lcd_busy
*
*功    能:对lcd判忙
*
*输入参数:无
*
*返 回 值:无
*
***********************************************************************/
void lcd_busy(void)
{
    DDRA=0x00;                                 //设置端口A为带上拉输入
    PORTA=0xff;
    while(1)
    {                                          //E=0;RS=0;RW=1;
        PORTC&=~E;
        PORTC&=~RS;
        PORTC|=RW;
      //  delay_us(10);
        PORTC|=E;                             //E=1;
        if(!(PINA&0x80))break;                //判忙
    }                                         //设置端口A为输出
    DDRA=0xff;  
}


/***********************************************************************
*
*函 数 名:lcd_wr_cmd
*
*功    能:对lcd写命令
*
*输入参数:cmd :待写入的命令
*
*返 回 值:无
*
***********************************************************************/
void lcd_wr_cmd(unsigned char cmd)
{
    lcd_busy();                               //判忙
    PORTC&=~RS;                               //E=0;RS=0;RW=0;
    PORTC&=~RW;
    PORTA=cmd;                                //将数据送入端口A
    delay_us(50);
    PORTC|=E;                                 //E=1;设置为上升沿
    delay_us(50);                             //E=0
    PORTC&=~E;
}

/***********************************************************************
*
*函 数 名:lcd_wr_date                        
*
*功    能:对lcd写数据
*
*输入参数:date :待写入的数据
*
*返 回 值:无
*
***********************************************************************/
void lcd_wr_date(unsigned char date)
{
    lcd_busy();                               //判忙
    PORTC|=RS;                                //E=0;RS=0;RW=0;
    PORTC&=~RW;                               //将数据送入端口A
    PORTA=date;
    delay_us(50);                             //E=1;设置为上升沿
    PORTC|=E;
    delay_us(50);
    PORTC&=~E;                                //E=0
}

/***********************************************************************
*
*函 数 名:lcd_init
*
*功    能:对lcd初始化
*
*输入参数:无
*
*返 回 值:无
*
***********************************************************************/
void lcd_init(void)
{
    DDRA=0xff;                              //设置端口A为上拉输入
    DDRC|=0x07;
    lcd_wr_cmd(0x38);                       //设置16×2显示,5×7点阵,8位数据接口
    delay_ms(30);
    lcd_wr_cmd(0x38);                       //设置16×2显示,5×7点阵,8位数据接口
    lcd_wr_cmd(0x06);                       //读写字符后地址自动加一                                                      
    lcd_wr_cmd(0x0f);                       //显示(1有效)、光标显示(1有效)、光标闪烁(1有效)
    lcd_wr_cmd(0x01);                       //清屏
    delay_ms(50);
    DDRA=0xff;                              //设置端口A为输出
    DDRC|=0x07;
}

/***********************************************************************
*
*函 数 名:lcd_wr_byte
*
*功    能:对lcd指定地址写一字节数据
*
*输入参数:addr :指定的地址
*          date :待写入的数据
*
*返 回 值:无
*
***********************************************************************/
void lcd_wr_byte(unsigned char addr,unsigned char date)
{
    lcd_wr_cmd(0x80+addr);                   //设置地址
    lcd_wr_date(date);                       //写数据
    delay_ms(10);
}


/***********************************************************************
*
*函 数 名:lcd_wr_nbyte
*
*功    能:对lcd指定地址写多字节数据
*
*输入参数:addr :指定的地址
*          *str :指向待写入的数据的指针
*          len  :待写入的数据长度
*
*返 回 值:无
*
***********************************************************************/
void lcd_wr_nbyte(unsigned char addr,unsigned char *str,unsigned char len)
{
    unsigned char i;
    lcd_wr_cmd(0x80+addr);                  //设置地址
    for(i=0;i<len;i++)
    {
       lcd_wr_date(*str++);                 //写数据
    
    }

}


/***********************************************************************
*
*函 数 名:lcd_wr_str
*
*功    能:对lcd指定地址写字符串
*
*输入参数:addr :指定的地址
*          *str :指向待写入的数据的指针
*
*返 回 值:无
*
***********************************************************************/
void lcd_wr_str(unsigned char addr,unsigned char *str)
{
    lcd_wr_cmd(0x80+addr);                     //设置地址
    while(*str)                                
    {
        lcd_wr_date(*str++);                   //写数据
    }

}

⌨️ 快捷键说明

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