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

📄 4.2Ц-

📁 医护仪走廊的数码管显示驱动的程序工作在时间显示和床好数字模式下
💻 2Ц-
字号:
#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
{
    //unsigned char UARTNum = 0 ;
    unsigned char temp;
    //unsigned char sign = 0 ;

    /*Dig1 = 0;
    Dig2 = 0;
    Dig3 = 0;
    Dig4 = 1;
    P1 = 0x06;
    Delay(20);*/
    if (RI)
    {
        RI=0;

        temp = SBUF ;
        Receive_Buffer[temp>>4] = temp&0x0F;
/*
		if (sign == 0)
        {
            sign = 1 ;
        }
       
        if(sign == 1)
        {
             Receive_Buffer[UARTNum++] = temp;
             if(UARTNum>4)
             {
                 UARTNum = 0;
                 sign = 0 ;
             }
        }
*/      
        /*Dig2 = 0;
        Dig3 = 0;
        Dig4 = 0;
        Dig1 = 1;
        P1 = 0x7F;
        Delay(10);*/
        //add your code here.

            /*Dig2 = 0;
            Dig3 = 0;
            Dig4 = 0;
            Dig1 = 1;
            P1 = Number_Buffer[Receive_Buffer[Receive_Buffer[0]]];
            Delay(10);*/
	   // if (Receive_Buffer[0] >= 5)
 	    //{
            /*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;
	    }*/
       // Receive_Buffer[0]++;
	   // Receive_Buffer[Receive_Buffer[0]] = SBUF;
    }
}

void timer0(void) interrupt 1    //4ms一次
{
    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)
        {
            /*Dig2 = 0;
            Dig3 = 0;
            Dig4 = 0;
            Dig1 = 1;
            P1 = Number_Buffer[Receive_Buffer[4]];
            Delay(10);

            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 = 0;
        }
        else */
                    switch (Display_Buffer[0])
                    {
                        case 1:
                            Dig2 = 0;
                            Dig3 = 0;
                            Dig4 = 0;
                            Dig1 = 1;
                            P1 = Number_Buffer[Receive_Buffer[0]];
                            //P1 = Number_Buffer[1];
                            Delay(10);
                        break;

                        case 2:
                            Dig1 = 0;
                            Dig3 = 0;
                            Dig4 = 0;
                            Dig2 = 1;
                            P1 = Number_Buffer[Receive_Buffer[1]];
                            //P1 = Number_Buffer[2];
                            Delay(10);
                        break;

                        case 3:
                            Dig1 = 0;
                            Dig2 = 0;
                            Dig4 = 0;
                            Dig3 = 1;
                            P1 = Number_Buffer[Receive_Buffer[2]];
                            //P1 = Number_Buffer[3];
                            Delay(10);
                        break;
          
                        case 4:
                            Dig1 = 0;
                            Dig2 = 0;
                            Dig3 = 0;
                            Dig4 = 1;
                            P1 = Number_Buffer[Receive_Buffer[3]];
                            //P1 = Number_Buffer[4];
                            Delay(10);
                        break;
            
                        default: break;
                    }
                    //Display_Flag = 0;
              
               /*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 + -