📄 led_n.c
字号:
#include<reg52.h>
#define NORMAL 0
#define HOUR_STATE 1
#define MINUTE_STATE 2
void SplitNumber(unsigned int Num); //显示数字分解为各个位
void Display_Scan(unsigned char SecondMask,unsigned char MinuteMask,unsigned char HourMask); //数码管循环扫描显示
#define BLANK 10
//显示位段预定义
#define a 0x04 // AAAA
#define b 0x01 // F B
#define c 0x10 // F B
#define d 0x40 // GGGG
#define e 0x80 // E C
#define f 0x02 // E C
#define g 0x08 // DDDD H
#define DOT 0x20
//定义代码列表0-9,blank
unsigned char code LED_table[]={
a+b+c+d+e+f, //"0"
b+c, //"1"
a+b+d+e+g, //"2"
a+b+c+d+g, //"3"
b+c+f+g, //"4"
a+c+d+f+g, //"5"
a+c+d+e+f+g, //"6"
a+b+c, //"7"
a+b+c+d+e+f+g, //"8"
a+b+c+d+f+g, //"9"
0x00, //black
};
#undef a
#undef b
#undef c
#undef d
#undef e
#undef f
#undef g
unsigned char DisBuff[4]; //定义缓存数组,用于存储显示数值的各位的数字
unsigned char COM; //用于计数
//位定义
sbit COM1=P2^7;
sbit COM2=P2^4;
sbit COM3=P2^5;
sbit COM4=P2^6;
/*
函数名称:DisplayScan();
入口参数:SecondMask,MinuteMask,HourMask;
出口参数:无
说明:本函数实现数码管选通扫描的功能
SecondMask为 SECOND_BLINK 时,第四位数码管中间的位段亮
为 NO_BLINK2 时,不影响显示
MinuteMask为 MINIT_BLINK 时,低两位数码管灭
为 NO_BLINK 时,不影响显示
HourMask为 HOUR_BLINK 时,高两位数码管灭
为 NO_BLINK 时,不影响显示
*/
void Display_Scan(unsigned char SecondMask,unsigned char MinuteMask,unsigned char HourMask) // 选通扫描
{
if(COM>3) COM=0; //如果超出范围,COM置零
COM1=1;COM2=1;COM3=1;COM4=1; //每次运行时,现将各数码管熄灭
switch(COM%4) //根据COM的值判断该显示哪一位
{
case 0: //如果是0,第一位亮
P0=LED_table[DisBuff[0]]&MinuteMask; COM1=0; break; //给P0口赋值,显示数字
case 1:
P0=LED_table[DisBuff[1]]&MinuteMask; COM2=0; break;
case 2:
P0=(LED_table[DisBuff[2]]&HourMask)+DOT; COM3=0; break; //在第三位显示小数点
case 3:
P0=(LED_table[DisBuff[3]]|SecondMask)&HourMask; COM4=0; break;
}
COM++;
}
/*
函数名称:SplitNumber();
入口参数:unsigned int Num
出扩参数:无
说明:本函数将一个四位以下的整数按千、百、十、个位的顺序分解,将最高位零消隐后存储在DisBuff[4]中
例如:
SplitNumber(1030); 运行结果为: DisBuff[3]=1; DisBuff[2]=0; DisBuff[1]=3; DisBuff[0]=0;
SplitNumber(855); 运行结果为: DisBuff[3]=BLANK; DisBuff[2]=8; DisBuff[1]=5; DisBuff[0]=5;
*/
void SplitNumber(unsigned int Num) //分解整数
{
unsigned char i;
for(i=0;i<4;i++) //将要显示的数值分解为各个位存入缓存数组
{
DisBuff[i]=Num%10;
Num/=10;
}
if(DisBuff[3]==0)
DisBuff[3]=BLANK;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -