×
单片机 > 单片机程序设计 > 详情

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

发布时间:2020-06-19 发布时间:
|
以下程序将在LCD1602上显示“Velcome”“www.ycavr.cn”并左右移动。

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

//宏定义
#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);
   }
  }
    }

关键字:LCD1602  驱动显示  左右移动 


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
51单片机CO2检测显示程序解析