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

📄 1602bf

📁 基于mega64的lcd1602驱动
💻
字号:
#include <avr/io.h>
#include <util/delay.h>
#include "1602.h"

void delay_us(unsigned int x)
{
	for(;x>0;x--);
}


/********************************************************/
/* 函数:void lcd_busy(void)                            */
/* 功能:检查LCD忙状态                                  */
/*busy为1时,忙,等待。busy为0时,闲,可写指令与数据     */
/*                                                      */
/********************************************************/ 
void lcd_busy(void)
{
    LCDDDR=0x00; //设置busy口为输入
    RS0;RW1;nop();
    E1;
    while(LCDPIN&0x80); //忙等待
    E0; 
    LCDDDR=0xFF;//设置busy口为输出 
}

/********************************************************/
/* 函数:void lcd_wrcmd(uchar CMD,uchar busyflag)       */
/* 功能:写入命令到LCD                                  */
/*RS=0,RW=0,E=高脉冲,D0-D7=指令码。                  */
/*cmd为指令,busyflag指定是否要检测LCD忙信号            */
/*                                                      */
/********************************************************/
void lcd_wrcmd(uchar cmd,uchar busyflag)
{
    if(busyflag)lcd_busy();
	RS0;RW0;//写入命令
	LCDDATA=cmd;
	E1;
	LCD_DELAY;
	E0;
	LCD_DELAY;
}
/********************************************************/
/* 函数:void lcd_wrdate(uchar);                        */
/* 功能:写入数据到LCD                                  */
/*RS=1,RW=0,E=高脉冲,D0-D7=指令码。                  */
/*dat为要写入的数据                                     */
/*                                                      */
/********************************************************/
void lcd_wrdata(uchar dat)
{
    //lcd_busy();
	LCD_DELAY;
	RS1;RW0; //写入数据
	LCDDATA=dat;
	E1;
	LCD_DELAY;
	E0;
	LCD_DELAY;
}
/********************************************************/
/* 函数:lcd_xy(uchar x,uchar y)                        */
/* 功能:lcd显示定位                                    */
/*                                                      */
/********************************************************/
void lcd_xy(uchar x,uchar y)
{
	unsigned char address;
	y &= 0x1;
    x &= 0xF;
	if (y == 0)
       address = 0x80 + x;
    else 
       address = 0xc0 + x;
	lcd_wrcmd(address,0);
}
/********************************************************/
/* 函数:void lcd_char(uchar x,uchar y,uchar wchar)     */
/* 功能:lcd于(x,y)处显示字符                        */
/*                                                      */
/********************************************************/
void lcd_char(uchar x,uchar y,uchar wchar)
{
 lcd_xy(x,y);
 lcd_wrdata(wchar);
}
/********************************************************/
/* 函数:void lcd_char(uchar x,uchar y,uchar wchar)     */
/* 功能:lcd于(x,y)处显示字符                        */
/*                                                      */
/********************************************************/
void lcd_string(uchar x,uchar y,char *str)
{   
	lcd_xy(x,y);
	while (*str) 
    {
		lcd_wrdata(*str);
        str++;
    }
}

/********************************************************/
/* 函数:void LcdReset(void);                           */
/* 功能:对1602进行复位                                 */
/*                                                      */
/********************************************************/
void LcdReset(void)
{
   lcd_wrcmd(0x38,1);
   lcd_wrcmd(0x08,1);//显示关闭
   lcd_wrcmd(0x01,1);//显示清屏
   lcd_wrcmd(0x06,1);//写入新数据后光标右移 
   lcd_wrcmd(0x0c,1);//显示功能开,显示光标
   
}
/********************************************************/
/*                                                      */
/*  函数

⌨️ 快捷键说明

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