液晶显示屏LCD1602直连STC89C52RC单片机程序
Posted luffy5459
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了液晶显示屏LCD1602直连STC89C52RC单片机程序相关的知识,希望对你有一定的参考价值。
我买的普中-2单片机类型开发板,单片机自带有一排插槽,是留给LCD1602显示用的。
虽然这个插槽正好可以连接上LCD1602,但是因为他的引脚特殊性,有三个引脚,RW,RS,EN需要接到另一排引脚上,如果我们自己接线,引脚随便定义,但是这种一体的,需要我们在写程序的时候注意。
经过我的试验,发现这几个引脚关系如下所示:
sbit RS = P2^6;
sbit RW = P2^5;
sbit EN = P2^7;
也就是说,我们在写代码的时候,虽然不用关心连线,但是这里的几个引脚定义一定要注意,否则液晶显示器可能会点亮,但是并不会显示字符串。
完整的代码:
#include <reg52.h>
#include <intrins.h>
#include <stdio.h>
#include <string.h>
#define uchar unsigned char
#define uint unsigned int
sbit RS = P2^6;
sbit RW = P2^5;
sbit EN = P2^7;
uchar code table1[] = "hello,world!";
uchar code table2[] = "0123456789";
void delay(uint time);
void init_1602(void);
void writecmd(uint cmd);
void writedata(uchar dat);
void display(uchar len,uchar* table);
void main(void)
// Write your code here
delay(10);
init_1602();
delay(5);
writecmd(0x80);
//delay(5);
display(strlen(table1),table1);
writecmd(0x80+0x40);
display(strlen(table2),table2);
while (1)
;
void delay(uint time)
unsigned char a,b,i;
for(i=time;i!=0;i--)
for(b=199;b>0;b--)
for(a=1;a>0;a--);
void init_1602(void)
delay(15);
//¡wwritecmd(0x33);
// writecmd(0x32);
writecmd(0x38); //mode set
writecmd(0x0c); //display set
writecmd(0x06); //display mode
writecmd(0x01); //clear display
void writecmd(uint cmd)
RS = 0;
RW = 0;
P0 = cmd;
EN = 1;
delay(1);
EN = 0;
/*
P1 = (cmd & 0x0f) << 4;
EN = 1;
delay(1);
EN = 0;*/
void writedata(uchar dat)
RS = 1;
RW = 0;
P0 = dat;
EN = 1;
delay(1);
EN = 0;
/*
P1 = (dat & 0x0f) << 4;
EN = 1;
delay(1);
EN = 0;*/
void display(uchar len,uchar* table)
uchar i;
for(i=0;i<len;i++)
writedata(table[i]);
delay(5);
实验现象拍照:
程序就是更改了一下RS,RW,EN引脚的定义,默认P0这一排引脚应该接的就是LCD1602的数据接口D0-D7。所以程序里面需要改变的就是写入指令与数据的地方需要给P0赋值。
这种使用开发板一体的卡槽方式,都不用布线,很省事,但是我们需要搞清楚它的一些引脚的关系,否则LCD1602只能点亮,并不能显示字符串。
以上是关于液晶显示屏LCD1602直连STC89C52RC单片机程序的主要内容,如果未能解决你的问题,请参考以下文章