📄 led6show.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 + -