双机通信c语言程序,双机通信(C语言、主机和从机共用程序)

//头文件

#include//循环移位文件

#define uchar unsigned char//宏定义

#define uint  unsigned int

sbit key1=P3^5;   //位声明

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;x>0;x--)

for(y=110;y>0;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;i<6;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;count<5;count++) //用于保存最后按下的六个按键数值

{

table_tr[count]=table_tr[count+1];

}

table_tr[5]=cnt; //把最后按下的按键数值赋给table_tr【5】

if(cnt==10) //按键按下的次数有没有等于10

cnt=0;//等于,则清零

}

}

void main()

{

uchar i;

init(); //调用初始化子函数

P0=0x00;

while(1)

{

while(RI) //判断是否接受完

{

RI=0;//接受完了,标志位清零

for(i=0;i<5;i++)  //把数组的数值都往前移一位,腾出table_tr【5】

table_tr[i]=table_tr[i+1];

table_tr[5]=SBUF;//装入接收的数值

}

key_scan(); //调用键盘扫描子函数

display();//调用显示子函数

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值