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

📄 led.c

📁 一个集合DS18B20的多路温度测量系统,加上adc0809数据采集,加上1602液晶显示的综合数据处理系统,有较高学习价值.
💻 C
字号:
#include "system.h"	
#include <INTRINS.H>				  //为调用nop空指令需要


	   
/*共阳极8段LED段码表:    "0"“1”“2”“3”“4”“5”“6”“7”“8”“9"*/
char code ledtable[]   = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};



/*送译码器的三个值 能够实现译码 即驱动8个数码管*/
sbit A     =    P3^4;				   
sbit D     =    P3^2;				   
sbit C     =    P3^3;
		   
sbit E     =    P1^7;					       //小数点的放置
sbit DQ    =    P3^7;						   //温度输入口	

unsigned char data disv[2]      = {0x00,0x00};                  //存放ADC通道0的电压值                                                                           	       //存放ADC通道1的电压值
unsigned char data disa[3]      = {0x00,0x00,0x00};             //存放ADC通道1的电流值
unsigned char data display[3]   = {0x00,0x00,0x00};				//显示单元数据,共3个,一个运算符暂用

			   
#define  Disdata  P1



void LedDisp(void)
{
	static char place = 0;				//place决定哪位数码管点亮  
	unsigned char ledout;			 	//最终送往显示端口的数据

	
//**************根据place的值扫描LED 8数码管********************	
	switch(place)
	{
		case 0:
			A  =  1;						   
			D  =  1;						
			C  =  1;
			ledout   = 0xff;		
			ledout   = ledtable[disv[0]];		       //提取出0的LED显示代码
			Disdata  = ledout;					        //送到P1端口上显示
			if(power < 10)
			{
				E = 0;
			}
			A  =  1;						   
			D  =  1;						
			C  =  1;
			place = 1;							      //第1个数码显示完毕,转向2位显示
			break;		
		case 1:
			A  =  1;						   
			D  =  1;						
			C  =  1;
			ledout   = 0xff;
			ledout   = ledtable[disv[1]];		       //提取出0的LED显示代码
			Disdata  = ledout;					       //送到P1端口上显示
			A  =  0;						   
			D  =  1;						
			C  =  1;
			place = 2;							      //第2个数码显示完毕,转向3位显示
			break;		
		case 2:
			A  =  0;						   
			D  =  1;						
			C  =  1;
			ledout  = 0xff;
			ledout  = ledtable[disa[0]];		       //提取出0的LED显示代码
			Disdata = ledout;					       //送到P1端口上显示
			if(current < 10)
			{
				E = 0;
			}
			A  =  1;						   
			D  =  0;						
			C  =  1;
			place = 3;							       //第3个数码显示完毕,转向4位显示
			break;	
		case 3:
			A  =  1;						   
			D  =  0;						
			C  =  1;
			ledout  = 0xff;
			ledout  = ledtable[disa[1]];		       //提取出0的LED显示代码
			Disdata = ledout;					       //送到P1端口上显示
			if(current >= 10)
			{
				E = 0;
			}
			A  =  0;						   
			D  =  0;						
			C  =  1;
			place = 4;							       //第4个数码显示完毕,转向5位显示
			break;	
		case 4:
			A  =  0;						   
			D  =  0;						
			C  =  1;
			ledout  = 0xff;			
			ledout  = ledtable[disa[2]];		       //提取出0的LED显示代码
			Disdata = ledout;					       //送到P1端口上显示
			A  =  1;						   
			D  =  1;						
			C  =  0;					
			place = 5;							      //第5个数码显示完毕,转向6位显示
			break;	
		case 5:
			A  =  1;
			D  =  1;
			C  =  0;
/*			if(n == 1)
			{
				ledout = 0xff;
				Disdata = 0xbf;				   //写“-”
				A  =  0;						   
				D  =  1;						
				C  =  0; 
				n  =  0;
			}
			else
			{
*/				

				ledout = 0xff;
				ledout = ledtable[display[0]];
				Disdata = ledout;
				if(tmp < 10)				  //小数点判别
				{
					E = 0;
				}
				A  =  0;						   
				D  =  1;						
				C  =  0; 
										//第6个数码显示完毕,转向7位显示				
		//	}			place = 6; 
			break; 
		case 6:
			A  =  0;						   
			D  =  1;						
			C  =  0;
			ledout = 0xff;
			ledout = ledtable[display[1]];
			Disdata = ledout;
			if((tmp>=10) && (tmp<100))				  //小数点判别
			{
				E = 0;
			} 
			A  =  1;						   
			D  =  0;						
			C  =  0;
 						
			place = 7;							//第7个数码显示完毕,转向8位显示
			break;	
		case 7:
			A  =  1;						   
			D  =  0;						
			C  =  0;
			ledout = 0xff;
			ledout = ledtable[display[2]];
			Disdata = ledout;
			A  =  0;						   
			D  =  0;						
			C  =  0;		
			place = 0;							//第8个数码显示完毕,转向1位显示
			break;		 		 
	}	
}


/************将实际电压值转化为LED要显示的BCD码*******************/
void test(void)
{	  
      unsigned int int_disv;
      unsigned int int_number;
	  unsigned int int_temp;

	if(power < 10)
	{
		int_disv =  (unsigned int)(power * 10);
		disv[0]  =  int_disv / 10;			              //取商 取出十位数字 送第一个LED显示
		disv[1]  =  int_disv % 10;						  //取余,取出个位数字 送第二个LED显示
	}
	else
	{
		int_disv =  (unsigned int)(power * 10);
		disv[0]  =  int_disv / 100;			              //取商 取出十位数字 送第一个LED显示
		disv[1]  =  (int_disv % 100)/10;						  //取余,取出个位数字 送第二个LED显示
	}			              
 
 


 	 
	if(current < 10)
	{
		int_number =  (unsigned int)(current*100);   //对ADC0809检查出的电压进行取整
		disa[0]	   =  int_number / 100;				 //取出第1位送入第三个数码管
	    disa[1]    =  ((int_number % 100) / 10);     //取出第2位送入第四个数码管
		disa[2]	   =  (int_number % 10);			 //取出小数位送入第五个数码管
	}
	else
	{
	    int_number =  (unsigned int)(current*100);   //对ADC0809检查出的电压进行取整
		disa[0]	   =  int_number / 1000;		     //取出第1位送入第三个数码管
	    disa[1]    =  ((int_number % 1000) / 100);   //取出第2位送入第四个数码管
		disa[2]	   =  ((int_number %100) /10);		//取出小数位送入第五个数码管
	} 





	if(tmp < 10)
	{
		int_temp =  (unsigned int)(tmp*100);   //对ADC0809检查出的电压进行取整
		display[0]	   =  int_temp / 100;				 //取出第1位送入第三个数码管
	    display[1]    =  ((int_temp % 100) / 10);     //取出第2位送入第四个数码管
		display[2]	   =  (int_temp % 10);			 //取出小数位送入第五个数码管
	}
	else
	{
	    int_temp =  (unsigned int)(tmp*100);   //对ADC0809检查出的电压进行取整
		display[0]	   =  int_temp / 1000;		     //取出第1位送入第三个数码管
	    display[1]    =  ((int_temp % 1000) / 100);   //取出第2位送入第四个数码管
		display[2]	   =  ((int_temp %100) /10);		//取出小数位送入第五个数码管
	} 
} 										   
   

⌨️ 快捷键说明

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