📄 t.c
字号:
//proteus仿真论坛:proteus.5d6d.com
#include <reg51.h>
#define uchar unsigned char
#define NODE1_ADDR 1
#define NODE2_ADDR 2
bit flag=0;
bit flag_send=0;
uchar KeyValue=0; //键值
uchar code str[]="0123456789ABCDEF";
uchar pointer_1=0;
uchar pointer_2=0;
void delay(uchar Time)
{
uchar i,j;
for(i=0;i<100;i++)
for(j=0;j<Time;j++);
}
uchar key_scan()
{
P1=0xff;
while(P1==0xff);
return P1;
}
void proc_key1()
{
delay(200);
//初始化串行口和波特率发生器
SCON=0xc0;
TMOD=0x20;
TH1=0xfd;
TR1=1; //打开T1
ET1=0; //关闭定时器中断
ES=1; //允许串行口中断
EA=1; //打开所有中断
//发送地址帧
TB8=1;
SBUF=NODE1_ADDR;
while(flag_send==0); //发送完毕
ES=0;
EA=0; //关中断
flag_send=0;
KeyValue=0;
}
void proc_key2()
{
delay(200);
//初始化串行口和波特率发生器
SCON=0xc0;
TMOD=0x20;
TH1=0xfd;
TR1=1; //打开T1
ET1=0; //关闭定时器中断
ES=1; //允许串行口中断
EA=1; //打开所有中断
//发送地址帧
TB8=1;
SBUF=NODE2_ADDR;
while(flag_send==0); //发送完毕
ES=0;
EA=0; //关中断
flag_send=0;
KeyValue=0;
}
main()
{
while(1)
{
KeyValue=key_scan();
switch(KeyValue)
{
case 0xfe: proc_key1();break;
case 0xef: proc_key2();break;
default: break;
}
}
}
//串行中断服务程序
void send(void) interrupt 4 using 3
{
TI=0;
if(flag==1)
{
flag_send=1;
flag=0;
return;
}
else
{
TB8=0;
switch(KeyValue)
{
case 0xfe:
{
SBUF=str[pointer_1];
pointer_1++;
if(pointer_1>=16)
pointer_1=0;
break;
}
case 0xef:
{
SBUF=str[pointer_2];
pointer_2++;
if(pointer_2>=16)
pointer_2=0;
break;
}
default: break;
}
flag=1;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -