2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > LCD1602液晶显示屏的字符显示

LCD1602液晶显示屏的字符显示

时间:2020-10-21 15:14:05

相关推荐

LCD1602液晶显示屏的字符显示

仿真图:

以下是代码:

//主函数#include <REGX51.H>//包含单片机寄存器的头文件#include "lcd1602.h"#include "delay.h"void main(void){lcd1602_init();//LCD初始化while(1){lcd1602_char(1,3,'f');lcd1602_string(2,1,"dshal");}}

LCD1602子程序:

//显示字符过程:读状态--写指令--写数据--自动显示#include <REGX51.H>#include "delay.h"#define uchar unsigned char //无符号字符型类型数据#define uint unsigned int //无符号整型数据#define IODATA P0//D0-D7引脚sbit RS=P2^0; //定义rs端口寄存器选择位,将RS位定义为P2.0引脚sbit RW=P2^1; //定义rw端口读写选择位,将RW位定义为P2.1引脚sbit E=P2^2; //定义en端口使能信号位,将E位定义为P2.2引脚/********************************************************************* 功能 : 1602命令函数***********************************************************************/void lcd1602_write_cmd(uchar del){RS = 0;Delay30us();RW = 0;Delay30us();E = 0;Delay30us();IODATA = del;Delay30us();E = 1;Delay30us();E = 0; //E 1->0,rs=0,rw=0, 将指令代码写入指令寄存器中}/********************************************************************* 功能 : 1602写数据函数***********************************************************************/void lcd1602_write_data(uchar del){ Delay30us();RS = 1;Delay30us();RW = 0;Delay30us();E = 0;Delay30us();IODATA = del;Delay30us();E = 1;Delay30us();E = 0; //E 1->0,rs=1,rw=0, 数据写入数据寄存器中}/********************************************************************* 功能 : 1602初始化***********************************************************************/void lcd1602_init(void){Delay20ms();//尚未工作无需判忙lcd1602_write_cmd(0x38); //8位数据,双列,5*7字形Delay20ms();lcd1602_write_cmd(0x38);Delay20ms();lcd1602_write_cmd(0x38);//连续设置3次确保设置成功lcd1602_write_cmd(0x0c); //开启显示屏,关光标,光标不闪烁lcd1602_write_cmd(0x06);//显示地址递增,即写一个数据后,显示位置右移一位lcd1602_write_cmd(0x01); //清屏}/********************************************************************* 功能 : 显示单个字符***********************************************************************/void lcd1602_char(uchar hang,uchar lie,char sign){uchar a;if(hang == 1){a = 0x80;}if(hang == 2){a = 0xc0;}a = a + lie - 1;lcd1602_write_cmd(a);//置数据存贮器地址lcd1602_write_data(sign);}/********************************************************************* 功能 :显示字符串***********************************************************************/void lcd1602_string(uchar hang,uchar lie,uchar *p){uchar a;if(hang == 1){a = 0x80;}if(hang == 2){a = 0xc0;}a = a + lie - 1;while(1){lcd1602_write_cmd(a);lcd1602_write_data(*p);a++;p++; if((*p == '\0')||(a==0x90)||(a==0xd0)) //字符结束或每行最后一个字符{break;}}}

延时子程序:

#include <intrins.h>/****延时30us****/void Delay30us()//@11.0592MHz-40{unsigned char i;i = 11;while (--i);}/****延时20ms****/void Delay20ms()//@11.0592MHz{unsigned char i, j;i = 36;j = 217;do{while (--j);} while (--i);}/****延时1s****/void Delay1s()//@11.0592MHz{unsigned char i, j, k;_nop_();i = 8;j = 1;k = 243;do{do{while (--k);} while (--j);} while (--i);}/****延时zs****/void delay(unsigned int z){ unsigned int i,j;for(i=z;i>0;i--)for(j=110;j>0;j--);}

Proteus仿真中,LCD1602的第三引脚VEE可以不加电位器即可显示字符,如果实物中不能显示可以尝试加一个电位器。

说明:以上代码仅供参考。(有部分代码是在做作品的过程中网上找的,如有侵权,联系删除。)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。