⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 4.1.txt

📁 医护仪走廊的数码管显示驱动的程序工作在时间显示和床好数字模式下
💻 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 + -