完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
两单片机通信,STC15F2k60s2作为主机,STC80C52RC作为从机,操作主机,从机数据传输不对应,求解
主机程序 #include #define uchar unsigned char #define uint unsigned int ***it buzzer=P4^1; void delayms(uint xms) { uint i,j; for(i=xms;i>0;i--) //i=xms即延时约xms毫秒 for(j=110;j>0;j--); } /************蜂鸣器*****************/ void di() { buzzer=0; delayms(60); buzzer=1; } void send(uchar key_num) { // di(); SBUF=key_num; while(!ti); TI=0; } void matrixkeyscan() { uchar temp,key; P1=0xfe; temp=P1; temp=temp&0xf0; if(temp!=0xf0) { delayms(10); temp=P1; temp=temp&0xf0; if(temp!=0xf0) { temp=P1; switch(temp) { case 0xee: key=1; break; case 0xde: key=2; break; case 0xbe: key=3; break; case 0x7e: key=4; break; } while(temp!=0xf0) { temp=P1; temp=temp&0xf0; } // di(); send(key); } } P1=0xfd; temp=P1; temp=temp&0xf0; if(temp!=0xf0) { delayms(10); temp=P1; temp=temp&0xf0; if(temp!=0xf0) { temp=P1; switch(temp) { case 0xed: key=5; break; case 0xdd: key=6; break; case 0xbd: key=7; break; case 0x7d: key=8; break; } while(temp!=0xf0) { temp=P1; temp=temp&0xf0; } send(key); } } P1=0xfb; temp=P1; temp=temp&0xf0; if(temp!=0xf0) { delayms(10); temp=P1; temp=temp&0xf0; if(temp!=0xf0) { temp=P1; switch(temp) { case 0xeb: key=9; break; case 0xdb: key=10; break; case 0xbb: key=11; break; case 0x7b: key=12; break; } while(temp!=0xf0) { temp=P1; temp=temp&0xf0; } send(key); } } P1=0xf7; temp=P1; temp=temp&0xf0; if(temp!=0xf0) { delayms(10); temp=P1; temp=temp&0xf0; if(temp!=0xf0) { temp=P1; switch(temp) { case 0xe7: key=13; break; case 0xd7: key=14; break; case 0xb7: key=15; break; case 0x77: key=16; break; } while(temp!=0xf0) { temp=P1; temp=temp&0xf0; } send(key); } } } void main() { TI=0; TMOD=0x20;//设置定时器1为工作方式2 SCON=0x50; AUXR=0x00; TH1=0xfd; //波特率设置为9600 TL1=0xfd; TR1=1; EA=1; ES=1; while(1) { matrixkeyscan();//不停调用键盘扫描程序 } } 从机程序: #include #define uchar unsigned char #define uint unsigned int ***it dula=P2^6; ***it wela=P2^7; ***it buzzer=P2^3; uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; void delayms(uint xms) { uint i,j; for(i=xms;i>0;i--) //i=xms即延时约xms毫秒 for(j=110;j>0;j--); } /************蜂鸣器*****************/ void di() { buzzer=0; delayms(60); buzzer=1; } void display(uchar num) { P0=table[num]; dula=1; dula=0; // di(); } void main() { TMOD=0x20; SCON=0x50; PCON=0x80; //AUXR=0x00; TH1=0xfd; TL1=0xfd; TR1=1; SM0=0; SM1=1; REN=1; EA=1; ES=1; P0=0xc0; wela=1; wela=0; P0=table[10]; //di(); while(1); } void serial() interrupt 4 { uchar a; //di(); RI=0; a=SBUF; display(a); } |
|
相关推荐
2个回答
|
|
问题重点不突出。
|
|
|
|
请问啥叫不对应,如何理解
|
|
|
|
只有小组成员才能发言,加入小组>>
3319 浏览 9 评论
2997 浏览 16 评论
3495 浏览 1 评论
9065 浏览 16 评论
4088 浏览 18 评论
1185浏览 3评论
611浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
601浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2337浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1898浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-25 18:23 , Processed in 1.075079 second(s), Total 80, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号