📄 4.1.txt
字号:
#include <reg2051.h>
#include <intrins.h>
typedef unsigned char uchar;
typedef unsigned int uint;
sbit Dig1 = P3^2;
sbit Dig2 = P3^3;
sbit Dig3 = P3^4;
sbit Dig4 = P3^7;
sbit RE = P3^5;
uchar Timer = 0; //0.5ms闪烁控制标志
uchar Receive_Buffer[6]; //接收主机发来的数据
uchar Display_Buffer[6]; //显示缓冲区
uchar Display_Flag = 0; //是否显示标志
uchar Number_Buffer[10] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
uchar Number_Buffer_Dot[10] = {0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xDF};
void Delay(unsigned char time) //延时函数单位1的时候3ms
{
unsigned char i;
unsigned int j;
for(i=time;i>0;i--)
{
for(j=50;j>0;j--);
}
}
void uart(void) interrupt 4
{
/*Dig1 = 0;
Dig2 = 0;
Dig3 = 0;
Dig4 = 1;
P1 = 0x06;
Delay(10);*/
if (RI)
{
RI=0;
/*Dig2 = 0;
Dig3 = 0;
Dig4 = 0;
Dig1 = 1;
P1 = 0x7F;
Delay(10);*/
//add your code here.
Receive_Buffer[0]++;
Receive_Buffer[Receive_Buffer[0]] = SBUF;
Dig2 = 0;
Dig3 = 0;
Dig4 = 0;
Dig1 = 1;
P1 = Number_Buffer[Receive_Buffer[Receive_Buffer[0]]];
Delay(10);
if (Receive_Buffer[0] > 4)
{
/*Dig2 = 0;
Dig3 = 0;
Dig4 = 0;
Dig1 = 1;
P1 = 0x3F;*/
Display_Buffer[1] = Receive_Buffer[1];
Display_Buffer[2] = Receive_Buffer[2];
Display_Buffer[3] = Receive_Buffer[3];
Display_Buffer[4] = Receive_Buffer[4];
Display_Flag = 1;
Receive_Buffer[0] = 0;
}
else
{
Display_Flag = 0;
}
}
}
void timer0(void) interrupt 1 //20ms一次
{
TH0=0xf0;
TL0=0x60;
//add your code here.
Timer++;
Display_Buffer[0]++;
if (Timer >= 200)
{
Timer = 0;
}
if (Display_Buffer[0] > 4)
{
Display_Buffer[0] = 1;
}
}
void initTimer(void)
{
TMOD=0x1;
TH0=0xf0;
TL0=0x60;
}
void initUart(void)
{
TMOD|=0x20;
SCON=0x50;
TH1=0xfd;
TL1=0xfd;
TR1=1;
ES=1;
}
void main(void)
{
EA = 1;
TR0=1;
ET0=1;
RE = 0;
initTimer();
initUart();
Receive_Buffer[0] = 0;
Display_Buffer[0] = 0;
Display_Flag = 0;
while (1)
{
if (Display_Flag == 1)
{
switch (Display_Buffer[0])
{
case 1:
Dig2 = 0;
Dig3 = 0;
Dig4 = 0;
Dig1 = 1;
P1 = Number_Buffer[Receive_Buffer[1]];
Delay(10);
break;
case 2:
Dig1 = 0;
Dig3 = 0;
Dig4 = 0;
Dig2 = 1;
P1 = Number_Buffer[Receive_Buffer[2]];
Delay(10);
break;
case 3:
Dig1 = 0;
Dig2 = 0;
Dig4 = 0;
Dig3 = 1;
P1 = Number_Buffer[Receive_Buffer[3]];
Delay(10);
break;
case 4:
Dig1 = 0;
Dig2 = 0;
Dig3 = 0;
Dig4 = 1;
P1 = Number_Buffer[Receive_Buffer[4]];
Delay(10);
break;
default: break;
}
}
else
{
switch (Display_Buffer[0])
{
case 1:
Dig2 = 0;
Dig3 = 0;
Dig4 = 0;
Dig1 = 1;
P1 = 0x06;
Delay(10);
break;
case 2:
Dig1 = 0;
Dig3 = 0;
Dig4 = 0;
Dig2 = 1;
P1 = 0x06;
Delay(10);
break;
case 3:
Dig1 = 0;
Dig2 = 0;
Dig4 = 0;
Dig3 = 1;
P1 = 0x06;
Delay(10);
break;
case 4:
Dig1 = 0;
Dig2 = 0;
Dig3 = 0;
Dig4 = 1;
P1 = 0x06;
Delay(10);
break;
default: break;
}
}
/*Dig1 = 0;
Dig2 = 0;
Dig3 = 0;
Dig4 = 1;
P1 = 0x66;
*/
/*Display_Buffer[1] = Receive_Buffer[1];
Display_Buffer[2] = Receive_Buffer[2];
Display_Buffer[3] = Receive_Buffer[3];
Display_Buffer[4] = Receive_Buffer[4];
if (Receive_Buffer[5] == 0) //当接收数组第5位是0时显示时间
{
switch (Display_Buffer[0])
{
case 1:
Dig2 = 0;
Dig3 = 0;
Dig4 = 0;
Dig1 = 1;
if (Timer >= 0 && Timer <= 100) //当TIMER在0到100范围内时 点是亮的状态
{
P1 = Number_Buffer_Dot[Display_Buffer[1]];
}
else //当TIMER在100到200范围内 点是灭的状态
{
P1 = Number_Buffer[Display_Buffer[1]];
}
Delay(10);
break;
case 2:
Dig1 = 0;
Dig3 = 0;
Dig4 = 0;
Dig2 = 1;
P1 = Number_Buffer[Display_Buffer[2]];
Delay(10);
break;
case 3:
Dig1 = 0;
Dig2 = 0;
Dig4 = 0;
Dig3 = 1;
P1 = Number_Buffer[Display_Buffer[3]];
Delay(10);
break;
case 4:
Dig1 = 0;
Dig2 = 0;
Dig3 = 0;
Dig4 = 1;
P1 = Number_Buffer[Display_Buffer[4]];
Delay(10);
break;
default: break;
}
}
else if (Receive_Buffer[5] == 1) //当接收数组第5位是1时 显示床位号 要闪烁且点永远不亮
{
if (Timer >= 0 && Timer <= 100) //数码管处于亮的状态
{
switch (Display_Buffer[0])
{
case 1:
Dig2 = 0;
Dig3 = 0;
Dig4 = 0;
Dig1 = 1;
P1 = Number_Buffer[Display_Buffer[1]];
Delay(10);
break;
case 2:
Dig1 = 0;
Dig3 = 0;
Dig4 = 0;
Dig2 = 1;
P1 = Number_Buffer[Display_Buffer[2]];
Delay(10);
break;
case 3:
Dig1 = 0;
Dig2 = 0;
Dig4 = 0;
Dig3 = 1;
P1 = Number_Buffer[Display_Buffer[3]];
Delay(10);
break;
case 4:
Dig1 = 0;
Dig2 = 0;
Dig3 = 0;
Dig4 = 1;
P1 = Number_Buffer[Display_Buffer[4]];
Delay(10);
break;
default: break;
}
}
else
{
Display_Buffer[0] = 0;
}
}
}
else
break;
/*if (Display_Flag == 1)
{
Display_Buffer[1] = Receive_Buffer[1];
Display_Buffer[2] = Receive_Buffer[2];
Display_Buffer[3] = Receive_Buffer[3];
Display_Buffer[4] = Receive_Buffer[4];
if (Receive_Buffer[5] == 0) //当接收数组第5位是0时显示时间
{
if (Display_Buffer[0] == 1)
{
Dig1 = 1;
if (Timer >= 0 && Timer <= 100) //当TIMER在0到100范围内时 点是亮的状态
{
P1 = Number_Buffer_Dot[Display_Buffer[1]];
}
else //当TIMER在100到200范围内 点是灭的状态
{
P1 = Number_Buffer[Display_Buffer[1]];
}
}
else if (Display_Buffer[0] == 2)
{
Dig2 = 1;
P1 = Number_Buffer[Display_Buffer[2]];
}
else if (Display_Buffer[0] == 3)
{
Dig3 = 1;
P1 = Number_Buffer[Display_Buffer[3]];
}
else if (Display_Buffer[0] == 4)
{
Dig4 = 1;
P1 = Number_Buffer[Display_Buffer[4]];
}
else
{
Display_Buffer[0] = 0;
}
}
else if (Receive_Buffer[5] == 1) //当接收数组第5位是1时 显示床位号 要闪烁且点永远不亮
{
if (Timer >= 0 && Timer <= 100) //数码管处于亮的状态
{
if (Display_Buffer[0] == 1)
{
Dig1 = 1;
P1 = Number_Buffer[Display_Buffer[1]];
}
else if (Display_Buffer[0] == 2)
{
Dig2 = 1;
P1 = Number_Buffer[Display_Buffer[2]];
}
else if (Display_Buffer[0] == 3)
{
Dig3 = 0x03;
P1 = Number_Buffer[Display_Buffer[3]];
}
else if (Display_Buffer[0] == 4)
{
Dig4 = 0x04;
P1 = Number_Buffer[Display_Buffer[4]];
}
else
{
Display_Buffer[0] = 0;
}
}
else //当TIMER在100到200内时 数码管不亮
{
Display_Buffer[0] = 0;
}
}
}*/
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -