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

📄 led.c

📁 用凌阳单片机编写用超声波水位测量程序
💻 C
字号:
/******************************************************
文件:led.c
描述:7段数码管显示
硬接口:IOB0--CLK,IOB1--DIN,IOB2--LD(1)/CS(0)
软接口:初始化上述3口为输出,初始化SIO,调用Init7219(),调用DispOneDig(num,dig)
修改信息:2005-07-26		nevsaynev		Initial Version
*******************************************************/

#include "led.h"
#include "Init_System.h"
/*=========================================
函数:void Init_7219(void)
描述:初始化7219
说明:请确保调用处包含头文件 macro.h, led.h
===========================================*/
typedef 	unsigned int	uint;
typedef 	unsigned char	uchar;

void Init_7219(void)
{
	
	CLRPORTB(2);			//是否支持BCD译码
	SendData(DEC_ADDR);
	SendData(DEC_NONE);
	SETPORTB(2);
	Delay_nlx(5);
	
	CLRPORTB(2);			//选择亮度,共16级
	SendData(INTSTY_ADDR);
	SendData(INTSTY(10));
	SETPORTB(2);
	Delay_nlx(5);
	
	CLRPORTB(2);			//扫描的个数,最好设为8
	SendData(SCAN_ADDR);
	SendData(SCAN_NUM(8));
	SETPORTB(2);
	Delay_nlx(5);
	
	CLRPORTB(2);			//是否关闭显示
	SendData(SHUTDN_ADDR);
	SendData(SHUTDN_NONE);
	SETPORTB(2);
	Delay_nlx(5);
	
	CLRPORTB(2);			//进行测试
	SendData(TEST_ADDR);
	SendData(TEST_ALL);
	SETPORTB(2);	
	Delay_nlx(3000);
	
	CLRPORTB(2);			//延时后关闭测试
	SendData(TEST_ADDR);
	SendData(TEST_NONE);
	SETPORTB(2);
	Blank_LED();
	
}



/*===============================================
函数:void SendData(uchar)
描述:SIO向外发送数据
输入:要传送的数据
返回:无
=================================================*/
void SendData(uchar data)
{
	*SIO_start = 1;
	*SIO_Data = data;
	while( (*SIO_start) & 0x80)
		*Wd_Clr=1;
}


/*===============================================
函数:void DispOneDig(uchar,uchar)
描述:在设定的数码管上显示数字
输入:显示的数字,所在的位(自DIG0开始编号)
返回:无
================================================*/
void DispOneDig(uchar num,uchar dig)
{							//	 0 	  1    2    3    4    5    6    7    8     9
	static uchar Seg_Code[20]={	0x7e,0x30,0x6d,0x79,0x33,0x5b,0x5f,0x70,0x7f,0x7b,
								0xfe,0xb0,0xed,0xf9,0xb3,0xdb,0xdf,0xf0,0xff,0xfb};
	uchar* p=Seg_Code;		//	 0.	  1.   2.   3.   4.   5.   6.   7.   8.   9.
	
	CLRPORTB(2);
	SendData(SELECT_DIG(dig));
	SendData(*( p + num));
	SETPORTB(2);
}


/*===============================================
函数:void ShineDig(uchar)
描述:数码管某一位闪烁,用于报警等功能
输入:闪烁的位
返回:无
=================================================*/
/*void ShineDig(uchar dig)
{
	DispOneDig();
	
	Delay_nlx(3000);
	
	BlankOneDig(dig);
}
*/

/*================================================
函数:void ShineAll(uchar)
描述:闪烁并使闪烁状态保持一定时间
输入:需闪烁的时间(以秒为单位)
返回:无
=================================================*/
/*void ShineAll(uchar time)
{
	while(time--)
		{
			CLRPORTB(2);	
			SendData(SHUTDN_ADDR);
			SendData(SHUTDN_ALL);
			SETPORTB(2);
			
			Delay_nlx1s();
			
			CLRPORTB(2);
			SendData(SHUTDN_ADDR);
			SendData(SHUTDN_NONE);
			SETPORTB(2);					
		}
}
*/

/*=================================================
函数:void BlankOneDig(uchar)
描述:关闭某一位的显示
输入:需关闭的位
返回:无
==================================================*/
void BlankOneDig(uchar dig)
{
	CLRPORTB(2);
	SendData(SELECT_DIG(dig));
	SendData(0);
	SETPORTB(2);
}

/******************************************************
**Clear all LED
******************************************************/



/**************************************************
描述:分成两段显示,左边为实际值,右边为设定值
***************************************************/

void DispValue(int value,uchar attri)
{
	uchar first,ii;
	uchar ge,shi = 0,bai = 0;
	
	{
		if(attri == SET)
			first = 7;
		else if(attri == ACT)
			first = 3;
	}

	while((value - 100)>=0)
	{
		bai++;
		value -= 100;
		*Wd_Clr=1;
	}
	while((value - 10)>=0)
	{
		shi++;
		value -= 10;
		*Wd_Clr=1;
	}
	ge=value;

	if( !bai)
		{
			BlankOneDig(first-2);
			if( !shi)
				BlankOneDig(first-1);
			DispOneDig(shi,first-1);
			DispOneDig(ge,first);
		}
	else 
		{
			DispOneDig(bai,first-2);
			DispOneDig(shi,first-1);	
			DispOneDig(ge,first);
		}
	
}

void Blank_LED()
{
	int i;
	for(i=0;i<=8;i++)
	{
		BlankOneDig(i);
	}
}

void Delay_nlx(uint time)
{	
	uint ii;
	for(ii=time<<4;ii>0;ii--)
	{
		*Wd_Clr=1;
	}
}

⌨️ 快捷键说明

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