📄 lcd.c
字号:
#include <iom128v.h>
#define LCD_DATA PORTB //8位数据联接在PORTB上
#define CLR_RS PORTD&=~1//RS清0
#define SET_RS PORTD|=1 //RS置1
#define CLR_E PORTD&=~(1<<2) //E清0
#define SET_E PORTD|=1<<2 //E置1
#define uchar unsigned char
#define uint unsigned int
//配置端口
void port_init(void)
{
//DDRE=0X0;
DDRB = 0xFF;
PORTB = 0xFF;
DDRD = 0xFF;
PORTD = 0x00;
//DDRE = 0xFF; //定义C口为输出
//PORTE = 0x00; //开背光:接在PC7
}
//延时函数:入口i,单位mS,最大65536mS
void delay_ms(uint i)
{
uint a;
for(;i;i--)
{
for(a=150;a!=0;a--) //针对时钟频率为1M
{;}
}
}
//写数据到LCD的函数
void lcd_da(uchar data)
{
SET_RS; //RS置高,写数据
delay_ms(1);
SET_E;
LCD_DATA = data;
delay_ms(1);
CLR_E;
delay_ms(1); //延时5MS
}
//写指令到LCD的函数
void lcd_comm(uchar data)
{
CLR_RS; //RS清0,写指令
delay_ms(1); //延时5MS
SET_E;
LCD_DATA = data;
delay_ms(1);
CLR_E;
delay_ms(1); //延时5MS
}
//显示字符串函数:入口:待显示的字符串
void lcd(char *s)
{
while(*s)
{
lcd_da(*s);
s++;
}
}
//清屏指令函数
void cls(void)
{
lcd_comm(0x01);
delay_ms(5);
}
//定位指令函数
void locate(uchar a,uchar b)
{
uchar x;
if(a==1)
x=0x80+b-1;
if(a==2)
x=0xC0+b-1;
lcd_comm(x);
delay_ms(1);
}
//LCD初始化函数
void lcd_init(void)
{
lcd_comm(0x38); //写指令:8位数据、2行显示、5*8点阵
delay_ms(5);
lcd_comm(0x06); //写指令:自左向右显示
delay_ms(5);
lcd_comm(0x0C); //写指令:显示开
delay_ms(5);
//lcd_comm(0x80); //写指令:第1行地址
//delay_ms(5);
lcd_comm(0x01); //写指令:CLS
}
void main()
{
uint i,j;
port_init();
lcd_init();
for(i=1;i<16;i++)
{
locate(1,i);
delay_ms(15);
lcd("dzflovelyl");
delay_ms(95);
cls();
}
for(j=1;j<16;j++)
{
locate(2,j);
delay_ms(15);
lcd("dzflovelyl");
delay_ms(95);
cls();
}
locate(2,1);
lcd("dzflovelyl");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -