标题: 我想通过串口通信来改变数码管的显示 [打印本页]

作者: kaixinjiuhao    时间: 2017-4-1 17:59
标题: 我想通过串口通信来改变数码管的显示
现在的问题是:如果我成功显示了数字2,但是我在不复位的情况下,不能再次通过串口通信来让数码管显示数字3。希望大家教我一下。谢谢大家!!



#include <reg52.h>
#define uchar unsigned char
#define uint  unsigned int
sbit du=P2^6;
sbit we=P2^7;
uchar a;
char code table []={0x3f,0x06,0x5b,0x4f,0x66,0x6d,     0x7d,0x07,0x7f,0x6f,0x77,0x7c,     0x39,0x5e,0x79,0x71};

void main()
{
        SCON=0X50;
        PCON=0x00;
        TMOD=0X20;
        EA=1;
        ES=1;
        TL1=0Xfd;
        TH1=0Xfd;
        TR1=1;
        du=0;
        we=0;       

        while(1) ;
}

void zhongduan() interrupt 4
{
        ES=0;
        RI=0;
        a=SBUF;

        we=1;
        P0=0x00;
        we=0;
        P0=0xff;
        du=1;
        P0=table[a];
        du=0;

        EA=1;
}


QQ截图20170401123806.png (270.03 KB, 下载次数: 95)

这是原理图

这是原理图

作者: imxuheng    时间: 2017-4-1 20:15
a=SBUF;
while(!RI);-//-等待数据接收完成,RI=1了,说明数据接收完成了,就不等待了,往下执行
RI=0;//置位标识符
作者: kaixinjiuhao    时间: 2017-4-1 20:38
imxuheng 发表于 2017-4-1 20:15
a=SBUF;
while(!RI);-//-等待数据接收完成,RI=1了,说明数据接收完成了,就不等待了,往下执行
RI=0;// ...

那有什么方式可以让他在显示完2之后,再次传送数字3,数码管由2变为3
作者: zl2168    时间: 2017-4-1 21:16
本帖最后由 zl2168 于 2017-4-1 21:18 编辑

双机串行通信方式1
Proteus仿真一下,确认有效。
实例77 双机通信方式1.rar (40.4 KB, 下载次数: 48)

以上摘自张志良编著80C51单片机仿真设计实例教程——基于Keil CProteus》清华大学出版社ISBN 978-7-302-41682-1内有常用的单片机应用100案例,用于仿真实验操作,电路与程序真实可靠可信可行书中电路和程序设计有详细说明,程序语句条条有注解。

作者: zl2168    时间: 2017-4-1 21:19
双机串行通信方式2
Proteus仿真一下,确认有效。
实例78 双机通信方式2.rar (46.57 KB, 下载次数: 29)

以上摘自张志良编著80C51单片机仿真设计实例教程——基于Keil CProteus》清华大学出版社ISBN 978-7-302-41682-1内有常用的单片机应用100案例,用于仿真实验操作,电路与程序真实可靠可信可行书中电路和程序设计有详细说明,程序语句条条有注解。

作者: zl2168    时间: 2017-4-1 21:20
本帖最后由 zl2168 于 2017-4-1 21:21 编辑

双机串行通信方式3
Proteus仿真一下,确认有效。
实例79 双机通信方式3.rar (45.3 KB, 下载次数: 43)

以上摘自张志良编著80C51单片机仿真设计实例教程——基于Keil CProteus》清华大学出版社ISBN 978-7-302-41682-1内有常用的单片机应用100案例,用于仿真实验操作,电路与程序真实可靠可信可行书中电路和程序设计有详细说明,程序语句条条有注解。

作者: imxuheng    时间: 2017-4-2 09:00
kaixinjiuhao 发表于 2017-4-1 20:38
那有什么方式可以让他在显示完2之后,再次传送数字3,数码管由2变为3

就是这三句,
void zhongduan() interrupt 4
{
        ES=0;

        a=SBUF;
        while(!RI);-//-等待数据接收完成,RI=1了,说明数据接收完成了,就不等待了,往下执行
        RI=0;//置位标识符

        we=1;
        P0=0x00;
        we=0;
        P0=0xff;
        du=1;
        P0=table[a];
        du=0;

        EA=1;
}
看看行不行




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1