lm016l c语言编程,基于MCS51-LM016L (液晶屏)
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 (液晶屏)相关推荐
- r语言 悲观剪枝_《R语言编程—基于tidyverse》新书信息汇总
我之前预告过的 R 语言新书,起名为<R语言编程-基于tidyverse>,本书的目的是为了在国内推广 R 语言和 R 语言最新技术,电子版将始终跟踪最新并免费分享.本书非常适合新手 R ...
- 四路抢答器c语言编程,基于单片机的四路抢答器设计
基于单片机的四路抢答器设计 课程设计(论文) 题 目 名 称 多路数字抢答器设计 课 程 名 称 单片机原理及其应用 学 生 姓 名 学 号 系 .专 业 指 导 教 师 2013年 6月 24日 摘 ...
- c52传感器温度显示c语言编程,基于STC89C52的数字温度计 附C语言代码.doc
基于STC89C52的数字温度计 附C语言代码 <数字显示温度计>论文 学校: 华侨大学 学院: 信息科学与工程学院 班级:10级 集成电路设计与集成系统 组别: 自控06组 组员:*** ...
- 基于DSP的数字振荡器C语言编程,基于DSP的数字振荡器的设计与实现.pdf
1 基于 DSP 的数字振荡器的设计与实现 基于 DSP 的数字振荡器的设计与实现 黄福莹 陈华 徐金隆 广西大学计算机与电子信息学院 南宁 530004 摘要 摘要 本文阐述了一种基于 DSP 芯片 ...
- c语言字母伽马值,液晶屏里面伽马值是做什么用的?
AOC的设置里,那3个伽马是什么意思呀? AOC的设置里,那3个伽马是什么意思呀? 今天刚买了个AOC(冠捷)E936VW 显示器里面设置的3组伽马值,选择的话,色彩会有变化的,一般小编们普通用户是不 ...
- 电子秤c语言编程,基于AT89C51的数字电子秤的设计最终版(样例3)
<基于AT89C51的数字电子秤的设计.doc>由会员分享,可免费在线阅读全文,更多与<基于AT89C51的数字电子秤的设计(最终版)>相关文档资源请在帮帮文库(www.woc ...
- 教务处管理系统c语言编程,基于C语言的教务管理系统的设计
基于C语言的教务管理系统的设计(任务书,开题报告,论文12000字,程序代码) 摘要 教务管理系统是现代化教育的重要组成部分,在现代高校管理中,一个高效的.准确的教务系统不仅能大大提高教学管理效率,还 ...
- GSM/GPRS模块 AT指令集C语言编程——基于有方M660+和MSP430单片机
GSM/GPRS芯片是手机中负责收发短信.拨打电话以及访问GPRS网络的核心器件.有方M660+为深圳有方公司生产的一款超小封装的GSM/GPRS工业无线模块,可以提供高品质的语音.短信.数据业务等功 ...
- 汽车距离报警系统c语言编程,基于单片机的超声波汽车报警系统的设计
目前汽车报警装置已被广泛应用,并种类繁多,但大多报警装置均有其局限性.如早期出现的红外报警系统,最大的缺点是红外线波易受干扰,整个系统的警示音常呈现不稳定的乱鸣状态,另外对深黑色粗糙表面物体的反应也较 ...
最新文章
- 给定一个 n X n 的矩阵 和 R,求旋转 90 X R 度以后的矩阵
- 【转载】JDBC连接各种数据库的字符串
- 第六十一节,html超链接和路径
- Nginx的rewrite应用
- 【每日SQL打卡】​​​​​​​​​​​​​​​DAY 17丨文章浏览 I【难度简单】​
- python-装饰器简介
- ES6新特性_Promise实践练习-多个文件内容读取---JavaScript_ECMAScript_ES6-ES11新特性工作笔记028
- CSS自定义动画@keyframes的使用
- 基于Boost无锁队列实现的内存池
- 一个最简单的SPRINGMVC示例
- EditPlus 3 实现将JSON字符串格式化、排版成JSON格式数据
- java texttospeech_TextToSpeech 文本自动朗读
- 百度SiteApp网站打不开,手机站可以这样搞掂
- matlab混沌指数的计算,matlab实现混沌系统最大李雅普诺夫指数
- python第一个程序:计算体脂率
- Java中内存问题之OOM 和SOF
- 你所不知道的OneNote骚操作 | 告别枯燥 OneNote让数学教学更有趣
- Stream流学习记录
- 来传智播客学到的知识
- dir命令只显示文件名
热门文章
- django-模型类字段类型
- Cloud Toolkit 应用部署、文件上传支持上传进度实时展示
- php实现excel单元格合并,字体加粗居中等操作
- 理解SVN中trunk,branches,tags
- zookeeper、hadoop、hbase单机伪分布式环境搭建(虚拟机vmware)
- 基因疗法真的有效吗?治疗技术前景又如何?
- selenium + python自动化测试unittest框架学习(一)selenium原理及应用
- C++第9周(春)项目5 - 一元一次方程类
- [导入]ASP常用函数:doAlert()
- TypeScript入门教程 之 为什么使用TypeScript