1.原理图:

2.源代码

/*lcd1602

显示16*2个字母或者数字

RS  数据/指令引脚,0代表指令,1代表数据

RW  读/写控制引脚,0代表写,1代表读

E   使能位,1打开,0关闭

D0~D7 数据/地址总线,数据和指令都通过这里传输

先发指令,后发数据

1602操作过程:

1)初始化,指定1602如何显示

2)发送地址,指定数据要显示在屏幕的哪个地方

3)发数据,指定屏幕上显示什么

关于手册:时序图,指令1、2、3、4、6、8、9

*/

#include #define uchar unsigned char

sbit LCD_1602_RS=P2^0;

sbit LCD_1602_RW=P2^1;

sbit LCD_1602_EN=P2^5;

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

函数功能:延时1ms

(3j+2)*i=(3×33+2)×10=1010(微秒),可以认为是1毫秒

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

void delay_1ms()

{

float i,j;

for(i=0;i<4;i++)

for(j=0;j<33;j++)

;

i++;

}

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

函数功能:延时10微妙

程序调用 2us + 子程序返回 2us + R7赋值 1us

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

void delay_10us()

{

unsigned int i = 100;

i--;

i--;

i--;

i--;

i--;

i--;

}

//读忙标志,LCD工作速度较慢,只有它不忙的时候才可以接受单片机的指令

int lcd_1602_busy()

{

uchar tmp;

P0 = 0xff;

LCD_1602_RW = 1;

LCD_1602_RS = 0;

LCD_1602_EN = 1;

delay_10us();

tmp = P0;

LCD_1602_EN = 0;

//强制转换,将一个8位二进制转换成1位的

//bit是位数据

//如果1602忙,那么tmp的最高位是1

return (bit)(0x80 & tmp);

}

void lcd_1602_write_cmd(uchar cmd)

{

//等待1602不忙

while(lcd_1602_busy());

LCD_1602_RW = 0;

LCD_1602_RS = 0;

P0 = cmd;

LCD_1602_EN = 1;

delay_10us();

LCD_1602_EN = 0;

}

void lcd_1602_write_data(uchar dat)

{

while(lcd_1602_busy());

LCD_1602_RW = 0;

LCD_1602_RS = 1;

P0 = dat;

LCD_1602_EN = 1;

delay_10us();

LCD_1602_EN = 0;

}

void lcd_1602_init()

{

lcd_1602_write_cmd(0x01);//指令1,发送清屏指令

lcd_1602_write_cmd(0x0c);//指令4,打开显示开关,没有光标

lcd_1602_write_cmd(0x38);    //指令6,8位总线,双行显示,5*7点阵

lcd_1602_write_cmd(0x05);//指令3,光标左移,屏幕上的字左移

lcd_1602_write_cmd(0x01);//清屏,所有的配置完成之后,需要清屏

delay_1ms();

}

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

{

if(x == 0)

{

lcd_1602_write_cmd(0x80 + y%16);

lcd_1602_write_data(dat);

}

else

{

lcd_1602_write_cmd(0xc0 + y%16);

lcd_1602_write_data(dat);

}

}

void lcd_1602_write_string(uchar x, uchar y, uchar *string)

{

int i=0;

while(i<15-y)

{

lcd_1602_write_char(x, y++, *(string++));

}

}

void delay()

{

int i,j;

for(i=0;i<1000;i++)

for(j=0;j<100;j++);

}

void lcd_1602_write_left(uchar x, int len, char *string)

{

int i = 0;

while(i

{

delay();

lcd_1602_write_string(x, 15-i, string);

i++;

}

}

void main() // 00001 110

{

char str[5]="12345";

lcd_1602_init();

lcd_1602_write_string(0,10, "hello");

lcd_1602_write_char(1, 1, 'a');

lcd_1602_write_left(1, 5, str);

}

3.说明

lcd1602

显示16*2个字母或者数字

RS  数据/指令引脚,0代表指令,1代表数据

RW  读/写控制引脚,0代表写,1代表读

E   使能位,1打开,0关闭

D0~D7 数据/地址总线,数据和指令都通过这里传输

写指令:

RS = 0;

RW = 0;

P0 = 0x01;

delay_10us();

E = 1;

delay_10us();

E = 0;

写数据:

RS = 1;

RW = 0;

P0 = data;

delay_10us();

E = 1;

delay_10us();

E = 0;

读指令:

RS = 0;

RW = 1;

delay_10us();

E = 1;

delay_10us();

temp = P0;

E = 0;

读数据:

RS = 1;

RW = 1;

delay_10us();

E = 1;

delay_10us();

temp = P0;

E = 0;

阅读(1119) | 评论(0) | 转发(0) |

lm016l c语言编程,基于MCS51-LM016L (液晶屏)相关推荐

  1. r语言 悲观剪枝_《R语言编程—基于tidyverse》新书信息汇总

    我之前预告过的 R 语言新书,起名为<R语言编程-基于tidyverse>,本书的目的是为了在国内推广 R 语言和 R 语言最新技术,电子版将始终跟踪最新并免费分享.本书非常适合新手 R ...

  2. 四路抢答器c语言编程,基于单片机的四路抢答器设计

    基于单片机的四路抢答器设计 课程设计(论文) 题 目 名 称 多路数字抢答器设计 课 程 名 称 单片机原理及其应用 学 生 姓 名 学 号 系 .专 业 指 导 教 师 2013年 6月 24日 摘 ...

  3. c52传感器温度显示c语言编程,基于STC89C52的数字温度计 附C语言代码.doc

    基于STC89C52的数字温度计 附C语言代码 <数字显示温度计>论文 学校: 华侨大学 学院: 信息科学与工程学院 班级:10级 集成电路设计与集成系统 组别: 自控06组 组员:*** ...

  4. 基于DSP的数字振荡器C语言编程,基于DSP的数字振荡器的设计与实现.pdf

    1 基于 DSP 的数字振荡器的设计与实现 基于 DSP 的数字振荡器的设计与实现 黄福莹 陈华 徐金隆 广西大学计算机与电子信息学院 南宁 530004 摘要 摘要 本文阐述了一种基于 DSP 芯片 ...

  5. c语言字母伽马值,液晶屏里面伽马值是做什么用的?

    AOC的设置里,那3个伽马是什么意思呀? AOC的设置里,那3个伽马是什么意思呀? 今天刚买了个AOC(冠捷)E936VW 显示器里面设置的3组伽马值,选择的话,色彩会有变化的,一般小编们普通用户是不 ...

  6. 电子秤c语言编程,基于AT89C51的数字电子秤的设计最终版(样例3)

    <基于AT89C51的数字电子秤的设计.doc>由会员分享,可免费在线阅读全文,更多与<基于AT89C51的数字电子秤的设计(最终版)>相关文档资源请在帮帮文库(www.woc ...

  7. 教务处管理系统c语言编程,基于C语言的教务管理系统的设计

    基于C语言的教务管理系统的设计(任务书,开题报告,论文12000字,程序代码) 摘要 教务管理系统是现代化教育的重要组成部分,在现代高校管理中,一个高效的.准确的教务系统不仅能大大提高教学管理效率,还 ...

  8. GSM/GPRS模块 AT指令集C语言编程——基于有方M660+和MSP430单片机

    GSM/GPRS芯片是手机中负责收发短信.拨打电话以及访问GPRS网络的核心器件.有方M660+为深圳有方公司生产的一款超小封装的GSM/GPRS工业无线模块,可以提供高品质的语音.短信.数据业务等功 ...

  9. 汽车距离报警系统c语言编程,基于单片机的超声波汽车报警系统的设计

    目前汽车报警装置已被广泛应用,并种类繁多,但大多报警装置均有其局限性.如早期出现的红外报警系统,最大的缺点是红外线波易受干扰,整个系统的警示音常呈现不稳定的乱鸣状态,另外对深黑色粗糙表面物体的反应也较 ...

最新文章

  1. 给定一个 n X n 的矩阵 和 R,求旋转 90 X R 度以后的矩阵
  2. 【转载】JDBC连接各种数据库的字符串
  3. 第六十一节,html超链接和路径
  4. Nginx的rewrite应用
  5. 【每日SQL打卡】​​​​​​​​​​​​​​​DAY 17丨文章浏览 I【难度简单】​
  6. python-装饰器简介
  7. ES6新特性_Promise实践练习-多个文件内容读取---JavaScript_ECMAScript_ES6-ES11新特性工作笔记028
  8. CSS自定义动画@keyframes的使用
  9. 基于Boost无锁队列实现的内存池
  10. 一个最简单的SPRINGMVC示例
  11. EditPlus 3 实现将JSON字符串格式化、排版成JSON格式数据
  12. java texttospeech_TextToSpeech 文本自动朗读
  13. 百度SiteApp网站打不开,手机站可以这样搞掂
  14. matlab混沌指数的计算,matlab实现混沌系统最大李雅普诺夫指数
  15. python第一个程序:计算体脂率
  16. Java中内存问题之OOM 和SOF
  17. 你所不知道的OneNote骚操作 | 告别枯燥 OneNote让数学教学更有趣
  18. Stream流学习记录
  19. 来传智播客学到的知识
  20. dir命令只显示文件名

热门文章

  1. django-模型类字段类型
  2. Cloud Toolkit 应用部署、文件上传支持上传进度实时展示
  3. php实现excel单元格合并,字体加粗居中等操作
  4. 理解SVN中trunk,branches,tags
  5. zookeeper、hadoop、hbase单机伪分布式环境搭建(虚拟机vmware)
  6. 基因疗法真的有效吗?治疗技术前景又如何?
  7. selenium + python自动化测试unittest框架学习(一)selenium原理及应用
  8. C++第9周(春)项目5 - 一元一次方程类
  9. [导入]ASP常用函数:doAlert()
  10. TypeScript入门教程 之 为什么使用TypeScript