|
最近在网上查资料的时候找到了个LCD1602显示代码,但是我好像看不懂里面p0=dat;代表什么,在前面没有定义p0这个全局变量,也没有指明p0指向那个脚位,我想的是这个是不是指p0^0~p0^7的所有脚位,代码如下(看不懂的那个在写命令和写数据函数里)
/*------------------------
功能:LCD1602显示两行数据
Author: Zhang Kaizhou
Date: 2019-6-3 12:42:22
------------------------*/
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table0[] = {"0123456789ABCDEF"}; // 每行的字符数据
uchar code table1[] = {"0123456789abcdef"};
sbit lcdrs = P1^2; // LCD数据/命令选择端
sbit lcdrw = P1^3; // LCD读写选择端
sbit lcden = P1^4; // LCD使能端,高脉冲有效
uchar num;
void init();
void writeCommand(uchar command);
void delay(uchar xms);
void writeData(uchar dat);
void main()
{
init();
writeCommand(0x80); // 将数据指针定位到第一行的首地址
for(num = 0; num < 16; num++)
{
writeData(table0[num]);
delay(5);
}
writeCommand(0x80 + 0x40); // 将数据指针定位到第二行的首地址
for(num = 0; num < 16; num++)
{
writeData(table1[num]);
delay(5);
}
while(1);
}
/*初始化LCD1602的设置*/
void init()
{
lcden = 0; // 拉低使能端,准备产生使能高脉冲信号
writeCommand(0x38); // 显示模式设置(16x2, 5x7点阵,8位数据接口)
writeCommand(0x0c); // 开显示,不显示光标
writeCommand(0x06); // 写一个字符后地址指针自动加1
writeCommand(0x01); // 显示清零,数据指针清零
}
/*写指令函数*/
void writeCommand(uchar command)
{
lcdrs = 0; // 命令选择
lcdrw = 0;
P0 = command;
delay(5);
lcden = 1; // 产生一个正脉冲使能信号
delay(5);
lcden = 0;
}
/*写数据函数*/
void writeData(uchar dat)
{
lcdrs = 1; // 数据选择
lcdrw = 0;
P0 = dat;
delay(5);
lcden = 1;
delay(5);
lcden = 0;
}
/*延时函数*/
void delay(uchar xms)
{
uint i, j;
for(i = xms; i > 0; i--)
for(j = 110; j > 0; j--);
}
|
-
2.jpg
(168.67 KB, 下载次数: 68)
|