⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 1602.c

📁 l602的读写
💻 C
字号:
//说明:此程序在LCD1602上显示“Velcome! ”“www.iccavr.com”同时实现左右移动。

/*********************************
*     字符LCD1602应用例子   *
* 实验环境:本站的M16学习板   *
* 接线方式:RS=PD.3,E=PC.6   *
*           Db0-Db7=PB0-PB7   *
* 作    者:tonghe     *
* 日    期:2007年03月06日   *
* 版    本:V1.2     *
* 修改日期:2007年08月11日   *
* 编 译 器:ICCAVR6.31A    *
*********************************/
#include "iom8v.h"

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

#define uchar unsigned char
#define uint unsigned int

//配置端口
void port_init(void)
 {
// PORTA = 0xFF;
 //DDRA  = 0x00;
 DDRB  = 0xFF;
 PORTB = 0xFF;
 DDRD  = 0xFF;
 PORTD = 0x00;
 
 DDRC  = 0xFF;      //定义C口为输出
 PORTC = 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(void)
    {
 uchar i;

 port_init();    //端口初始化
 delay_ms(50);    //延时500ms
 lcd_init();     //LCD初始化
 
 delay_ms(50);
 locate(1,5);     //第一行显示位置
 lcd("Velcome!");   //第一行显示内容
 locate(2,2);    //第二行显示位置
 lcd("www.iccavr.com");  //第二行显示内容

 for(i=5;i;i--)    //先右移5位
  {
  lcd_comm(0x1C);
  delay_ms(100);
  }
    
 while (1)
        {
  for(i=10;i;i--)   //左移10位
   {
   lcd_comm(0x18);
   if(i==6)delay_ms(2000);  //移到中间暂停2秒
   delay_ms(400);
   }
  for(i=10;i;i--)      //右移10位
   {
   lcd_comm(0x1C);
   if(i==6)delay_ms(2000);
   delay_ms(400);
   }
  }
    }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -