Led方阵和串口通信COM2(读取字膜的数据并用LED显示)

Led方阵和串口通信COM2(读取字膜的数据并用LED显示)

Author:Luis
Time:2022-04-06
Version:v2.0

功能

Led88点阵2的双色控制、亮度控制、串口通信控制
1、S11 全亮;S15 全暗;S19 一个暗一个亮;
S10 增加亮度;S14 减少亮度;S18 展示字;
2、串口通信,点亮灯和第几行第几列的灯。

3、通过串口读取字膜的数据并用Led方阵显示

前2个功能参考之前的文章(Led方阵和串口通信COM),此篇只用来实现第3个功能。

效果图:
在这里插入图片描述

环境

Keil和Protues联动调试仿真。

代码

Keil
#include <regx51.h>

// led显示
unsigned int wei[8] = {0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf, 0xbf, 0x7f};    //扫描8位
unsigned int ReData[8] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; // 存储串口数据

unsigned char mode = 0; // 选择模式 通过串口

// 延时n毫秒
void delay_ms(unsigned int n)
{
    unsigned int i = 0, j = 0;
    for (i = 0; i < n; i++)
        for (j = 0; j < 123; j++)
            ;
}

void led_init()
{
    P2 = 0x07;
    P0 = 0x00;
}

// 串口通讯初始化
void Serial_comInit()
{
    SCON = 0x50; //配置SM0/1,并允许接收
    PCON = 0x00;
    TMOD = 0x20; // 设置定时器1 为方式2
    TH1 = 0xfd;  //装入初值 对应波特率9600
    TL1 = 0xfd;
    TR1 = 1; //启动定时器1
    EA = 1;  // 打开总中断开关
    ES = 1;  // 打开串口中断开关
}

// 主程序
void main()
{
    unsigned int i = 0;
    // 初始化
    led_init();
    Serial_comInit();
    P1 = 0x00;
    // 主循环
    while (1)
    {
        if (mode == 1)
        {
            for (i = 0; i < 8; i++)
            {
                P2 = 0x01;
                P0 = wei[i];
                P2 = 0x02;
                P0 = ReData[i];
                delay_ms(50);
            }
        }
    }
}
// 串口通讯 多个数据
void chuankou() interrupt 4
{
    // 0x99 0x5A 0x3C 0xFF 0x18 0x9C 0xB6 0xE3
    // 99 5A 3C FF 18 9C B6 E3
    static char ReceiveCount = 0; // 注意
    ES = 0;
    if (RI)
    {
        ReData[ReceiveCount++] = SBUF;
        if (ReceiveCount >= 8)
            ReceiveCount = 0;
        RI = 0;
        mode = 1;
    }
    ES = 1;
}

Proteus

下面的Protues图请参考之前的文章(Led方阵和串口通信COM),在此就不一一展示了。

主板AT89C52
存器74HC573
按键
Led方阵
串口通信COMPIM

注意点

1、串口读取数据(SBUF)是8位一个个进行读取,循环interrupt 4,所以,在中断中,序号的类型必须是能循环改变的。static或者是全局变量。

未解决的问题

Led方阵显示仿真不能连续看到一个字,而是在刷新,可能实物能够忽略此问题。本人也尝试过改变延迟的时间长度,但是都不尽人意。

如果有大佬在评论区,望能指出代码orProteus图的问题,谢谢!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值