码迷,mamicode.com
首页 > 其他好文 > 详细

51单片机学习笔记【五】——1602液晶屏

时间:2015-07-21 17:15:36      阅读:219      评论:0      收藏:0      [点我收藏+]

标签:51单片机   lcd1602   

一.1602液晶屏基础

1.LCD1602简介

  • 1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号的点阵型液晶模块。它是由若干个5x7或者5x11的点阵字符位组成,每个点阵字符位都可以用显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此,所以它不能很好的显示图片。本次使用型号为SMC1602A LCM的液晶屏。

2.LCD1602接口信号说明

技术分享

3.控制接口说明

技术分享

4.指令说明

技术分享

二.实验例程

1.电路原理图

技术分享

2.实验说明

  • 本实验通过在1602液晶屏上显示字母学习LCD液晶屏的使用方法,接线为JP11接JP12,并插上LCD1602液晶屏,实验中为不影响实验需要把红外遥控模块拆下。

3.程序源代码

/**************************************
  > File Name: LCD1602实验
  > Author: pengshp
  > Mail: pengshp3@outlook.com
  > Date: 2015年 7 月 21 日
***************************************/
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int

uchar ENCHAR_PuZh[16]=" Pechin Science ";
void main()
{
    uchar i;
    LCD1602_Init();
    while(1)
    {
        LCD1602_WriteCom(0x80);
        for(i=0;i<16;i++)
        {
            LCD1602_WriteData(ENCHAR_PuZh[i]);
        }   
    }
}
/*lcd.h文件*/
#ifndef __LCD_H_
#define __LCD_H_
/**********************************
当使用的是4位数据传输的时候定义
**********************************/
#define LCD1602_4PINS

#include<reg51.h>
#define uint unsigned int 
#define uchar unsigned char
/**********************************
PIN口定义
**********************************/
#define LCD1602_DATAPINS P0
sbit LCD1602_E=P2^7;
sbit LCD1602_RW=P2^5;
sbit LCD1602_RS=P2^6;

void Delay1us(uint a);            //在51单片机12MHZ时钟下的延时函数
void LCD1602_WriteCom(uchar com); //LCD1602写入8位命令子函数    
void LCD1602_WriteData(uchar dat);//LCD1602写入8位数据子函数        
void LCD1602_Init();              //LCD1602初始化子程序                     
#endif
/*LCD.C文件*/
//#include"lcd.h"

/*******************************************************************************
* 函数名         : Delay1us
* 函数功能       : 延时函数,延时1us
* 输入           : a
* 输出             : 无
*******************************************************************************/

void Delay1us(uint a)
{
    uint b,c;
    for(c=a;c>0;c--)
        for(b=110;b>0;b--);
}
/*******************************************************************************
* 函数名         : LCD1602_WriteCom
* 函数功能       : 向LCD写入一个字节的命令
* 输入           : com
* 输出             : 无
*******************************************************************************/
#ifndef     LCD1602_4PINS        //当没有定义这个LCD1602_4PINS时
void LCD1602_WriteCom(uchar com) //写入命令
{
    LCD1602_E=0;
    LCD1602_RS=0;
    LCD1602_RW=0;
    LCD1602_DATAPINS=com;
    Delay1us(10);
    LCD1602_E=1;
    Delay1us(10);
    LCD1602_E=0;
}
#else 
void LCD1602_WriteCom(uchar com) //写入命令
{
    LCD1602_E=0;
    LCD1602_RS=0;
    LCD1602_RW=0;
    LCD1602_DATAPINS=com;   //由于4位的接线是接到P0口的高四位,所以传送高四位不用改
    Delay1us(10);
    LCD1602_E=1;
    Delay1us(10);
    LCD1602_E=0;
    Delay1us(10);
    LCD1602_DATAPINS=com<<4;
    Delay1us(10);
    LCD1602_E=1;
    Delay1us(10);
    LCD1602_E=0;
}
#endif
/*******************************************************************************
* 函数名         : LCD1602_WriteData
* 函数功能       : 向LCD写入一个字节的数据
* 输入           : dat
* 输出             : 无
*******************************************************************************/           
#ifndef     LCD1602_4PINS          
void LCD1602_WriteData(uchar dat) //写入数据
{
    LCD1602_E=0;
    LCD1602_RS=1;
    LCD1602_RW=0;
    LCD1602_DATAPINS=dat;
    Delay1us(10);
    LCD1602_E=1;
    Delay1us(10);
    LCD1602_E=0;
}
#else
void LCD1602_WriteData(uchar dat) //写入数据
{
    LCD1602_E=0;
    LCD1602_RS=1;
    LCD1602_RW=0;
    LCD1602_DATAPINS=dat;   //由于4位的接线是接到P0口的高四位,所以传送高四位不用改
    Delay1us(10);
    LCD1602_E=1;
    Delay1us(10);
    LCD1602_E=0;
    LCD1602_DATAPINS=dat<<4;
    Delay1us(10);
    LCD1602_E=1;
    Delay1us(10);
    LCD1602_E=0;
}
#endif
/*******************************************************************************
* 函数名         : LCD1602_Init()
* 函数功能       : 初始化LCD屏
* 输入           : 无
* 输出             : 无
*******************************************************************************/           
#ifndef     LCD1602_4PINS
void LCD1602_Init()          //LCD初始化子程序
{
    LCD1602_WriteCom(0x38);  //开显示
    LCD1602_WriteCom(0x0c);  //开显示不显示光标
    LCD1602_WriteCom(0x06);  //写一个指针加1
    LCD1602_WriteCom(0x01);  //清屏
    LCD1602_WriteCom(0x80);  //设置数据指针起点
}
#else
void LCD1602_Init()          //LCD初始化子程序
{
    LCD1602_WriteCom(0x32);  //将8位总线转为4位总线
    LCD1602_WriteCom(0x28);  //在四位线下的初始化
    LCD1602_WriteCom(0x0c);  //开显示不显示光标
    LCD1602_WriteCom(0x06);  //写一个指针加1
    LCD1602_WriteCom(0x01);  //清屏
    LCD1602_WriteCom(0x80);  //设置数据指针起点
}
#endif

版权声明:本文为博主原创文章,未经博主允许不得转载。

51单片机学习笔记【五】——1602液晶屏

标签:51单片机   lcd1602   

原文地址:http://blog.csdn.net/qq_22512533/article/details/46986717

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!