1
完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
代码和仿真图如下,求各位帮忙看看是什么问题,谢谢。
主机代码 #include #include #include #define uchar unsigned char #define uint unsigned int uchar key_bpard; uchar D_ADDR; /********************************************************************/ void delay(uint tt) { uchar i; for(;tt>0;tt--) { for(i=0;i<2;i++); } } /********************************************************************/ uchar GET_KEY(void) { uchar lin_on,lin_tw; P1=0XF0; if((P1&0x0f)!=0xf0) { delay(20); if((P1&0x0f)!=0xf0) { lin_on=0xfe; while((lin_on&0x10)!=0) { P1=lin_on; if((P1&0XF0)!=0XF0) { lin_tw=(P1&0XF0)|0X0F; return((~lin_tw)+(~lin_on)); } else { lin_on=(lin_on<<1)|0x01; } } } } return(0); } /********************************************************************/ void CHOSE_key(void) { uchar i; P1=0XF0; if((P1&0x0f)!=0xf0) { i=GET_KEY(); P1=0XF0; while((P1&0xf0)!=0xf0); } switch(i) { case 136:key_bpard=1; break; case 72:key_bpard=2; break; case 40:key_bpard=3; break; case 24:key_bpard=4; break; case 132:key_bpard=5; break; case 68:key_bpard=6; break; case 36:key_bpard=7; break; case 20:key_bpard=8; break; case 130:key_bpard=9; break; case 66:key_bpard=0; break; case 34:break; case 18:break; case 129:break; case 65:break; case 33:D_ADDR=0x02;break; case 17:D_ADDR=0x01;break; } } void send_buf(void) { SBUF=D_ADDR; while(!ti); TI=0; SBUF=key_bpard; while(!TI); TI=0; delay(3000); } void main(void) { IP=0x00; TMOD = 0x21; /*定时器1工作方式2;定时器0工作方式0*/ SCON = 0x50; /*串口工作方式1,接收允许*/ PCON = 0x00; /*波特率 不 加倍*/ TH1 = 0xFD; /*波特率 9600*/ TL1 = 0xFD; TR1 = 1;/*定时器1开*/ PS = 1; /*串口中断优先级 高*/ EA = 1; /*开总中断*/ //ES = 1; /*开串口中断*/ while(1) { CHOSE_key(); send_buf(); } } void dushu(void) interrupt 4 using 1 //串口接收中断 { while(RI==0); P2=SBUF; RI=0; } 从机1代码 #include #include #include #define uchar unsigned char #define uint unsigned int uchar count; uchar rbuf[3]; uchar KEY_BORD; uchar tab[10]={0x40,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x00,0x98}; /********************************************************************/ void delay(uint tt) { uchar i; for(;tt>0;tt--) { for(i=0;i<2;i++); } } void main(void) { IP=0x00; TMOD = 0x21; /*定时器1工作方式2;定时器0工作方式0*/ SCON = 0x50; /*串口工作方式1,接收允许*/ PCON = 0x00; /*波特率 不加倍*/ TH1 = 0xFD; /*波特率 9600*/ TL1 = 0xFD; TR1 = 1;/*定时器1开*/ PS = 1; /*串口中断优先级 高*/ EA = 1; /*开总中断*/ ES = 1; /*开串口中断*/ while(1) { KEY_BORD=P1; delay(2); P2=tab[rbuf[1]]; } } void dushu(void) interrupt 4 using 1 //串口接收中断 { while(RI==0); rbuf[count]=SBUF; RI=0; if(rbuf[0]==0x01) { count=count+1; if(count>1) { count=0; SBUF=KEY_BORD; while(!TI); TI=0; } } else { count=0; } } 从机2代码 #include #include #include #define uchar unsigned char #define uint unsigned int uchar count; uchar rbuf[3]; uchar KEY_BORD; uchar tab[10]={0x40,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x00,0x98}; /********************************************************************/ void delay(uint tt) { uchar i; for(;tt>0;tt--) { for(i=0;i<2;i++); } } void main(void) { IP=0x00; TMOD = 0x21; /*定时器1工作方式2;定时器0工作方式0*/ SCON = 0x50; /*串口工作方式1,接收允许*/ PCON = 0x00; /*波特率 不加倍*/ TH1 = 0xFD; /*波特率 9600*/ TL1 = 0xFD; TR1 = 1;/*定时器1开*/ PS = 1; /*串口中断优先级 高*/ EA = 1; /*开总中断*/ ES = 1; /*开串口中断*/ while(1) { KEY_BORD=P1; delay(2); P2=tab[rbuf[1]]; } } void dushu(void) interrupt 4 using 1 //串口接收中断 { while(RI==0); rbuf[count]=SBUF; RI=0; if(rbuf[0]==0x02) { count=count+1; if(count>1) { count=0; SBUF=KEY_BORD; while(!TI); TI=0; } } else { count=0; } }
|
|
相关推荐
3个回答
|
|
去掉一个从机的串口线,只连接一个从机
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
386 浏览 0 评论
求助一下关于51系列单片机的Timer0的计时问题,TH0、TL0+1的时间是怎么算的?
1670 浏览 1 评论
【RA-Eco-RA4E2-64PIN-V1.0开发板试用】开箱+Keil环境搭建+点灯+点亮OLED
1123 浏览 0 评论
【敏矽微ME32G070开发板免费体验】使用coremark测试敏矽微ME32G070 跑分
1005 浏览 0 评论
【敏矽微ME32G070开发板免费体验】开箱+点灯+点亮OLED
1229 浏览 2 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12018 浏览 31 评论
小黑屋| 手机版| Archiver| 德赢Vwin官网 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 12:13 , Processed in 0.816656 second(s), Total 97, Slave 71 queries .
Powered by 德赢Vwin官网 网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
德赢Vwin官网 观察
版权所有 © 湖南华秋数字科技有限公司
德赢Vwin官网 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号