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

📄 led6show.c

📁 LCD1602.rar
💻 C
字号:
//*************************************************************************************************
//*************************************************************************************************
//**<程序名>:LED动态扫描子函数。																 **
//**<功能>:	unsigned char * pucLedNum(unsigned long ulNumber);  							 **
//**			计算一个在000000到999999之间的数的每位数字并存储在数组中.并返回数组的首地址		 **
//**			void vShowOneNum(unsigned char ucOneNum,unsigned char ucOrder);					 **
//**			输入一个数字以及所要显示的位置,在LED相应位置上显示相应数字.						 **	 
//*************************************************************************************************
//*************************************************************************************************


//*************************************************************************************************
//*																								  *
//*			 ******************************头文件及宏定义**************************				  *
//*																								  *
//*************************************************************************************************
#include "LED6Show.h"



//*************************************************************************************************
//*																								  *
//*			  ********************************全局变量******************************			  *
//*																								  *
//*************************************************************************************************
unsigned  char code uca_LEDCode[]=
					{0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xFF};
					 //0,1,2,3,4,5,6,7,8,9,空白。

unsigned char code uca_LEDSelect[]=
					{0x01,0x02,0x04,0x08,0x10,0x20};	
					//分别点亮第6,5,4,3,2,1号灯。

unsigned char uca_LedNum[6];			
					//存放数字的各个位。

unsigned char uc_NumberFront=1;				  //只是数字的首位。

extern unsigned char uca_ShowCustom[];		  //在自定义模式下,LCD实时显示该字符。main.c


//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<自定义报告显示字符>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
unsigned char uca_ReportChar1[]={0xBF,0x86,0xC0,0x88,0xBF,0xF9};	  
					//被除数等于0。								-EOR-1

unsigned char uca_ReportChar2[]={0xBF,0x86,0xC0,0x88,0xBF,0xA4};	  
					//被减数小于减数。							-EOR-2

unsigned char uca_ReportChar3[]={0xC6,0x89,0x88,0xC2,0xBF,0xF9};	  
					//表明从计算器模式切换到计时模式。			CHAG-1

unsigned char uca_ReportChar4[]={0xC6,0x89,0x88,0xC2,0xBF,0xC0};	 
					//表明从计时器模式切换到计算器模式。		CHAG-0

unsigned char uca_ReportChar5[]={0xBF,0x8C,0x88,0xC1,0x92,0x86};
					//暂停										-PAUSE

//unsigned char uca_ReportChar6[]={0xBF,0x92,0x87,0x88,0x88,0x87};
					//开始										-START

unsigned char uca_ReportChar7[]={0xBF,0x92,0x87,0xC0,0x8C,0xBF};
					//停止										-StoP-


unsigned char uca_ReportChar8[]={0xC0,0x8C,0x8C,0xC0,0x92,0x86};
					//切换到倒计时模式							OPPPOSE

unsigned char uca_ReportChar9[]={0xBF,0x86,0xC0,0x88,0xBF,0x90};	  
					//超出可显示的最大值。						-EOR-9


//*************************************************************************************************
//*																								  *
//*			  ********************************函数实现******************************			  *
//*																								  *
//*************************************************************************************************
unsigned char * pucLedNum(unsigned long ulNumber)		  //将一个数的各个位分别存到数组里。
{														  //并返回首地址。
	if(ulNumber>999999)
		ulNumber=999999;
	if(ulNumber<0)
		ulNumber=0;
	uca_LedNum[5] = ulNumber/100000;					  //最高位存在数组【5】中。

	uca_LedNum[4] = (ulNumber-100000*(long)uca_LedNum[5])/10000;

	uca_LedNum[3] = (ulNumber-100000*(long)uca_LedNum[5]-10000*(long)uca_LedNum[4])/1000;

	uca_LedNum[2] = (ulNumber-100000*(long)uca_LedNum[5]-10000*(long)uca_LedNum[4]
					-1000*(long)uca_LedNum[3])/100;

	uca_LedNum[1] = (ulNumber-100000*(long)uca_LedNum[5]-10000*(long)uca_LedNum[4]
					-1000*(long)uca_LedNum[3]-100*(long)uca_LedNum[2])/10;

	uca_LedNum[0] = (ulNumber-100000*(long)uca_LedNum[5]-10000*(long)uca_LedNum[4]
					-1000*(long)uca_LedNum[3]-100*(long)uca_LedNum[2]-10*(long)uca_LedNum[1]);
														
														//最低位存在数组【0】中。

	for(uc_NumberFront=1;uc_NumberFront<6;uc_NumberFront++)
		{
			if(uca_LedNum[6-uc_NumberFront]!=0)			//判断数据的首位不为零数字在第几位。
				break;									//例如:8502的uc_NumberFront为3;
		}												//		0的uc_NumberFront为6;
														//		450530的uc_NumberFront为1。

	return uca_LedNum;
}



//*********************************************************************************************************
//*																										  *
//*				*****************************将1个1位数按顺序显示****************************			  *
//*																										  *
//*********************************************************************************************************
void vShowOneNum(unsigned char ucOneNum,unsigned char ucOrder)	
{																	
	if(ucOneNum!=0)												//如果数字不为0则正常输出。
		{
			LEDSELECT=0;
			LEDCHAR=uca_LEDCode[ucOneNum];						//ucOrder:1~6
			LEDSELECT=uca_LEDSelect[ucOrder-1];
		}
	else
		{
			if(ucOrder<uc_NumberFront)							//如果为0则判断是不是在数字首位之前。
				LEDSELECT=0;									//如果在则输出空,不显示数据。
			else
				{
					LEDSELECT=0;								//如果在首位之后则正常输出。
					LEDCHAR=uca_LEDCode[ucOneNum];					
					LEDSELECT=uca_LEDSelect[ucOrder-1];
				}
		}
}



//*********************************************************************************************************
//*																										  *
//*				***************************将1个自定义字符按顺序显示*************************			  *
//*																										  *
//*********************************************************************************************************
void vShowCustom(unsigned char ucOneCostom,unsigned ucOrder)	   
{
	LEDSELECT=0;
	LEDCHAR=ucOneCostom;
	LEDSELECT=uca_LEDSelect[ucOrder];				 //ucOrder:0~5
}


//*********************************************************************************************************
//*																										  *
//*				***********************将字符数组复制到字符显示数组中*************************			  *
//*																										  *
//*********************************************************************************************************
void vCharCopy(unsigned char ucaArray[])
{
	unsigned char ucCount;
	for(ucCount=0;ucCount<6;ucCount++)
		{
		uca_ShowCustom[ucCount]=ucaArray[ucCount];
		}
}

//*********************************************************************************************************
//*																										  *
//*				***********************根据报告代号,显示不同的报告字符*************************		  *
//*																										  *
//*********************************************************************************************************
void vShowReport(unsigned char ucSymbol)
{
	switch(ucSymbol)
		{
		case 1:vCharCopy(uca_ReportChar1);break;	//显示:-EOR-1--被除数等于0;
		case 2:vCharCopy(uca_ReportChar2);break;	//显示:-EOR-2--被减数小于减数;
		case 3:vCharCopy(uca_ReportChar3);break;	//显示:CHAG-1--表明从计算器模式切换到计时模式;
		case 4:vCharCopy(uca_ReportChar4);break;	//显示:CHAG-0--表明从计时器模式切换到计算器模式;
		case 5:vCharCopy(uca_ReportChar5);break;	//显示:-PAUSE--暂停;
//		case 6:vCharCopy(uca_ReportChar6);break;	//显示:-StART--开始;
		case 7:vCharCopy(uca_ReportChar7);break;	//显示:-StoP---停止;
		case 8:vCharCopy(uca_ReportChar8);break;	//显示:OPPOSE--切换到倒计时模式;
		case 9:vCharCopy(uca_ReportChar9);break;	//显示:-EOR-9--超出可显示的最大值。
		default:break;
		}
}

⌨️ 快捷键说明

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