📄 main.c
字号:
//main.c
#include <reg51.h> //包含头文件
#include "fun.h"
void Timer0_interrupt() interrupt 1
{
TH0 = T0_50ms >> 8; //重装初值
TL0 = T0_50ms;
if ((++ count_in_T0) == 20)//count_in_T0自加到20,计时1s
{
count_in_T0 = 0;
if ( (++ display_num) ==60)
{//display_num自加1后判断是否等于60
display_num = 0;
//上发过0消息
send(0xf0);
send(0x01);
send(0xf1);
}
}
}
void USART_interrupt() interrupt 4
{
char checkXOR;
if (RI) //接收中断
{
RI = 0;
reciev[rec_num] = SBUF;
rec_num ++;
if ((rec_num == 3) && (reciev[0] == 0x0f) )//接收到3字节,并且包头正确
{
checkXOR = reciev[0] ^ reciev[1];
if (checkXOR == reciev[2] )//如果异或校验正确,判断命令
{
switch (reciev[1])
{
case 0x01:
TR0 = 1; //启动
rec_num = 0;//指令正确,清空缓冲区
break;
case 0x02:
TR0 = 0; //暂停
rec_num = 0;//指令正确,清空缓冲区
break;
default: //如果指令不正确,缓冲区左移
reciev[0] = reciev[1];
reciev[1] = reciev[2];
rec_num --;
break;
}
}
}
}
if (TI)
{
TI = 0;
}
}
main()
{
unsigned char shi, ge; //定义十位、个位要输出的数据
ms_delay(100);
init_port();
init_usart();
init_timer();
dir = 0; //485接收数据
rec_num = 0;
display_num = 0;
count_in_T0 = 0;
//把两个数码管都关闭
en2 = 1;
en1 = 1;
EA = 1;//开总中断
while(1)
{
shi = display_num / 10;
ge = display_num % 10;
display(shi,ge);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -