单片机双机通信(C51程序)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机双机通信(C51程序)
/*发送程序连线:两个单片机用3 根线连起来,要共地,rxd,txd 要交叉连接
程序效果:通过主机发送,从机接收在主机中通过记下按键按下的次数,主机
中显示最后按下的六个数值,并发送给从机,从机也显示这六个数值*/
#includereg52.h //头文件#includeintrins.h //循环移位文件#define uchar unsigned char//宏定义#define uint unsigned intsbit key1=P3 ; //位声明uchar code table[] ={0X00,0x3f,0x06,0x5b,//数码管显示的数值0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; uchar table_tr[6];//暂存最后按下的六个数值uchar count,cnt;//延时子函数,用于
数码管显示void delay(uchar i){ uchar x,y; for(x=i;x0;x--) for(y=110;y0;y--);}//初始
化子函数void init(){ TMOD=0x20;//T1 工作在方式2 TH1=0XF4;//波特率为
4.8kbit/s TL1=0XF4; TR1=1;//启动定时器1 SCON=0X50;//串口工作在方式1,
允许接收}//显示子函数void display(){ uchar i,j;//定义局部变量j=0x7f; //赋初
值for(i=0;i6;i++) { P2=j; //点亮最右边的数码管P0=table[table_tr[i]]; //显示该数
值delay(10); //延时,便于眼睛看清j=_cror_(j,1);//循环右移一位}}//按键扫描
子函数void key_scan(){ if(key1==0) //判断是否有按键按下{ while(!key1) //等待
按键松手{ display();//防止掉显} cnt++; //加1,用于显示SBUF=cnt;//送给缓
冲区,发送while(!TI); //等待发送完TI=0; //发送完了,标志位清零
for(count=0;count5;count++) //用于保存最后按下的六个按键数值{ table_tr[count] =table_tr[count+1]; } table_tr[5]=cnt; //把最后按下的按键数值赋给table_tr【5】
if(cnt==10) //按键按下的次数有没有等于10 cnt=0;//等于,则清零}}void main() { init(); //调用初始化子函数P0=0x00; while(1) { key_scan(); //调用键盘扫描子函
数display();//调用显示子函数} }tips:感谢大家的阅读,本文由我司收集整编。
仅供参阅!