单片机间的串口通讯
留意:
将两单片机的RXD和TXD穿插衔接,并GND共地…
程序功用:
发送单片机发送0至F 16字符在接纳单片机数码管显现;
///发送单片机的程序#includevoid delay() //X毫秒{uint i,j;for(i=10;i>0;i--)for(j=110;j>0;j--);}void send(uchar key_num){SBUF=key_num;while(!TI);TI=0;}void keyscan(){uchar temp,key;P1=0xfe;temp=P1;temp=temp&0xf0;if(temp!=0xf0){delay();temp=P1;temp=temp&0xf0;if(temp!=0xf0){temp=P1;switch(temp){case 0xee:key=0;break;case 0xde:key=1;break;case 0xbe:key=2;break;case 0x7e:key=3;break;}while(temp!=0xf0){ temp=P3;temp=temp&0xf0;}send(key);}}P1=0xfd;temp=P1;temp=temp&0xf0;if(temp!=0xf0){delay();temp=P1;temp=temp&0xf0;if(temp!=0xf0){temp=P1;switch(temp){case 0xed:key=4;break;case 0xdd:key=5;break;case 0xbd:key=6;break;case 0x7d:key=7;break;}while(temp!=0xf0){ temp=P3;temp=temp&0xf0;}send(key);}}P1=0xfb;temp=P1;temp=temp&0xf0;if(temp!=0xf0){delay();temp=P1;temp=temp&0xf0;if(temp!=0xf0){temp=P1;switch(temp){case 0xeb:key=8;break;case 0xdb:key=9;break;case 0xbb:key=10;break;case 0x7b:key=11;break;}while(temp!=0xf0){ temp=P3;temp=temp&0xf0;}send(key);}}P1=0xf7;temp=P1;temp=temp&0xf0;if(temp!=0xf0){delay();temp=P1;temp=temp&0xf0;if(temp!=0xf0){temp=P1;switch(temp){case 0xe7:key=12;break;case 0xd7:key=13;break;case 0xb7:key=14;break;case 0x77:key=15;break;}while(temp!=0xf0){ temp=P3;temp=temp&0xf0;}send(key);}}}void main(){TMOD=0x20;TH1=0xfd;TL1=0xfd;TR1=1;SM0=0;SM1=1;EA=1;ES=1;while(1){keyscan();}}
接纳单片机的程序
#include#define uint unsigned int#define uchar unsigned charuchar code tabled[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};void display(uchar num){P0=tabled[num]; //数码管段选 P0口;P2=0; //数码管位选;}void main(){TMOD=0x20;TH1=0xfd;TL1=0xfd;TR1=1;REN=1;SM0=0;SM1=1;EA=1;ES=1;while(1);}void ser() interrupt 4{uchar a;RI=0;a=SBUF;display(a);}