是一道单片机C51程序设计题:设计一个双机通信系统。

两片STC12C5A60S2单片机, 有3个按键,各接LED四位数码管显示各自发送接收结果;如甲机向乙机发送1234,乙机向甲机发送5678。写出C语言程序,不要汇编啊。有急用,万分感谢!

#include<reg52.h> //头文件
#include<intrins.h> //循环文件
#define uchar unsigned char//宏定义
#define uint unsigned int
uchar count,cnt;//定义全局变量
sbit LED2=P3^4;
sbit LED1=P3^5;
sbit key3=P3^6;
sbit key4=P3^7;
sbit buzze=P2^3;
uchar temp,flag1,flag2;
void delay(uchar i)
{
uchar x,y;
for(x=i;x>0;x--)
for(y=110;y>0;y--);
}
void init()
{
TMOD=0x20;//T1工作在方式2
TH1=0XFd; //波特率为:4.8kbit/s,发送与接收的波特率要相等
TL1=0XFd;
TR1=1; //启动定时器1
SCON=0X50;//串口中断工作在方式1,允许接收
EA=1;
ES=1;
}

void key_scan2()
{
cnt=0x55;
SBUF=cnt;
//送给缓冲区,发送
while(!TI); //等待发送完
TI=0;
// flag1=1; //发送完了,标志位清零

delay(5000); //判断是否有按键按下

cnt=0xff;
SBUF=cnt;
//送给缓冲区,发送
while(!TI); //等待发送完
TI=0;
// flag1=1;
delay(5000); //发送完了,标志位清零

}

void main()
{

init(); //调用初始化子函数
while(1)
{
key_scan2();
}

}

void recive() interrupt 4
{
if(RI)
{
RI = 0;
//add your code here!
temp=SBUF;
// P4=temp;
P0=temp;
// LED1=0;
// delay(5000);
// LED1=1;
}
else
TI = 0;
}

#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit key1=P3^5;
sbit key2=P3^4;
uchar count,cnt,flag1,flag2,temp;

void delay(uchar i)
{
uchar x,y;
for(x=i;x>0;x--)
for(y=110;y>0;y--);
}
void init()
{
TMOD=0x20; //T1工作在方式2
TH1=0XFd; //波特率为4.8kbit/s
TL1=0XFd;
TR1=1; //启动定时器1
SCON=0X50; //REN=1; SM0=0;SM1=1;
EA=1;
ES=1;

//串口工作在方式1,允许接收
}
void key_scan2()
{
cnt=0x55;
SBUF=cnt;
//送给缓冲区,发送
while(!TI); //等待发送完
TI=0;
// flag1=1; //发送完了,标志位清零

delay(5000); //判断是否有按键按下

cnt=0xff;
SBUF=cnt;
//送给缓冲区,发送
while(!TI); //等待发送完
TI=0;
// flag1=1;
delay(5000); //发送完了,标志位清零

}
void main()
{
init(); //调用初始化子函数
while(1)
{
key_scan2();
}
}
void UARTInterrupt(void) interrupt 4
{
if(RI)
{
RI = 0;
//add your code here!
temp=SBUF;
P0=temp;

}
else
TI = 0;
}追问

谢谢你的答案!  能具体写一下数码管的显示吗?

追答

#include // 包含52单片机寄存器定义的头文件
void delay(void) //延时函数,延时约0.6毫秒
{
unsigned char i;
for(i=0;i<200;i++)
;//空循环 起延时作用
}
void main(void)
{

P0=0xff; //初始化端口
P2=0xff;//初始化端口
while(1) //无限循环 //假定 数码管从左到右依次是DS0-DS7
{
P2=0xfe; //P2.0引脚输出低电平,DS0点亮
P0=0xf9; //数字1的段码
delay();
P2=0xfd ; //P2.1引脚输出低电平,DS1点亮
P0=0xa4; //数字2的段码
delay();
P2=0xfb; //P2.2引脚输出低电平,DS2点亮
P0=0xb0; //数字3的段码
delay();
P2=0xf7; //P2.3引脚输出低电平,DS3点亮
P0=0x99; //数字4的段码
delay();
P2=0xef; //P2.4引脚输出低电平,DS4点亮
P0=0x92; //数字5的段码
delay();
P2=0xdf ; //P2.5引脚输出低电平,DS5点亮
P0=0x82; //数字6的段码
delay();
P2=0xbf; //P2.6引脚输出低电平,DS6点亮
P0=0xf8; //数字7的段码
delay();
P2=0x7f; //P2.7引脚输出低电平,DS7点亮
P0=0x80; //数字8的段码
delay();
P2=0xff;
}
}
这个是数码管显示的程序
将它作为子函数调用
你将要显示的数码管值shu
send(shu);
while(!TI);

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-11-25
你这个是要单片机设计,当然你是要实现具体的
功能要求的