?? lcd1602.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 + -