51单片机驱动LCD1602的电路图+程序

发布者:VelvetWhisper最新更新时间:2015-06-18 来源: 51hei关键字:51单片机  LCD1602 手机看文章 扫描二维码
随时随地手机看文章


如网页上出现格式错乱可从此处本例的完整源码http://www.51hei.com/f/1602430.rar 上图是仿真效果 显示2行字符.

#include
#define uchar unsigned char
/*****************************************
电路连接 

P1------DB0~DB7
P2.0------RS
P2.1------RW
P2.2------E

*****************************************/

#define LCD_DB P1
sbit LCD_RS=P2^0;
sbit LCD_RW=P2^1;
sbit LCD_E=P2^2;
uchar code ttt[]="ShanXi Dianzi Kejixueyuan";//25
uchar code kkk[]="Dianzi GonGcheng Xueyun";//23
/******定义函数****************/

#define uchar unsigned char
#define uint unsigned int
void  LCD_init(void);//声明初始化函数
void  LCD_write_command(uchar command);//写指令函数
void  LCD_write_data(uchar dat);//写数据函数
void  LCD_disp_char(uchar x,uchar y,uchar dat);//在某个屏幕位置上显示一

//个字符,X(0-16),y(1-2)

//void  LCD_check_busy(void);//检查忙函数。我没用到此函数,因为通过率极低。

void  delay_n40us(uint n);//延时函数

//********************************

//*******初始化函数***************

void  LCD_init(void)

{

LCD_write_command(0x38);//设置8位格式,2行,5x7

LCD_write_command(0x0c);//整体显示,关光标,不闪烁

LCD_write_command(0x06);//设定输入方式,增量不移位--------------

LCD_write_command(0x01);//清除屏幕显示----------------

delay_n40us(100);//实践证明,我的LCD1602上,用for 循环200 次就能可靠完成清屏指令。

}

//********************************

//********写指令函数***********设置先向1602写入的数据为地址*

void   LCD_write_command(uchar dat)

{

LCD_DB=dat;

LCD_RS=0;//指令

LCD_RW=0;//写入

LCD_E=1;//允许

LCD_E=0;//产生下降沿

delay_n40us(1);//实践证明,我的LCD1602 上,用for 循环1 次就能完成普通写指令。

}[page]

//*******************************

//********再写数据函数*****向1602中写入数据********

void   LCD_write_data(uchar dat)

{

LCD_DB=dat;

LCD_RS=1;//数据

LCD_RW=0;//写入

LCD_E=1;//允许

LCD_E=0;//产生下降沿

delay_n40us(1);

}
//写入字符串函数
void   writeDataLcd(unsigned char dat)// 写入数据
  {
    LCD_RS=1; //RS置1    (运算后P5=xxx1 xxxx,即RS=1其他位状态不变) 
    LCD_RW=0; //RW清0   (运算后P5=xx0x xxxx, 即RW=0其他位状态不变)
    LCD_E=0; //使能E清0   (运算后P5=xxxx 0xxx, 即E=0其他位状态不变) 
    P1  =  dat;  //送数据到P2OUT准备输出进入1602,等E下降沿来即可进入1602.
    LCD_E=1;  //使能E置1,P5OUT= xxxx xxxx+0000 1000=xxxx1xxx,E=1.
    delay_n40us(10);
    LCD_E=0; //使能E清0,这样E从1变0,产生一个下降,写入命令到1602。
  } 

 


//********************************

//*******显示一个字符函数*********

void LCD_disp_char(uchar x,uchar y,uchar dat)

{

uchar address;

if(y==1)

address=0x80+x;

else

address=0xc0+x;

LCD_write_command(address);

LCD_write_data(dat);

}

//********************************

/*******检查忙函数*************

voidLCD_check_busy()        
 //实践证明,在我的LCD1602 上,检查忙指令通

过率极低,以至于不能正常使用LCD。因此我没有再用检查忙函数。而使

do//用了延时的方法,延时还是非常好用的。我试了一下,用//

{LCD_E=0;                     //for 循环作延时,普通指令只要1次循就可完成。清屏指令

LCD_RS=0;                  //要用200次循环便能完成。

LCD_RW=1;

LCD_DB=0xff;

LCD_E=1;

while(LCD_DB^7==1);

******************************/

//********延时函数***************

void delay_n40us(uint n)

{ uint i;

uchar j;

for(i=n;i>0;i--)

for(j=0;j<2;j++); //在这个延时循环函数中我只做了2次循环,

} //实践证明我的LCD1602 上普

//通的指令只需1次循环就能可靠完成。

//*******************************

//*********主函数*****************

void main(void)

{
while(1)
   {
    uint i=0;
    LCD_init();
    LCD_write_command(0x80);//0x80第一行从顶头开始显示,加n,后移n位显示
    for (i=0;i<25;i++) 
 {
    writeDataLcd(ttt[i]);
     delay_n40us(15000);
  }
 delay_n40us(30000);
 delay_n40us(30000);
 delay_n40us(50000);
     LCD_write_command(0x80+64);//0x80+64,第二行从顶头开始显示,加64再加n,第二行从n开始显示。
  for (i=0;i<23;i++) 
 {
    writeDataLcd(kkk[i]);
     delay_n40us(15000);
  }
LCD_write_command(0x80);
 LCD_disp_char(2,1,' ');
delay_n40us(20000);
   }
}

关键字:51单片机  LCD1602 引用地址:51单片机驱动LCD1602的电路图+程序

上一篇:51单片机的出租车计价器C51程序
下一篇:ADC0832模数转换51单片机程序与电路图

推荐阅读最新更新时间:2024-03-16 14:04

51单片机 用数码管显示动态检测结果
注:本数码管为共阴极,P2为位选口,P0为数据口 本实验是一个60s计数器,当满60s后,此时又从00开始计数 #include reg51.h unsigned char Tab ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; unsigned char int_time; unsigned char second; void delay(void) { unsigned char i; for(i=0;i 250;i++) ; } void Display(unsigned char k) { P2=0xfd; P0=Tab ;
[单片机]
61-基于51单片机心率脉搏测量及蓝牙APP上传设计
具体实现功能 系统由STC89C52单片机电路+LCD1602液晶显示电路+脉搏/心率传感器电路+LM393比较器模块电路+DS18B20温度传感器电路+电源电路组成。 (1)通过脉搏/心率传感器检测脉搏/心率。 (2)通过温度传感器DS18B20检测体温。 (3)将脉搏/心率和体温实时显示在液晶上。 (4)增加蓝牙模块,将心率和体温实时上传到手机蓝牙APP。 设计背景 随着科学技术的发展和应用,测量脉搏、心率的技术、测量的精度逐渐趋于先进和精准,国内外都有不同类型的测量仪器,其中最重要的就是研究测量传感器。首先对运动测量进行了研究,重点研究了接触式传感器,研制了利用这种传感器测量的对脉搏、心率、血压等测量仪器
[单片机]
61-基于<font color='red'>51单片机</font>心率脉搏测量及蓝牙APP上传设计
51单片机+TM1638驱动数码管测试程序
某宝上买的TM1638模块测试程序 根据数据手册搞出来的 骑远飞TM1638 按键数码管模块 电路原理图如下: 单片机源程序如下: #ifndef _TM1638_H #define _TM1638_H #include REGX51.H #define DATA_COMMAND 0X40 #define DISP_COMMAND 0x80 #define ADDR_COMMAND 0XC0 //TM1638模块引脚定义 sbit DIO=P1^0; sbit CLK=P1^1; sbit STB=P1^2; //共阴数码管显示代码
[单片机]
<font color='red'>51单片机</font>+TM1638驱动数码管测试程序
51单片机资源——EEPROM(IIC总线)
I2C串行总线的组成及工作原理 采用串行总线技术可以使系统的硬件设计大大简化、系统的体积减小、可靠性提高。同时,系统的更改和扩充极为容易。 I2C串行总线概述 I2C总线是PHLIPS公司推出的一种串行总线,是具备多主机系统所需的包括总线裁决和高低速器件同步功能的高性能串行总线。 I2C总线只有两根双向信号线。一根是数据线SDA,另一根是时钟线SCL。 I2C总线通过上拉电阻接正电源。当总线空闲时,两根线均为高电平。连到总线上的任一器件输出的低电平,都将使总线的信号变低,即各器件的SDA及SCL都是线“与”关系。 每个接到I2C总线上的器件都有唯一的地址。主机与其它器件间的数据传送可以是由主机发送数据到其它器件,这
[单片机]
<font color='red'>51单片机</font>资源——EEPROM(IIC总线)
51单片机中的ROM和RAM分别是什么?
众所周知,51 内部的存储器分为数据存储器 RAM 和程序存储器 ROM。以 AT89c51 为例,其中有 128 字节随机存储器(又称数据储存器 RAM)和 4K 字节的只读存 储器(又称程序存储器 ROM)。 先说说这个 4K 字节的程序存储器或者说只读存储器,我们写的程序经过编译器 编译成机器码都是存在这个区域,所以称为程序存储器;但单片机上电执行的时 候,此区域内的数据只能读取而不能写入,他的只读存储器的名称从这而来。 89c51 的 ROM 采用的是 FPEROM(Flash Programmable and Erasable Read Only Memory),具体工艺我也不太清楚,号称可以擦写 1000 次
[单片机]
51单片机-温度传感器代码解析Ⅱ
1.小于0度的转换 我们知道当测量的实际温度为0度以下时,temp没转换时的情况为下图所示 我们已经知道高5位为1表示的是负数,那么-0.5度的时候为什么是1111 1111 1111 1000。 负数的计算涉及到补码的知识。首先0xFFF8,除去高5位那就是 111 1111 1000 反码为 000 0000 0111 而补码就是反码加1,也就是补码为000 0000 1000 这样0.5就是由补码(十进制的8)乘以0.0625得来。 我们要知道,负数的时候需要关注的是temp的低11位,补码其实就是2的11次方(2048)减去temp的低11位的数值。 -55度的时候,补码为2048-0x0490=880。
[单片机]
<font color='red'>51单片机</font>-温度传感器代码解析Ⅱ
51单片机P3口介绍
P3.0 P3.7为P3口的8位双向口线,第一功能为基本输入/输出;各脚第二功能见下表: P3口内部结构及其功能描述 如图是P2口内部1位的电路结构。 当P3端口使用第一功能(通用I/O口)输出数据时, 第二输出功能 信号应保持高电平,使与非门开锁,此时端口数据锁存器的输出端Q可以控制P3.x引脚上的输出电平; 当P3端口使用第二输出功能时,P3端口对应位的数据锁存器应置1,使与非门开锁,此时 第二输出功能 输出的信号可控制P3.x引脚上的输出电平; 当P3端口作为输入端口时,无论输入的是第一功能还是第二功能的信号,相应位的输出锁存器和 第二输出功能 信号都应保持为1,使下拉驱动器截止;
[单片机]
基于51单片机的CAN总线系统设计
0 引言 随着20世纪80年代初期德国Bosch公司提出CAN(Controller Area Network)总线,即控制器局域网方案以解决汽车控制装置问的通信问题。经过20多年的发展,CAN总线现在广泛的应用在汽车领域,在汽车控制系统中应用CAN总线可以使硬件方案的软件化实现,大大地简化了设计,减小了硬件成本和设计生产成本,数据共享减少了数据的重复处理,节省了成本,可以将信号线减到最少,减少布线,使成本进一步降低等优点。由于CAN总线通信的高性能、高可靠性、及独特的设计和适宜的价格可以广泛应用于工业现场控制、智能楼宇、医疗器械、交通工具以及传感器等领域,所以被公认为是几种最有前途的现场总线之一。 1 系统总体设计 CAN
[单片机]
基于<font color='red'>51单片机</font>的CAN总线系统设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
热门活动
换一批
更多
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

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