两个单片机通信时数码管不能正常显示
时间:10-02
整理:3721RD
点击:
发送单片机
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit key1=P3^2; //两个独立键盘
sbit key2=P3^4;
uchar a;
void delayms(uint x) //延时程序
{
uint i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
void keyscan() //键盘扫描
{
if(key1==0)
{
delayms(10); //去除抖动延时
if(key1==0)
{
a=0;
while(!key1);
}
}
if(key2==0)
{
delayms(10);
if(key2==0)
{
a=1;
while(!key2);
}
}
SBUF=a; //信息传输给SBUF寄存器
}
void main()
{
TMOD=0x20; // 计时器1的设定
TH1=0xfd;
TL1=0xfd;
TR1=1;
EA=1; // 中断的设定
ES=1;
SM0=0; // 中断工作方式1
SM1=1;
while(1)
keyscan();
}
void ser() interrupt 4 // 进入中断,把TI置零
{
TI=0;
}
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit key1=P3^2; //两个独立键盘
sbit key2=P3^4;
uchar a;
void delayms(uint x) //延时程序
{
uint i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
void keyscan() //键盘扫描
{
if(key1==0)
{
delayms(10); //去除抖动延时
if(key1==0)
{
a=0;
while(!key1);
}
}
if(key2==0)
{
delayms(10);
if(key2==0)
{
a=1;
while(!key2);
}
}
SBUF=a; //信息传输给SBUF寄存器
}
void main()
{
TMOD=0x20; // 计时器1的设定
TH1=0xfd;
TL1=0xfd;
TR1=1;
EA=1; // 中断的设定
ES=1;
SM0=0; // 中断工作方式1
SM1=1;
while(1)
keyscan();
}
void ser() interrupt 4 // 进入中断,把TI置零
{
TI=0;
}
接受单片机
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]={0x3f,0x06,0x5b}; // 数码管显示数字
uchar a;
void main()
{
TMOD=0x20; // 计时器1的设定
TH1=0xfd;
TL1=0xfd;
TR1=1;
EA=1; // 中断的打开
ES=1;
SM0=0; // 中断方式设定为工作方式1,接受
SM1=1;
REN=1;
while(1)
{
a=SBUF; // 把SBUF寄存器中的数据送个P1端口
P1=table[a]; //显示数字
}
}
void ser() interrupt 4 // 进入中断,将RI置零
{
RI=0;
}
第一行是#include<reg51.h>