?? lcd.c
字號(hào):
#include <iom16v.h>
#include <macros.h>
#define LCD_RS (1 << 4)
#define LCD_RW (1 << 5)
#define LCD_E (1 << 7)
#define set_e() (PORTD |= LCD_E)
#define set_rs() (PORTD |= LCD_RS)
#define set_rw() (PORTD |= LCD_RW)
#define clr_e() (PORTD &= ~LCD_E)
#define clr_rs() (PORTD &= ~LCD_RS)
#define clr_rw() (PORTD &= ~LCD_RW)
#define uchar unsigned char
#define uint unsigned int
/*-----------------------------------------------------------
delay :短延時(shí)函數(shù)
輸入?yún)?shù) x :粗略延時(shí),x越大,延時(shí)越長(zhǎng)
輸出參數(shù) :無
------------------------------------------------------------*/
void delay(uint dk)
{
while(dk--);
}
/*------------------------------------------------------------
lcdwait :液晶延時(shí)函數(shù)
輸入?yún)?shù) :無
輸出參數(shù) :無
--------------------------------------------------------------*/
void lcdwait(void)
{
delay(600);
}
/*-----------------------------------------------------------
lcdpulse :脈沖函數(shù),把數(shù)據(jù)寫入1602液晶
輸入?yún)?shù) :無
輸出參數(shù) :無
---------------------------------------------------------------*/
void lcdpulse(void)
{
set_e();
clr_e();
}
/*----------------------------------------------------------------
lcdsend :發(fā)送一字節(jié)數(shù)據(jù)函數(shù)
輸入?yún)?shù) data :要發(fā)送字節(jié)數(shù)據(jù)
輸出參數(shù) :無
------------------------------------------------------------------*/
void lcdsend(uchar data)
{
lcdwait();
PORTB=data;
lcdpulse();
}
/*------------------------------------------------------------------
wcom :寫一字節(jié)控制字函數(shù)
輸入?yún)?shù) com :要寫入控制字
輸出參數(shù) :無
-----------------------------------------------------------------*/
void wcom(uchar com)
{
clr_rs();
clr_rw();
lcdsend(com);
lcdwait();
}
/*--------------------------------------------------------------
wdat :顯示一字節(jié)函數(shù)
輸入?yún)?shù) com :要顯示字符ASCⅡ碼
輸出參數(shù) :無
----------------------------------------------------------------*/
void wdat(uchar dat)
{
set_rs();
clr_rw();
lcdsend(dat);
lcdwait();
}
/*------------------------------------------------------------------
LCM1602Reset :LCM1602復(fù)位
輸入?yún)?shù) :無
輸出參數(shù) :無
------------------------------------------------------------------*/
void LCM1602Reset(void)
{
delay(65000);
wcom(0x38);
delay(5000);
wcom(0x38);
delay(5000);
wcom(0x38);
delay(5000);
wcom(0x38);
}
/*------------------------------------------------------------------
lcdinit :LCM1602初始化
輸入?yún)?shù) :無
輸出參數(shù) :無
-------------------------------------------------------------------*/
void lcdinit(void)
{
wcom(0x01); //清屏
wcom(0x3c); //顯示開關(guān)控制:8bit,2行顯示,5x7
wcom(0x0c); //光標(biāo)開,閃爍關(guān)
wcom(0x06); //輸入方式,增量方式,不移動(dòng)
}
/*-----------------------------------------------------------------
disp_string :顯示一字符串函數(shù)
輸入?yún)?shù) data :字符串指針
輸出參數(shù) :無
------------------------------------------------------------------*/
void disp_string( uchar *data )
{
while(*data!=0) {wdat(*data);data++;}
}
//設(shè)置顯示坐標(biāo):X 0~39,Y:0~1
#define setxy(x,y) wcom(((x)|((y)<<6))|0x80)
/*--------------------------------------------------------------
main :主函數(shù)
輸入?yún)?shù) :無
輸出參數(shù) :無
--------------------------------------------------------------*/
void main()
{
DDRD=0xff;
DDRB=0xff;
LCM1602Reset();
lcdinit();
setxy(0,0);
disp_string("Easy Learning..");
setxy(2,1);
disp_string("Avr Studio! ");
while(1)
{
wcom(0x08); //顯示關(guān)
delay(65000);
delay(65000);
delay(65000);
delay(65000);
delay(65000);
delay(65000);
delay(65000);
delay(65000);
wcom(0x0c); //顯示開
delay(65000);
delay(65000);
delay(65000);
delay(65000);
delay(65000);
delay(65000);
delay(65000);
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -