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

📄 display.c

📁 四位led的控制....通过设置不同的数字
💻 C
字号:
#include <stdio.h>
#include <reg52.h>
#include <intrins.h>
#include <rtx51tny.h>
#include <string.h>

#define uchar unsigned char
#define uint  unsigned int
#define OFF 1
#define ON 0
sbit RED_LED = P2^0;//red led;
sbit  LED1=P2^5;//数码管1位选,从左往右:--->>>
sbit  LED2=P2^4;//数码管2位选
sbit  LED3=P2^1;//数码管3位选
sbit  LED4=P3^7;//数码管4位选
sbit  DP=P0^2;//小数点
uchar Endreceive;
uchar count;
uchar idata buffer[5];//数据缓冲区
uchar idata buf_receive[10];
uchar idata buf[20];
uchar idata disp_buffer[6],led_buffer[4];//,disp_buffer,led buffer

uchar code led_code[]={
                        0x05, //0
                        0x7D, //1
                        0x46, //2
                        0x54, //3
                        0x3C, //4
                        0x94, //5
                        0x84, //6
                        0x5D, //7
                        0x04, //8
                        0x14, //9
                        0x0C, //10_"A"
                        0xA4, //11_"b"
                        0x87, //12_"C"
                        0x64, //13_"d"
                        0x86, //14_"E"
                        0x8E, //15_"F"
                        0xFE, //16_"-"
                        0xFF, //17_全灭

						0x05&0xFB, //18  0.
						0x7D&0xFB,//19   1.
						0x46&0xFB,//20   2.
						0x54&0xFB,//21   3.
						0x3C&0xFB,//22   4. 
						0x94&0xFB,//23   5.
						0x84&0xFB,//24   6.
						0x5D&0xFB,//25   7.
						0x04&0xFB,//26   8.
						0x14&0xFB,//27   9.
						0x0C&0xFB,//28   A.
						0xA4&0xFB,//29   B.
						0x87&0xFB,//30   C.
                        0x64&0xFB,//31   D.
                        0x86&0xFB,//32   E.
                        0x8E&0xFB,//33   F.
                        0xFE&0xFB,//34   -.
                        0xFF&0xFB,//35   .
                        //0x54  //19 "N"
                        };

void initialion();
void display(uchar dis_code,uchar dis_position);
void display_date(uchar flag);
void dis_delaytime(uchar num); //延时1.8MS
void WirteCom(uchar nLen);
void init_timer(void);
void delay(void);
void show_led();

/******************************************************************************/
/*                */
/******************************************************************************/
job0 () _task_ 0  
{            
	//initialion(); 
  	os_create_task (1);                 
    while (1)  
	{
	    memset(disp_buffer,'\0',6);
    	strcpy(disp_buffer,"1B-.4");
		show_led();
		RED_LED = 0;
		os_wait(K_TMO,100,0);
/*	    memset(disp_buffer,'\0',6);
		strcpy(disp_buffer,"12.34");
		show_led();
		RED_LED = 1;
		os_wait(K_TMO,100,0);
	    memset(disp_buffer,'\0',6);
    	strcpy(disp_buffer,"1.234");
		show_led();
		os_wait(K_TMO,100,0);
	    memset(disp_buffer,'\0',6);
    	strcpy(disp_buffer,".123");
		show_led();
		os_wait(K_TMO,100,0);
	    memset(disp_buffer,'\0',6);
    	strcpy(disp_buffer,"1234.");
		show_led();
		os_wait(K_TMO,100,0);*/
  	}
}

/******************************************************************************/
/*    Task 1 'job1':  RTX-51 tiny starts this task with os_create_task (1)    */
/******************************************************************************/
//led driver
job1 () _task_ 1  
{
	while(1)
	{
		display_date(0);
	}
	
}


/***********************************************************
函 数 名:void display(uchar dis_code,uchar dis_position)
功    能:显示1个数码管
入口参数:dis_code:显示的段码,dis_position:LED数码管的位置
出口参数:无
返 回 值:无
***********************************************************/
void display(uchar dis_code,uchar dis_position)
{
        uchar lcoder;
		P0=0xFF;//清段码,防止残留显示
            switch(dis_position) //送位选
              {
                 case 1:  LED1=ON;
                          LED2=OFF;
                          LED3=OFF;
                          LED4=OFF;
                          break;               
                 case 2:  LED1=OFF;
                          LED2=ON;
                          LED3=OFF;
                          LED4=OFF;
                          break;
                 case 3:  LED1=OFF;
                          LED2=OFF;
                          LED3=ON;
                          LED4=OFF;
                          break;
                 default: LED1=OFF;
                          LED2=OFF;
                          LED3=OFF;
                          LED4=ON;
                          break;
             }
 	    if(dis_code == 0x12)
		{
	    	if(dis_position == 1)
				lcoder = 0xFB;
			else
				lcoder = (lcoder & 0xFB);
		}
		else
		{
			lcoder = led_code[dis_code];// & 0x1F];
			}
        P0=lcoder;//送段码
}

/***********************************************************
函 数 名:void display_date(bit flag)
功    能:显示子函数,4位1组
入口参数:
出口参数:无
返 回 值:无
***********************************************************/
void display_date(uchar flag)
{
     display(led_buffer[0],0x01);//显示第1位
     dis_delaytime(10);
     display(led_buffer[1],0x02);//显示第2位
     dis_delaytime(10);
     display(led_buffer[2],0x03);//显示第3位
     dis_delaytime(10);
     display(led_buffer[3],0x04);//显示第4位
     dis_delaytime(10);
	 
	 //if(flag)
	// {
	 //	DP = 0;
	 //}
     //P0=0xFF;
}

void show_led()
{
	    
        uchar i,j;
 	    i = 0;
 /*       for(j=0;j<4;j++)
		{
				if(disp_buffer[i] == '.')
				{
					led_buffer[j] = 18;
					i++;
				}

				i++;
			
				if((disp_buffer[i] >='0') && (disp_buffer[i] <='9'))
					led_buffer[j] = disp_buffer[i] - '0';
				else if((disp_buffer[i] >='A') && (disp_buffer[i] <='F'))
					led_buffer[j] = disp_buffer[i] - 'A' + 10;  
				else if ((disp_buffer[i] == '-'))
					led_buffer[j] = 16;
				else 
					led_buffer[j] = 17;
		}
        return;*/

       if (disp_buffer[0] == '.')
		{
			led_buffer[i] = 35;
		}
		else
		{			
			if((disp_buffer[0] >='0') && (disp_buffer[0] <='9'))
				led_buffer[i] = disp_buffer[0] - '0';
			else if((disp_buffer[0] >='A') && (disp_buffer[0] <='F'))
				led_buffer[i] = disp_buffer[0] - 'A' + 10;  
			else if ((disp_buffer[0] == '-'))
				led_buffer[i] = 16;
			else 
				led_buffer[i] = 17;
        }

		
        
		
		if(disp_buffer[1] == '.')
		{
			led_buffer[i] = led_buffer[i]+18;
			
		}
        else
		{
			i++;
			if((disp_buffer[1] >='0') && (disp_buffer[1] <='9'))
				led_buffer[i] = disp_buffer[1] - '0';
			else if((disp_buffer[1] >='A') && (disp_buffer[1] <='F'))
				led_buffer[i] = disp_buffer[1] - 'A' + 10;  
			else if ((disp_buffer[1] == '-'))
				led_buffer[i] = 16;
        	else 
				led_buffer[i] = 17;
		}


		if(disp_buffer[2] == '.')
		{
			led_buffer[i] = led_buffer[i]+18;
			
		}
        else
		{
			i++;
			if((disp_buffer[2] >='0') && (disp_buffer[2] <='9'))
				led_buffer[i] = disp_buffer[2] - '0';
			else if((disp_buffer[2] >='A') && (disp_buffer[2] <='F'))
				led_buffer[i] = disp_buffer[2] - 'A' + 10;  
			else if ((disp_buffer[2] == '-'))
				led_buffer[i] = 16;
        	else 
				led_buffer[i] = 17;
		}

		if(disp_buffer[3] == '.')
		{
			led_buffer[i] = led_buffer[i]+18;
			
		}
        else
		{
			i++;
			if((disp_buffer[3] >='0') && (disp_buffer[3] <='9'))
				led_buffer[i] = disp_buffer[3] - '0';
			else if((disp_buffer[3] >='A') && (disp_buffer[3] <='F'))
				led_buffer[i] = disp_buffer[3] - 'A' + 10;  
			else if ((disp_buffer[3] == '-'))
				led_buffer[i] = 16;
        	else 
				led_buffer[i] = 17;
		}
	
		
		if(disp_buffer[4] == '.')
		{
			led_buffer[i] = led_buffer[i]+18;
			
		}
      else
		{
			i++;
			if((disp_buffer[4] >='0') && (disp_buffer[4] <='9'))
				led_buffer[i] = disp_buffer[4] - '0';
			else if((disp_buffer[4] >='A') && (disp_buffer[4] <='F'))
				led_buffer[i] = disp_buffer[4] - 'A' + 10;  
			else if ((disp_buffer[4] == '-'))
				led_buffer[i] = 16;
        	else 
				led_buffer[i] = 17;
				
		}
}

void dis_delaytime(uchar num)
{
	uchar i;
	for(i=0;i<num;i++)
    {
	   _nop_();
	   _nop_();

	}


}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -