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

📄 digtal led.c

📁 6位数码管显示程序
💻 C
字号:
/******************************************************************************/
/**
/** 功能描述:通过AT89S/C52,DS18B20和6位数码管,采集温度并在数码管上实时显示。
/**			  并有相应的不同颜色的led和蜂鸣器指示。
/** 创 建 人:chiusir@yahoo.cn	日期:2008-04-06   							  */
/** 修 改 人:                 	日期:2008-04-18   							  */ 
/** 其他说明: 
/******************************************************************************/
#include<regx51.h>
#include <intrins.h>

#define U8  unsigned char
#define U16 unsigned int


/*******************************************************************************
*** 函 数 名: void DLY_us(U8 x)
*** 功能描述: 微秒级延时;
*** 全局变量: NO !
*** 输		入: x !
*** 输		出: NO !  
*** 修 改 人:			 							日期:2008-04-18
*** 函数说明:
*** //1-5,2-7,3-9 ,5--16.5us,10-30.4,22-52,25-58,35-78,61-125,125-250,250--500us 
/******************************************************************************/
void DLY_us(U8 x)		//x取值1~255;
{
	while(--x);	 		
}
/*******************************************************************************
*** 函 数 名: void DLY_ms(U16 x)
*** 功能描述: 毫秒级延时;
*** 全局变量: NO !
*** 输		入: U16 x !
*** 输		出: NO !  
*** 修 改 人:			 							日期:2008-04-18
*** 函数说明: 
/******************************************************************************/
void DLY_ms(U8 x)		//x取值1~255;
{
	U8 i,j;
	for(i=0;i<x;i++)
		for(j=0;j<200;j++)
		{
			_nop_();
			_nop_();
		}
} 

/*******************************************************************************
*** 函 数 名: void Show_8LED(U16 dig)
*** 功能描述: 把数字转化为5位LED显示
*** 全局变量: NO !
*** 输		入: 从DB18B20读取的16位原始数据:低11位数据位,高5位为符号位!
				//0,1,2,3,4,5,6,7,8,9,-
				U8 code LED_IMG[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};
				P0.0--4依次为符号位,百位,十位,个位,十分为,百分位
				P1接8段数码管
*** 输		出: NO ! 
*** 函数说明: 
/******************************************************************************/ 
					//0,1,2,3,4,5,6,7,8,9,-
U8 code LED_IMG[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};

void Show_8LED(int tmv)
{  	
	U8 ge,shi,bai,shifen,baifen,neg=0; 
	
	if(tmv<0)
	{
		tmv=-tmv;
		neg=1;
	}		 
	bai=tmv/10000;
	shi=(tmv%10000)/1000;
	ge =(tmv%1000)/100;
	shifen=(tmv%100)/10;
	baifen=tmv%10;
	for(tmv=0;tmv<80;tmv++)  
	{
		if(neg)
		{
			P0=0x01; 					//符号位 	
			P1=LED_IMG[10];
			DLY_ms(3);				    //this is the smallest interval
		}
		P0=0x02;  	
		P1=LED_IMG[bai]|0X80;
		DLY_ms(3);
		P0=0x04;  	
		P1=LED_IMG[shi]|0X80;
		DLY_ms(3);
		P0=0x08; 
		P1=LED_IMG[ge]&0x7f;			//dot always.
		DLY_ms(3);
		P0=0x10; 
		P1=LED_IMG[shifen]|0X80;
		DLY_ms(3);
		P0=0x20; 
		P1=LED_IMG[baifen]|0X80;
		DLY_ms(3);
		P1=0xff; 
	}
}

⌨️ 快捷键说明

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