专栏中心

EEPW首页 > 专栏 > 第三十四课 LCD1602驱动头文件

第三十四课 LCD1602驱动头文件

发布人:0750long 时间:2009-06-17 来源:工程师 发布文章

第三十四课 LCD1602驱动头文件

器件手册:pdf  控制芯片:pdf

头文件程序讲解LCD1602_8A.H

/*--------------------------------------------------------------*/
//File: LCD1602_8A.H
//Date: 08-8-9 //08-8-8 //08-8-27  //08-8-26
//Time: 20:10
//Modi: 08-8-10 9:51
//Note: LCD1602 The Best Driver for you!
//  Welcome to use. Have a good day!


/*--------------------------------------------------------------*/
//防止被重复定义
#ifndef __LCD1602_8A_H__   
#define __LCD1602_8A_H__
//所需头文件
#include <intrins.h>


/*--------------------------------------------------------------*/
//LCD1602与单片机接口定义 对应开发板硬件
sfr  LCD_IO = 0x80;               //P0-0x80,P1-0x90,P2-0xA0,P3-0xB0;
sbit LCD_RS = P1^0;              //LCD数据/命令选择端(H/L)
sbit LCD_RW = P1^1;             //LCD  读/写  选择端(H/L)
sbit LCD_EN = P1^2;              //LCD使能控制端
sbit LCD_BZ = LCD_IO^7;     //LCD忙标志位


/*--------------------------------------------------------------*/
//函数声明
void LCD_busy  (void);             //检测LCD是否忙
void LCD_init  (void);                //LCD初始化
void LCD_clr   (void);               //LCD清屏
void LCD_cmd   (unsigned char cmd);          //写入指令
void LCD_dat   (unsigned char dat);              //写入数据
void LCD_pos   (unsigned char x, unsigned char y);      //显示定位
void LCD_printc(unsigned char x, unsigned char y, unsigned char c);  //定位输出字符
void LCD_prints(unsigned char x, unsigned char y, unsigned char *s); //定位输出字符串


/*--------------------------------------------------------------*/
//检测LCD忙状态
void LCD_busy(void)
{
 do
 {
  LCD_EN = 0;
  LCD_RS = 0;         //指令
  LCD_RW = 1;        //读出
  LCD_IO = 0xff;  
  LCD_EN = 1;
  _nop_();                 //高电平读出 延迟时间1us
 }while(LCD_BZ);    //LCD_BZ=1表示忙,LCD_BZ=0表示空闲
 LCD_EN = 0;
}


/*--------------------------------------------------------------*/
//写入指令
void LCD_cmd(unsigned char cmd)   
{
 LCD_busy();        //检测忙
 LCD_RS = 0;      //指令
 LCD_RW = 0;     //写入
 LCD_EN = 1;
 LCD_IO = cmd;   //传指令
 LCD_EN = 0;    
}


/*--------------------------------------------------------------*/
//写入数据
void LCD_dat(unsigned char dat) 
{
 LCD_busy();        //检测忙
 LCD_RS = 1;      //数据
 LCD_RW = 0;     //写入
 LCD_EN = 1;
 LCD_IO = dat;   //传数据
 LCD_EN = 0;    
}


/*--------------------------------------------------------------*/
//显示定位
void LCD_pos(unsigned char x, unsigned char y)
{
 if(y) LCD_cmd(x|0xc0);    //y=1第二行显示,y=0第一行显示 0<=x<16
 else LCD_cmd(x|0x80);    //数据指针=80+地址码(00H~27H,40H~67H)
}


/*--------------------------------------------------------------*/
//LCD清屏
void LCD_clr(void)
{
 LCD_cmd(0x01);
}


/*--------------------------------------------------------------*/
//定位输出字符
void LCD_printc(unsigned char x, unsigned char y, unsigned char c)
{
 LCD_pos(x,y);
 LCD_dat(c);
}


/*--------------------------------------------------------------*/
//定位输出字符串
void LCD_prints(unsigned char x, unsigned char y, unsigned char *s)
{
 LCD_pos(x,y);
 while(*s)
 {
  LCD_dat(*s);
  s++;
 }
}


/*--------------------------------------------------------------*/
//LCD初始化
void LCD_init(void)
{
 LCD_cmd(0x38);   //设置LCD为16X2显示,5X7点阵,八位数据接口 
 LCD_cmd(0x06);   //LCD显示光标移动设置(光标地址指针加1,整屏显示不移动)
 LCD_cmd(0x0c);   //LCD开显示及光标设置(光标不闪烁,不显示"_")
 LCD_cmd(0x01);   //清屏
}


/*--------------------------------------------------------------*/
#endif

本节重点

1、基本操作:

点击开大图

2、读写时序:

点击开大图

点击开大图

专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们

关键词:

相关推荐

AI助力高速线缆卷向下一代速率

智能计算 2025-01-17

替友征婚

loveme99 2005-10-11

IW610系列:为物联网优化的Wi-Fi 6三频无线解决方案

是德科技推出一体化的网络可视化和安全解决方案

模拟电子教学方法的改进

RK3576有多强?实测三屏八摄像头轻松搞定

智能无线通信对推进汽车安全系统应用的作用

视频 2009-02-16

模拟电路教学心得

该国规模最大同类设施之一:英伟达在以色列新建自用数据中心

普源精电荣膺“2024年度电子测量仪器标准化先进工作单位”

Altera发布全新合作伙伴计划,加速FPGA解决方案创新发展

嵌入式系统 2025-01-17

越来越多的电动汽车迁移到特斯拉的充电器

泰克混合信号调试MSO4000实例演示操作

视频 2009-02-17

通过创新PMIC降低BOM成本,Nexperia增强能源采集产品组合

AMD Radeon RX 9070 (XT) 显卡详细参数曝光:均支持 PCIe 5.0,配 20Gbps 显存

模拟精英—与业内专家面对面互联6

更多 培训课堂
更多 焦点
更多 视频

技术专区