您现在的位置: 主页 > MCU > 单片机技术应用 > LCD1602驱动显示并左右移动的方法 -
本文所属标签:
为本文创立个标签吧:

LCD1602驱动显示并左右移动的方法 -

来源: 网络用户发布,如有版权联系网管删除 2018-09-07 

[导读]以下程序将在LCD1602上显示“Velcome”“www.ycavr.cn”并左右移动。/*********************************
* 字符LCD1602应用例子 *
* 实验环境:阿发的M16学习板 *
* 接线方式:RS=PD.3,E=PD

以下程序将在LCD1602上显示“Velcome”“www.ycavr.cn”并左右移动。

/*********************************
* 字符LCD1602应用例子 *
* 实验环境:阿发的M16学习板 *
* 接线方式:RS=PD.3,E=PD.6 *
* Db0-Db7=PB0-PB7 *
* 编 译 器:ICCAVR6.31A *
*********************************/
#include "iom16v.h"

本文引用地址: http://www.21ic.com/app/mcu/201807/787282.htm

//宏定义
#define RS1602 PD3 //RS接在PORTD.3上
#define E1602 PD6 //E接在PORTD.6上
#define LCD_DATA PORTB //8位数据联接在PORTB上
#define CLR_RS PORTD&=~(1<#define SET_RS PORTD|=1<#define CLR_E PORTD&=~(1<#define SET_E PORTD|=1<

#define uchar unsigned char
#define uint unsigned int

//配置端口
void port_init(void)
{
PORTA = 0xFF;
DDRA =0x00;
PORTB = 0xFF;
DDRB =0xFF;
PORTD =0x00;
DDRD =0xFF;
PORTC =0x00; //开背光:接在PC7
DDRC =0xFF; //定义C口为输出
}

//延时函数:入口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(void)
{
uchar i;

port_init(); //端口初始化
delay_ms(500); //延时500ms
lcd_init(); //LCD初始化

delay_ms(50);
locate(1,5); //第一行显示位置
lcd("Velcome!"); //第一行显示内容
locate(2,2); //第二行显示位置
lcd("www.ycavr.cn"); //第二行显示内容

for(i=5;i;i--) //先右移5位
{
lcd_comm(0x1C);
delay_ms(100);
}

while (1)
{
for(i=10;i;i--) //左移10位
{
lcd_comm(0x18);
delay_ms(400);
}
for(i=10;i;i--) //右移10位
{
lcd_comm(0x1C);
delay_ms(400);
}
}
}



              查看评论 回复



嵌入式交流网主页 > MCU > 单片机技术应用 > LCD1602驱动显示并左右移动的方法 -
 

"LCD1602驱动显示并左右移动的方法 -"的相关文章

网站地图

围观()