找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3558|回复: 9
打印 上一主题 下一主题
收起左侧

单片机LCD1602显示代码p0代表什么?

[复制链接]
跳转到指定楼层
楼主
ID:890186 发表于 2021-3-10 12:58 来自手机 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
    最近在网上查资料的时候找到了个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)

2.jpg
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:584814 发表于 2021-3-10 19:46 | 只看该作者
同一个问题你打算循环几次
回复

使用道具 举报

板凳
ID:283908 发表于 2021-3-10 20:08 | 只看该作者
貌似一个很菜的问题,其实是一个纠结单片机初学者对单片机数据传输方式的问题。

单片机数据传输有串行传输,并行传输,I2C总线传输,CAN总线等传输方式。


就上图LCD1602液晶与单片机的连接方式是并行连接。

也就是单片机P0口的8位I/O口直接与LCD1602的8个数据位连接.

回复

使用道具 举报

地板
ID:517951 发表于 2021-3-10 20:25 | 只看该作者
前面没有定义p0这个全局变量,也没有指明p0指向那个脚位 : 这些都包含在reg52.h这个头文件里了
回复

使用道具 举报

5#
ID:890186 发表于 2021-3-10 22:09 | 只看该作者
man1234567 发表于 2021-3-10 19:46
同一个问题你打算循环几次

这个,我第一次发,不懂,以为没发成功然后又发了一次,后来才知道要换电脑吧才能看到
回复

使用道具 举报

6#
ID:858964 发表于 2021-3-10 22:54 | 只看该作者
是的:
P0 即 p0^0~p0^7
P1 即 p1^0~p1^7
P2 即 p2^0~p2^7
回复

使用道具 举报

7#
ID:568565 发表于 2021-3-10 23:52 来自手机 | 只看该作者
P0就是单片机整个P0口,你给它赋值它会以八位二进制方式传给1602
回复

使用道具 举报

8#
ID:390416 发表于 2021-3-11 10:41 | 只看该作者
LCD1602显示℃ 这种自定义符号 http://www.51hei.com/bbs/dpj-200685-1.html
回复

使用道具 举报

9#
ID:889832 发表于 2021-3-11 15:52 | 只看该作者
数据输入端,
回复

使用道具 举报

10#
ID:95809 发表于 2021-3-11 16:59 来自手机 | 只看该作者
p0代表数据从P0口传输,既P0.0——P0.7,如果你需要用P2口传输,就改成P2就可以了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表