原创 第三十四课 LCD1602驱动头文件

2009-6-7 19:02 4995 6 6 分类: MCU/ 嵌入式

第三十四课 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、读写时序:


点击开大图


点击开大图


相关程序:https://static.assets-stash.eet-china.com/album/old-resources/2009/6/7/cf0da3d9-2400-4755-8dd7-4ad9a050fa33.rar


 


 


 

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
6
关闭 站长推荐上一条 /3 下一条