LCD1602驱动函数

发布者:创客1992最新更新时间:2016-10-22 来源: eefocus关键字:LCD1602  驱动函数 手机看文章 扫描二维码
随时随地手机看文章
/******************************************************** 
  * 函数库说明:LCD1602驱动函数 * 
  * 版本: v1.0 * 
  * 编译环境: AVRGCC+AVRSTUDIO * 
  ********************************************************/ 
  #include  
  #include  
  #include  
  #include  
  #define LCD_DATA PORTB 
   
  /*指令选择函数,未采用位段宏定义*/ 
  //PC7接EN 
  void LCD_EN(uint8_t cmd) 
  { 
   if(cmd==0) 
   { 
   PORTC &= ~_BV(PC7); 
   } 
   else if(cmd==1) 
   { 
   PORTC |= _BV(PC7); 
   } 
  } 
  //PC6接RW 
  void LCD_RW(uint8_t cmd) 
  { 
   if(cmd==0) 
   { 
   PORTC &= ~_BV(PC6); 
   } 
   else if(cmd==1) 
   { 
   PORTC |= _BV(PC6); 
   } 
  } 
  //PC5接RS 
  void LCD_RS(uint8_t cmd) 
  { 
   if(cmd==0) 
   { 
   PORTC &= ~_BV(PC5); 
   } 
   else if(cmd==1) 
   { 
   PORTC |= _BV(PC5); 
   } 
  } 
  //函数:毫秒级延时程序 
  void DelayMs(uint16_t ms) 
  { 
   while(--ms) 
   { 
   _delay_ms(1); 
   } 
  } 
  //函数:使能高脉冲函数; 
  void Enable_Pulse() 
  { 
   LCD_EN(1); 
   DelayMs(5); 
   LCD_EN(0); 
  } 
  //函数:写指令函数; 
  //实现:RS=L,RW=L,D0~D7=指令码,E=高脉冲 
  void LCD_Command(uint8_t cmd) 
  { 
   LCD_RS(0); 
   LCD_RW(0); 
   LCD_DATA=cmd; 
   Enable_Pulse(); 
  } 
  //函数:写数据函数; 
  //实现:RS=H,RW=L,D0~D7=数据,E=高脉冲 
  void LCD_Data(uint8_t data) 
  { 
   LCD_RS(1); 
   LCD_RW(0); 
   LCD_DATA=data; 
   Enable_Pulse(); 
  } 
  //函数:写地址函数 
  //参数:line=0-1;column=0-15; 
  void LCD_Address(uint8_t Line,uint8_t Column) 
  { 
   uint8_t address; 
   
   if (Line == 0) 
   { 
   address = 0x80 + Column; 
   } 
   else 
   { 
   address = 0xc0 + Column; 
   } 
   
   LCD_Command(address); 
  } 
  //函数:写字符串程序 
  //实现:先写地址,再写数据 
  void LCD_String(uint8_t Line,uint8_t Column,char *s) 
  { 
   LCD_Address(Line,Column); //写地址 
   while (*s) 
   { 
   LCD_Data(*s); 
   s++; 
   } 
  } 
   
  //函数:初始化函数 
  void LCD_Init(void) 
  { 
   DelayMs(15); 
   LCD_Command(0x38); 
   DelayMs(5); 
   LCD_Command(0x38); 
   DelayMs(5); 
   
   LCD_Command(0x38); 
   DelayMs(5); 
   LCD_Command(0x08); 
   DelayMs(5); 
   LCD_Command(0x01); 
   DelayMs(5); 
   LCD_Command(0x06); 
   DelayMs(5); 
   LCD_Command(0x0c); 
   DelayMs(5); 
  } 
   
  int main(void) 
  { 
   DDRB=0xFF; 
   DDRC=0xFF; 
   
   LCD_Init(); 
   LCD_String(0,3,"Test Ok!"); 
   LCD_String(1,9,"Applex"); 
   while(1) 
   return 0; 
  } 
关键字:LCD1602  驱动函数 引用地址:LCD1602驱动函数

上一篇:ATmega 16单片机I/O相关的寄存器(一)
下一篇:AVR单片机中断模式的串口发送与接收

推荐阅读最新更新时间:2024-03-16 15:16

基于51单片机+DHT11温湿度+LCD1602显示
DHT11温湿度相关介绍 DHT11产品概述 DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传 感器。它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高 的可靠性与卓越的长期稳定性。传感器包括一个电阻式感湿元件和一个NTC测 温元件,并与一个高性能8位单片机相连接。因此该产品具有品质卓越、超快 响应、抗干扰能力强、性价比极高等优点。每个DHT11传感器都在极为精确的 湿度校验室中进行校准。校准系数以程序的形式储存在OTP内存中,传感器内 部在检测信号的处理过程中要调用这些校准系数。单线制串行接口,使系统集 成变得简易快捷。超小的体积、极低的功耗,信号传输距离可达20米以上,使 其成为各类应用甚至最为
[单片机]
基于51单片机+DHT11温湿度+<font color='red'>LCD1602</font>显示
LCD1602自定义字符的方法
LCD1602内含有八个自定义的字符空间,用户可以根据需要设置自定义字符,不过字符的像素通常是5X7。如果需要更大像素的字符,就只能用多个5X7的字符拼合。每个自定义字符的字节有8个,最后一个是0x00;每个字节的高3位为0,即000? ????。自定义字符设置与应用步骤如下: 1、设置自定义字符的代码并存入数组。每个字符分7行,每行有5个像素,如果需要显示,此位设定为1,否则为0。本人用VBA制作了《LCD1602自定义字符生成器》,使用简单,需要可函索。联系:51hei.com 2、按常规方法初始化LCD1602。 3、写命令:40H。 4、写数据:将代码数组写入LCD1602中的CGRAM中。 5、按常
[单片机]
C51编程20-应用篇(LCD1602显示-1)
回顾之前编程教程,第1篇是I/O篇,I/O主要说明I/O的引脚特性以及如何通过C51控制I/O的电平输入输出;第2篇是中断篇,中断篇中介绍了中断系统必要性以及如何使用单片机中的中断系统(外部中断0、外部中断1、定时器/计数器0、定时器/计数器1、串行中断)。 通过I/O篇与中断篇的学习,其实基本学习完51单片机了。应用篇的出现是为了更好的利用单片机去做项目,通过做项目更好的利用单片机中I/O与中断系统。 言归正传,开始本文内容。 在I/O篇的综合练习中,矩阵键盘用作输入,单片机数据处理与控制I/O口,数码管用作显示,如下图所示。 上面的结构,可以总结成3个部分: 输入部分:键盘 中央处理部分:51单片机
[单片机]
C51编程20-应用篇(<font color='red'>LCD1602</font>显示-1)
51单片机(STC89C52RC) lcd1602实验小结
  lcd1602是自带控制器的液晶显示模块,能够显示两行点阵数据,其引脚参数请google之. 在实际使用的时候碰到的现象:   第1行黑块,第2行空白,是1602本身上电复位成功的标志。意味着单片机根本没有进行初始化,需要检查电路.   如果碰到两行都是现实黑块,那么就是意味着初始化不正常,需要尝试使用更长的延时功能,确保数据不丢失.   仿真的时候是可以写入并显示数据的,并且检查电路连线没有问题,开始的时候碰到上述两种任意一种,但是写入数据后屏幕什么也米有了. 能够碰到上述的现象的任意一种的时候,就需要调节对比度端口,数据有可能已经写入了,只是没有显示出来,经实验证实,带背光的1602 lcd在上电复位的
[单片机]
ATmega16驱动ds12c887显示于lcd1602
#include iom16v.h #include macros.h #define uchar unsigned char #define uint unsigned int #define DS_ PORTC&=~BIT(6) #define DS PORTC|=BIT(6) #define RW_ PORTC&=~BIT(5) #define RW PORTC|=BIT(5) #define AS_ PORTC&=~BIT(4) #define AS PORTC|=BIT(4) #define CS_ PORTC&=~BIT(3) #define CS PORTC|=BIT(3) uchar tab1 ={"DAT:"};
[单片机]
DA驱动程序 函数配置
//Author: 泪与汗的缠绵 //Data:2011-11月 //功能:DA驱动程序,函数配置 #include main.h ADC_InitTypeDef ADC_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; u8 Rx_Buffer ; vu32 FLASH_ID = 0; #define M25P64_FLASH_ID 0x202017 float AD_value; //u16 colors ={ // 0xf800,0x07e0,0x001f,0xffe0,0x0000,0x07ff,0xf81f,0xffff ,0x7bef //};
[单片机]
AVR 单片机学习笔记–LCD1602模块
学完51单片机再来学AVR,感觉很容易上手,LCD1602在学51的时候学过,所以可以直接修改相关的IO口操作即可。现在顺便也复习一下。1602可以显示两行字符,每行可以显示16个字符,可惜的是不能显示中文,在我调试的时候它帮我不少的忙。 一、主要技术参数: 显示容量: 16X2个字符(两行,每行16个字符) 模块工作电源: 4.5~5.5V 模块工作电流: 2.0mA (5.0V) 模块最佳工作电源: 5.0V 字符尺寸: 2.95X4.35(WXH)mm 二、IO引脚功能 LCD1602A模块引脚功能
[单片机]
AVR 单片机学习笔记–<font color='red'>LCD1602</font>模块
基于S3C2440的LCD1602驱动的设计
开发目标平台: linux -2.6.28+S3C2440+CRAMFS/YAFFS2   开发环境:UBUNTU-9.04+ arm - linux -gcc-3.4.1   这次需要在s3c2440上开发一个简单的字符型LCD驱动,具体情况如下:   LCD1602共有16根管脚,控制信号3根RS,RW,RE,数据线8根DB0~DB7,可以支持8位数据格式和4位数据格式。   RS:寄存器选择1:数据;0:指令【由GPIO控制】   R/W:读、写操作选择1:读;0:写【我的硬件里直接置低电平】   RE:使能信号【由GPIO控制】   数据线DB4~DB7,分别连接4根GPIO口,DB0~DB3置高。   首先内核注册驱动函
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved