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

📄 led_n.c

📁 用单片机进行开发
💻 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 + -