m0_51367278 2023-02-25 20:38 采纳率: 80%
浏览 49
已结题

甲乙采用方式1双向串行通讯

问题1:甲机的k1按键可通过串行口控制工乙机的LED1点亮、LED2灭,甲机的k2按键控制乙机的LED1 灭、LED2点亮,甲机的k3按键控制乙机的LED1和 LED2全亮
问题2:
乙机的k4按键可控制串行口向甲机发送k4按键按下的次数,并显示在甲机PO口的数码管上。

  • 写回答

2条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-02-25 22:12
    关注
    • 这篇博客: 甲、乙机之间采用方式 1 双向串行通信,具体要求如下: (1)甲机的 k1 按键可通过串行口控制乙机的 LEDI 点亮、LED2 灭,甲机的 k2 按键控制 乙机的 LED1中的 以下是实验代码(分甲乙两机程序 不会编写请移步资源下载 里边是全部代码和仿真文件) 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    • //甲机
      #include<reg51.h>
      unsigned char j=10;
      char sign=1;
      sbit P10=P1^0;
      sbit P11=P1^1;
      sbit P12=P1^2;
      void delay(unsigned char k){
      	unsigned char i,j,h;
      	for(h=0;h<k;h++){
      		for(i=0;i<25;i++){
      			for(j=0;j<20;j++);
      		}
      	}
      }
      void twoDigitDisplay(unsigned char num,unsigned char time,unsigned char portNumber){
      	unsigned char box[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0xf82,0xf8,0x80,0x90};
      	unsigned char k;
      	if(portNumber==0){
      		if(num<0||num>99||time<0){
      			for(k=0;k<40;k++){
      				P2=0x00;
      			}	
      		}else{		
      			for(k=0;k<time;k++){
      				unsigned char numR = num%10;
      				unsigned char numL = num/10;
      				P2=0x11;
      				P0=box[numL];
      				delay(12);
      				P2=0x22;
      				P0=box[numR];
      				delay(12);
      			}
      		}
      	}	
      }
      void main(){
      	unsigned char sum=0;
      	TR0=1;
      	EA=1;
      	ET0=1;
      	TMOD=0x21;
      	TH0=0xee;
      	TL0=0x00;
      	
      	while(1){
      		if(sign==1){
      			//执行数据发送
      			TR1=1;
      			TMOD=0x20;
      			TL1=0xfd;
      			TH1=0xfd;
      			SCON=0x40;
      			PCON=0x00;
      		}
      		while(sign==1){
      			//发送数据SBUF
      			if(P10==0){SBUF=0xfe;while(TI==0);TI=0;continue;}				
      			if(P11==0){SBUF=0xfd;while(TI==0);TI=0;continue;}				
      			if(P12==0){SBUF=0xfc;while(TI==0);TI=0;continue;}				
      			SBUF=0xff;
      		}
      		if(sign==-1){
      			//执行数据接收
      			TR1=1;
      			TL1=0xfd;
      			TH1=0xfd;
      			SCON=0x50;
      			PCON=0x00;
      		}
      		while(sign==-1){
      			//接收数据SBUF
      			if(SBUF==0xf0){
      				sum++;
      				twoDigitDisplay(sum,5,0);
      			}
      			if(SBUF==0x0f){
      				twoDigitDisplay(sum,5,0);
      			}
      		}
      	}
      }
      void int0() interrupt 1 {
      	j--;
      	if(j==0){
      		TF0=0;
      		TH0=0xee;
      		TL0=0x00;
      		sign=sign*(-1);			
      		j=10;					
      	}	
      }
      
      //乙机
      #include<reg51.h>
      unsigned char j=10;
      char sign=1;
      sbit P10=P1^0;
      void main(){
      	unsigned char increment=0;
      	TR0=1;
      	EA=1;
      	ET0=1;
      	TMOD=0x21;
      	TH0=0xee;
      	TL0=0x00;
      	if(sign==1){
      		//执行数据接收
      		TR1=1;
      		TL1=0xfd;
      		TH1=0xfd;
      		TMOD=0x20;
      		SCON=0x50;
      		PCON=0x00;
      	}
      	while(sign==1){
      		//接收数据SBUF
      		P2=SBUF;
      	}
      	if(sign==-1){
      		//执行数据发送
      		TR1=1;
      		TL1=0xfd;
      		TH1=0xfd;
      		SCON=0x40;
      		PCON=0x00;
      	}
      	while(sign==-1){
      		//发送数据SBUF
      		if(P10==0){
      			SBUF=0xf0;
      			while(TI==0);TI=0;
      		}else{
      			SBUF=0x0f;
      			while(TI==0);TI=0;
      		}
      	}
      }
      void int0() interrupt 1 {
      	j--;
      	if(j==0){
      		TF0=0;
      		TH0=0xee;
      		TL0=0x00;
      		sign=sign*(-1);			
      		j=10;					
      	}	
      }
      
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 3月9日
  • 已采纳回答 3月1日
  • 创建了问题 2月25日

悬赏问题

  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 下图接收小电路,谁知道原理
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭