📄 lcd.c
字号:
#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 :短延时函数
输入参数 x :粗略延时,x越大,延时越长
输出参数 :无
------------------------------------------------------------*/
void delay(uint dk)
{
while(dk--);
}
/*------------------------------------------------------------
lcdwait :液晶延时函数
输入参数 :无
输出参数 :无
--------------------------------------------------------------*/
void lcdwait(void)
{
delay(600);
}
/*-----------------------------------------------------------
lcdpulse :脉冲函数,把数据写入1602液晶
输入参数 :无
输出参数 :无
---------------------------------------------------------------*/
void lcdpulse(void)
{
set_e();
clr_e();
}
/*----------------------------------------------------------------
lcdsend :发送一字节数据函数
输入参数 data :要发送字节数据
输出参数 :无
------------------------------------------------------------------*/
void lcdsend(uchar data)
{
lcdwait();
PORTB=data;
lcdpulse();
}
/*------------------------------------------------------------------
wcom :写一字节控制字函数
输入参数 com :要写入控制字
输出参数 :无
-----------------------------------------------------------------*/
void wcom(uchar com)
{
clr_rs();
clr_rw();
lcdsend(com);
lcdwait();
}
/*--------------------------------------------------------------
wdat :显示一字节函数
输入参数 com :要显示字符ASCⅡ码
输出参数 :无
----------------------------------------------------------------*/
void wdat(uchar dat)
{
set_rs();
clr_rw();
lcdsend(dat);
lcdwait();
}
/*------------------------------------------------------------------
LCM1602Reset :LCM1602复位
输入参数 :无
输出参数 :无
------------------------------------------------------------------*/
void LCM1602Reset(void)
{
delay(65000);
wcom(0x38);
delay(5000);
wcom(0x38);
delay(5000);
wcom(0x38);
delay(5000);
wcom(0x38);
}
/*------------------------------------------------------------------
lcdinit :LCM1602初始化
输入参数 :无
输出参数 :无
-------------------------------------------------------------------*/
void lcdinit(void)
{
wcom(0x01); //清屏
wcom(0x3c); //显示开关控制:8bit,2行显示,5x7
wcom(0x0c); //光标开,闪烁关
wcom(0x06); //输入方式,增量方式,不移动
}
/*-----------------------------------------------------------------
disp_string :显示一字符串函数
输入参数 data :字符串指针
输出参数 :无
------------------------------------------------------------------*/
void disp_string( uchar *data )
{
while(*data!=0) {wdat(*data);data++;}
}
//设置显示坐标:X 0~39,Y:0~1
#define setxy(x,y) wcom(((x)|((y)<<6))|0x80)
/*--------------------------------------------------------------
main :主函数
输入参数 :无
输出参数 :无
--------------------------------------------------------------*/
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); //显示关
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);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -