智能物流仓库控制系统(1)
51单片机为核心,加入温度传感器、红外技术传感器、蜂鸣器、继电器、光照消毒灯等等,进行仓库实时模拟。
第一篇文章首先介绍一下LCD1602吧!
LCD1602就是那个绿色的显示屏,他可以显示一些东西~但在显示之前要把线接好,D0-D7介入P0口,有上拉电阻可以供电,RS、RW、EN分别接入P2.0、P2.1、P2.2
LCD1602选择的是16引脚,VSS和VDD是电源的两端,VDD为正极VSS为负极。V0则是对比调整电压,为了使显示屏的显示清晰,直接选择V0接地,使其处于最清晰的状态。有三个控制状态的引脚,分别是EN 、RW 、RS,不同的状态产生不同的效果,例如当RS低电平,RW与EN都为高电平设置为读状态,RS与RW都为低电平则为写指令,可在D0-D7显示出来,RS、RW和E都为高电平则为读数据,RS为高电平,RW为低电平则是写数据,数据在D0-D7中输出选择自带上拉电阻的P0接口将其对应接起来,如果想让LCD1602可以正常显示,首先要编写LCD1602的初始化程序,定义写指令函数,查询LCD1602的使用手册,分别使此函数输入0x38(设置显示模式)、0x01(清屏)、0x80(设置数据指针起点)、0x0c(开显示不显示光标),之后可以根据定义的写地址、写数据函数来输入想要显示的内容。A、K引脚是控制背光的电源脚。
整点干货吧!上程序。
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
#define LCDPORT P0
sbit RS=P2^0; //定义LCD引脚
sbit RW=P2^1;
sbit EN=P2^2;
void delay1ms(uint z) //延时函数
{
uint i,j;;
for(i=z;i>0;i--)
for(j=110;j>0;j--);
}
void write_com(unsigned char com) //写地址
{
delay1ms(1);
RS=0;
RW=0;
EN=0;
P0=com;
delay1ms(1);
EN=1;
delay1ms(1);
EN=0;
}
void write_dat(unsigned char dat) //写数据
{
delay1ms(1);;
RS=1;
RW=0;
EN=0;
P0=dat;
delay1ms(1);
EN=1;
delay1ms(1);
EN=0;
}
void lcd_init() //lcd初始化
{
delay1ms(15);
write_com(0x38);
delay1ms(5);
write_com(0x08);
delay1ms(5);
write_com(0x01);
delay1ms(5);
write_com(0x06);
delay1ms(5);
write_com(0x0c);
delay1ms(5);
}
void display(unsigned char *p) //显示
{
while(*p!='\0')
{
write_dat(*p);
p++;
delay1ms(1);
}
}
声明上面的 函数,可以直接调用使用 ,写地址的时候要根据下表进行书写,1602就是16位*2有32个可以写地址的地方,可以利用代码进行数据输入
write_com(地址);
write_dat(字符串);
这里的地址写法有很多,一般我会讲第一个位置视为0x80后面的位置则是0x80+0x00、0x01....,字符串可以在最前面定义,在这里直接调用或者直接输入。
00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 0A | 0B | 0C | 0D | 0E | 0F |
40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 4A | 4B | 4C | 4D | 4E | 4F |
这些指令基本可以驱动一个LCD1602进行数字、字母的显示,但是这些显示都是固定的,在后面我们要将温度传感器接收到的输入输入到单片机内,并且利用LCD1602显示出来(如果我不犯懒的话会写的)!
之后还可以利用多个按键进行LCD1602的屏幕切换等等。