找回密码
 立即注册

QQ登录

只需一步,快速开始

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

RTX51 3个IO口+74HC595驱动LCD1602液晶版本 单片机程序+仿真

[复制链接]
跳转到指定楼层
楼主
参考完全使用单片机3个IO口+74HC595驱动LCD1602液晶的源程序http://www.51hei.com/bbs/dpj-114268-1.html
使用RTX51 改进了一个版本。

仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)



主要区别的核心代码:
#include "HS595.h"

unsigned char HS595_data;        //HS595的输出数据
/*
0位 RS
1位 RW
2位 E

3位 D4
4位 D5
5位 D6
6位 D7
*/

//向HC595发送串行数据
void HC595SendData(unsigned char SendVal)
{
    unsigned char i;

    HS595_ST_CP=0;         //停止输出

    for(i=0; i<8; i++)
    {
        if((SendVal<<i)&0x80)         //0X80  最高位与SendVal左移的最高位 进行逻辑运算
            HS595_DS=1;                                         //如果为真 HS595_DS= 1
        else
            HS595_DS=0;           //如果为假 HS595_DS= 0

        //产生数据移位信号
        HS595_SH_CP=0;
        _nop_();   //短暂延时产生一定宽度的脉冲信号
        _nop_();   //短暂延时
        HS595_SH_CP=1;

    }

    //产生数据输出信号
    _nop_();          //短暂延时
    _nop_();          //短暂延时
    _nop_();
    HS595_ST_CP=1;         //总体输出
}

void SetRS(bit state)
{
    if(state)
    {
        HS595_data|=0x01;        //置1
    } else
    {
        HS595_data&=0xFE;        //置0
    }               
}

void SetRW(bit state)
{
    if(state)
    {
        HS595_data|=0x02;        //置1
    } else
    {
        HS595_data&=0xFD;        //置0
    }
}

void SetE(bit state)
{
    if(state)
    {
        HS595_data|=0x04;        //置1
    } else
    {
        HS595_data&=0xFB;        //置0
    }
}

//发送低四位
void SetDataL(unsigned char in_data)
{
                volatile unsigned char r3;
                r3=(in_data<<3);                                //左移3位
                HS595_data&= 0x07;                        //清除其他位,保留0~2位
                HS595_data|=r3&0x78;    //写入数据到3~6位
}

//发送高四位
void SetDataH(unsigned char in_data)
{
                volatile unsigned char l4;
                l4=(in_data>>4);                                //右移4位
                l4=l4<<3;                                                                //左移3位
                HS595_data&= 0x07;                        //清除其他位,保留0~2位
                HS595_data|=l4&0x78;    //写入数据到3~6位
}

void SendData(void)
{
        HC595SendData(HS595_data);
}

全部资料51hei下载地址:
RTX51 LCD1602 74HC595 V1.0.rar (133.96 KB, 下载次数: 33)

评分

参与人数 1黑币 +100 收起 理由
admin + 100 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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