微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 求教:关于51单片机连接1602显示屏IO口的问题

求教:关于51单片机连接1602显示屏IO口的问题

时间:10-02 整理:3721RD 点击:
1602显示屏使用说明如图:



但是为了方便连接PCB,我是这样画的:


IO口不是从1.0连到1.7,而是从1.7连到1.0。像这样画的话,1602可以工作吗,单片机是STC89C52;这样连需不需要在程序上做修改。

刚好在做的项目有相关的部分,我用的是STC12C5410AD,数据总线和你连接的一模一样,留个邮箱,如果今天有空我把文件发给你,改一下引脚定义就可以直接用。

#ifndef _LCD1602_H_
#define _LCD1602_H_
#include "reg51.h"
#include "intrins.h"
#define NOP _nop_()
#define GPIO_LCD P1
#define WAIT()         NOP,NOP,NOP,NOP;
#define LCD_WRITE  0
#define LCD_READ   1
#define LCD_DAT    1
#define LCD_CMD    0

sbit RW = P2^1;
sbit RS = P3^7;
sbit EN = P2^0;

void LcdInit(void);
extern void Lcd1602WriteData(unsigned char Data);
extern void Lcd1602WriteCommand(unsigned char Command);
static void Delay(void);
void Lcd1602WriteCommand(unsigned char Command)
{
        unsigned char i;
        unsigned char Lcd;
        RS = LCD_WRITE;
        WAIT();
        RW = LCD_CMD;
        WAIT();
        for(i = 0;i < 8;i++)
        {
                Lcd<<=1;
                Lcd |= Command&0x01;
                Command>>=1;
        }
        GPIO_LCD = Lcd;
        EN = 1;       
        Delay();
        EN = 0;          
}
void Lcd1602WriteData(unsigned char Data)
{
        unsigned char i;
        unsigned char Lcd;
        RS = LCD_DAT;
        WAIT();
        RW = LCD_WRITE;
        WAIT();
        for(i = 0;i < 8;i++)
        {
                Lcd<<=1;
                Lcd |= Data&0x01;
                Data>>=1;
        }
        GPIO_LCD = Lcd;
        EN = 1;       
        Delay();
        EN = 0;
}

static void Delay(void)
{
        unsigned char i, j;
        _nop_();
        i = 11;
        j = 19;
        do
        {
                while (--j);
        } while (--i);
}
void LcdInit(void)
{
        Lcd1602WriteCommand(0x38);        //16*2,8位数据接口
        Lcd1602WriteCommand(0x0c);        //开启显示,光标不显示、不闪烁
        Lcd1602WriteCommand(0x40);        //数据指针自增1,字符不移动
        Lcd1602WriteCommand(0x06);
        Lcd1602WriteCommand(0x01);        //清屏
        Lcd1602WriteCommand(0x80);        //数据指针指向第一行第一个字符
}
//我吧两个文件合在一起了。

如果这样连接的话,代码是需要修改的,相当于,你要把要写的数据进行颠倒顺序,硬件是死的,软件是活的。

66666666666666666666666666666666666666666666666666666666666666666666666666666666666

这个不是给自己找麻烦么?
你需要将输出的数据一个个调换

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top