LCD1602,LCD1640液晶4位总线模式编程成功

发布者:西周以前的最新更新时间:2012-10-27 来源: 21IC 关键字:LCD1602  LCD1640  总线模式 手机看文章 扫描二维码
随时随地手机看文章
//由于2051的IO不够用,必须省出IO口,迫不得已,又根据大量资料对程序进行了修改
//得到如下能够成功运行的程序。本程序在STC89C51RC@12MHz 4位总线模式下通过data image CM1640液晶模块
//yusung W-1602A液晶模块,广州捷胜 1602A V1.0模块的测试,均可正常写入。

#include < reg51.h>
sbit rs=P3^5;//指令数据选择
sbit rw=P2^7;//读写选择
sbit clk=P3^4;//使能脉冲
unsigned char code Logo_text1[]="[China O Soft!] ";//文字数组
unsigned char code Logo_text2[]="Soldering iron. ";//文字数组
unsigned char code Logo_text3[]={'V','o','l','t',':','2','0','V',' ','S','e','t','3','0','0',0xdf};//文字数组
unsigned char code Logo_text4[]={'P','o','w','e','r',':','2','0','W',' ','C','T','2','9','5',0xdf};//文字数组
unsigned char m;//辅助寻址指针变量
sbit clear = P3^2;//清屏按钮
sbit key1 = P3^4;//写第一行按钮
sbit key2 = P3^5;//写第二行按钮
sbit key3 = P3^6;//显示模式变更测试按钮

void delay2ms()//2064周期延时
{
unsigned char temP0;
while(--temp1);
while(--temp1);
while(--temp1);
while(--temp1);
}

void delay()
  {
  unsigned char temp1,temp2;
  temp1=50;
  while(--temp1)
    while(--temp2);
  }

void check_busy()//忙检测
  {
  unsigned char busy;//临时字节
  do
  {
  rs=0;//选择寄存器
  rw=1;//读取
  clk=1;//LCD将数据放到总线
  busy=P0;//读入总线数据
  clk=0;//关闭总线
  busy=busy&0x80;//保留最高位
  }while(busy);//判断是否为忙
  }

void instructions(unsigned char INS)//写指令函数
  {
  check_busy();//写之前检测忙
  rs=0;//选择指令寄存器
  rw=0;//写操作
  clk=1;//准备下降沿
  P0=INS;//数据放到总线上
  clk=0;//下降沿,数据写入LCD

  clk=1;//准备下降沿
  P0=INS<<4;//数据放到总线上
  clk=0;//下降沿,数据写入LCD
  }


void write_data(unsigned char dat)//写数据函数
  {
  check_busy();//写之前检测忙
  rs=1;//选择数据寄存器
  rw=0;//写操作
  clk=1;//准备下降沿
  P0=dat;//数据放到总线上
  clk=0;//下降沿,数据写入LCD

  clk=1;//准备下降沿
  P0=dat<<4;//数据放到总线上
  clk=0;//下降沿,数据写入LCD
  }
void lcd_clear()//清除显示函数
  {
  instructions(0x01);//清除显示
  delay2ms();//清屏后,按手册至少应延时1.53ms
  }
void set_4bit_mode()
  {
  check_busy();//写之前检测忙
  rs=0;//选择指令寄存器
  rw=0;//写操作
  clk=1;//准备下降沿
  P0=0x2f;//4位总线控制字
  clk=0;//下降沿,数据写入LCD
  }
void lcd_init()
  {
  rw=0;//写操作
  set_4bit_mode();//设置成4位总线模式.
  delay2ms();//按手册应至少延时39us,但由于执行次数不多,统一使用2ms延时
  instructions(0x0f);//设置输入模式为8位数据总线,光标增量移动,显示不移位
  delay2ms();//按手册应至少延时39us,但由于执行次数不多,统一使用2ms延时
  instructions(0x06);//开显示,关闭光标,不闪烁
  delay2ms();//按手册应至少延时39us,但由于执行次数不多,统一使用2ms延时
  lcd_clear();//调用清屏函数

  instructions(0x80+0x00);//写入显示缓冲区起始地址为1行1列
  delay2ms();//按手册应至少延时39us,但由于执行次数不多,统一使用2ms延时
  for(m=0;m<16;m++)//将预先定义好的字符连续发送到LCD
    {
write_data(Logo_text1);//通过辅助变量查询数组并写入LCD
delay();
}

  instructions(0x80+0x40);//写入显示缓冲区起始地址为2行1列
  delay2ms();//按手册应至少延时39us,但由于执行次数不多,统一使用2ms延时
  for(m=0;m<16;m++)//将预先定义好的字符连续发送到LCD
    {
write_data(Logo_text2);//通过辅助变量查询数组并写入LCD
delay();
}
  }

void main()
{
lcd_init();//LCD初始化
while(1)
  {
  if(!key1)//判断按键是否按下
    {
instructions(0x80+0x10);//写入显示缓冲区起始地址为1行1列
    delay2ms();//按手册应至少延时39us,但由于执行次数不多,统一使用2ms延时
for(m=0;m<16;m++)//将预先定义好的字符连续发送到LCD
   {
   write_data(Logo_text3);//通过辅助变量查询数组并写入LCD
   }
}
  if(!key2)//判断按键是否按下
    {
instructions(0x80+0x50);//写入显示缓冲区起始地址为2行1列
    delay2ms();//按手册应至少延时39us,但由于执行次数不多,统一使用2ms延时
for(m=0;m<16;m++)//将预先定义好的字符连续发送到LCD
   {
   write_data(Logo_text4);//通过辅助变量查询数组并写入LCD
   }
}
  if(!clear)//判断按键是否按下
    {
lcd_clear();//调用清屏函数
}
  if(!key3)//判断按键是否按下
    {
instructions(0x0c);//改变显示模式
    delay2ms();//按手册应至少延时39us,但由于执行次数不多,统一使用2ms延时
}
  }
}
关键字:LCD1602  LCD1640  总线模式 引用地址:LCD1602,LCD1640液晶4位总线模式编程成功

上一篇:软件实现多路PWM的输出
下一篇:AT89S5X 脱机下载器制作

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

采用AT89C2051单片机实现数字电容表的设计
设计任务 设计并制作一个数字电容表,系统实现的功能及要求如下: (1)设计的电容表可测量容量小于2μF的电容。 (2)设计的电容表采用3位半数字显示,最大显示值为1 999。 (3)设计的电容表读数单位统一采用nF,量程分4档,实际电容值为读数乘以相应的倍率。 2 方案论证 2.1 电路方案 (1)方案一:基本电路搭建 用基本电路来实现数字显示的电容表,电路结构复杂,故障系数大,不易调试,误差也较大。 (2)方案二:单片机编程 用单片机设计电路,由于使用软硬件结合的方式,所以电路结构简单、调试也相对方便。与第一种方案比较优点是非常明显的。 2.2 显示方案 (1)方案一:静态显示 静态显示,显示驱动电路具有输出锁存功能,单
[单片机]
采用AT89C<font color='red'>2051</font>单片机实现数字电容表的设计
51单片机-LCD1602
1.硬件设计 1.1.LCD1602介绍 LCD1602是由字符型液晶显示屏(LCD)、控制驱动主电路HD44780及其扩展驱动电路HD44100,以及少量电阻、电容元件和结构件等装配在PCB板上而组成。 LCD1602主要用来显示数字、字母、图形以及少量自定义字符。可以显示2行16个字符,拥有16个引脚,其中8位数据总线D0-D7,和RS、R/W、EN三个控制端口,工作电压为5V,并且带有字符对比度调节V0和背光源AK 关于LCD的工作原理,结构堆叠等的介绍,可参考如下链接:https://lishiyi.blog.csdn.net/article/details/124106767?spm=1001.2014.3001.550
[单片机]
51单片机-<font color='red'>LCD1602</font>
基于51单片机定时器0计时计数器1计数的霍尔传感器精确测速
#include reg52.h #include intrins.h #define uchar unsigned char #define uint unsigned int sbit RW=P2^6;//定义LCD1602液晶显示器读写端 sbit RS=P2^5;//定义LCD1602液晶显示器数据命令端 sbit EN=P2^7;//定义LCD1602液晶显示器使能端 sbit qiting=P3^0;//定义启停按键 uchar qitingnum;//定义启停次数变量 uint count;//定时器0定时中断次数变量 unsigned long speed=0;//定义速度变量 uchar co
[单片机]
基于51单片机定时器0计时计数器1计数的霍尔传感器精确测速
单片机显示原理(LCD1602)
一.接口 LCD1602是很多单片机爱好者较早接触的字符型液晶显示器,它的主控芯片是HD44780或者其它兼容芯片。与此相仿的是LCD12864液晶显示器,它是一种图形点阵显示器,能显示的内容比LCD1602要丰富得多,除了普通字符外,还可以显示点阵图案,带有汉字库的还可以显示汉字,它的并行驱动方式与LCD1602相差无几,所以,在这里花点时间是值得的。 一般来说,LCD1602有16条引脚,据说还有14条引脚的,与16脚的相比缺少了背光电源A(15脚)和地线K(16脚)。这块LCD1602的型号是HJ1602A,是绘晶科技公司的产品,它有16条引脚。如图1所示: 图1 再来一张它的背面的,如图2所示: 图2 它的
[单片机]
单片机显示原理(<font color='red'>LCD1602</font>)
基于AT89C2051的解码器设计
  目前我国应用极广的编解码器是Princeton公司生产的具有531441(312)种状态的PT2262编码芯片和与之配套的PT2272解码芯片,但一片PT2262只能对一种地址的PT2272的15种状态进行解码,对于较大的编解码保安防盗控制系统,通常使用多片PT2272组合解码方式,但这种多片方案仍然满足不了设计要求。因此,本文给出了采用AT89C2051单片机实现 PT2272大容量解码的设计方案。 1 PT2262的编码原理   PT2262的工作原理电路如图1所示,图中,K0~K7为地址端,使用时应该预置其状态;K8~K11为数据端。当应用时按下按钮开关K8~K11 后,PT2262就会在第17脚输出一串行编码脉冲。
[单片机]
基于AT89C<font color='red'>2051</font>的解码器设计
LM3S9B96的EPI总线的HB8模式配置
下面是EPI的HB8模式的例子: /* Includes -----------------------------------------*/ #include inc/hw_memmap.h #include inc/hw_types.h #include driverlib/gpio.h #include driverlib/sysctl.h #include driverlib/epi.h /* Private variables ------------------------------*/ unsigned char temp; /***********************
[单片机]
基于51单片机的智能自动窗帘设计
一.硬件方案 自动窗帘系统硬件电路主要由感光检测电路,时钟电路,电机控制电路、按键电路等外围电路构成。该设计则主要讨论了自动窗帘系统的设计过程,硬件电路设计,软件调试过程。通过本系统可以实现通过光照强度实现窗帘开关自动控制、定时控制和手动控制等不同的控制方式。 硬件主要采用51单片机+LCD1602液晶显示+DS18B20+光敏电阻+DS1302+步进电机+ULN2003设计而成;如图: 二.设计功能 (1)液晶实时显示目前的状态,包括温度、模式、光线强度、时间等信息。 (2)智能窗帘可以根据外界光线的强弱来进行自动开关窗户,光线强弱的上下限可以按键调节。 (3)具有手动控制功能,可以手动开/关窗户。 (4)可以通过按键设
[单片机]
基于51单片机的智能自动窗帘设计
GMS97C2051与ISD2560组成的小型语音系统
    摘要: 介绍单片机GMS97C2051与语音芯片ISD2560组成的电脑语音系统,给出实用电路和录、放音程序框图以及源程序。系统硬件电路简单,调试方便,性价比高,实用性强,可作为电脑语音服务系统的语音板,具有一定的实用价值和参考价值。     关键词: GMS97C2051单片机 ISD2560语音芯片 分段录音 组合回放     目前电脑语音服务行业越来越广,如电脑语音钟、语音型数字万用表、手机话费查询系统、排队机以及公共汽车报站器等等。笔者用单片机GMS97C2051和ISD2560设计了一款微电脑语音板,实现了语音的分段录取、组合回放,通过软件的修改还可以实现整段录取,循环播放。该系统完成
[工业控制]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • ARM裸机篇--按键中断
    先看看GPOI的输入实验:按键电路图:GPF1管教的功能:EINT1要使用GPF1作为EINT1的功能时,只要将GPFCON的3:2位配置成10就可以了!GPF1先配 ...
  • 网上下的--ARM入门笔记
    简单的介绍打今天起菜鸟的ARM笔记算是开张了,也算给我的这些笔记找个存的地方。为什么要发布出来?也许是大家感兴趣的,其实这些笔记之所 ...
  • 学习ARM开发(23)
    三个任务准备与运行结果下来看看创建任务和任运的栈空间怎么样的,以及运行输出。Made in china by UCSDN(caijunsheng)Lichee 1 0 0 ...
  • 学习ARM开发(22)
    关闭中断与打开中断中断是一种高效的对话机制,但有时并不想程序运行的过程中中断运行,比如正在打印东西,但程序突然中断了,又让另外一个 ...
  • 学习ARM开发(21)
    先要声明任务指针,因为后面需要使用。 任务指针 volatile TASK_TCB* volatile g_pCurrentTask = NULL;volatile TASK_TCB* vol ...
  • 学习ARM开发(20)
  • 学习ARM开发(19)
  • 学习ARM开发(14)
  • 学习ARM开发(15)
何立民专栏 单片机及嵌入式宝典

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

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