"); //-->
第三十四课 LCD1602驱动头文件
头文件程序讲解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助力高速线缆卷向下一代速率
替友征婚
WEDC高品质存储器模块
IW610系列:为物联网优化的Wi-Fi 6三频无线解决方案
是德科技推出一体化的网络可视化和安全解决方案
[原创]需要UART芯片,读卡控制器芯片和高品质存储器的朋友看过来了
模拟电子教学方法的改进
RK3576有多强?实测三屏八摄像头轻松搞定
用LK001的选频声控音乐插座电路
在北京挤公车的十大规律
智能无线通信对推进汽车安全系统应用的作用
模拟电路教学心得
基于CAN总线的分布式铝电解控制系统
该国规模最大同类设施之一:英伟达在以色列新建自用数据中心
为何工程下做出的xworks比bsp目录下做出的要慢的多
普源精电荣膺“2024年度电子测量仪器标准化先进工作单位”
Altera发布全新合作伙伴计划,加速FPGA解决方案创新发展
基于AD芯片AD1674设计的数据采集电路
基于CAN总线的配电网户外柱上型重合控制器的设计与实现
越来越多的电动汽车迁移到特斯拉的充电器
泰克混合信号调试MSO4000实例演示操作
通过创新PMIC降低BOM成本,Nexperia增强能源采集产品组合
AMD Radeon RX 9070 (XT) 显卡详细参数曝光:均支持 PCIe 5.0,配 20Gbps 显存
模拟精英—与业内专家面对面互联6
用NJM2072D的声控音乐插座电路(二)
用NJM2072D的声控音乐插座电路(一)
基于AD8016的ADSL线路驱动电路的设计
用SL517A的声控音乐插座电路
用SL518的声控音乐插座电路
基于CAN_BUS的控制器调试系统的设计