数码管闪烁模板及注意事项

数码管闪烁模板及注意事项

方式1:直接在segProc()里写

查看代码

void Seg_Proc(void)
{
	if(Seg_Slow_Down) return;
	Seg_Slow_Down = 1;
	
	/***用户自定义代码区↓***/
	
		sprintf(seg_string,"-%d-  %3d",(unsigned int)disp1,disp2);		
		
		if(state_flag == 2)//让disp1闪烁
		{
            /*Seg_Slow_Down减速如果为400,那我们这里if((ms_Tick - ms_Tick_point) >= 200)在400以下的就没理想效果	,
            所以改这里的同时,也要记得改数码管减速Seg_Slow_Down的值*/
			if((ms_Tick - ms_Tick_point) >= 200)		
			{
				ms_Tick_point=ms_Tick;
				bulingbuling ^= 1;  
				if(bulingbuling == 1)
					seg_string[1] = ' ';
			}
		}
		else if(state_flag == 3)//让disp2闪烁
		{
			if((ms_Tick - ms_Tick_point)>=200)
			{
				ms_Tick_point=ms_Tick;
				bulingbuling ^= 1;
				if(bulingbuling == 1)
					seg_string[5] = seg_string[6] = seg_string[7] = ' ';
			}	
		}
	
	Seg_Tran(seg_string, seg_buf);
}

方式2:在timer1_Isr里写个标志位,然后在segProc()里作判断

查看代码
void tm1_isr() interrupt 3
{	
	
	//永远不变
	if(++Key_Slow_Down == 10) Key_Slow_Down = 0;
	if(++Seg_Slow_Down == 400) Seg_Slow_Down = 0;

	//根据代码需求变换
	Ms_Count++;
	if(Ms_Count == 300)   
        /*Seg_Slow_Down减速如果为400,那我们这里if((ms_Tick - ms_Tick_point) >= 300)在400以下的就没理想效果	,
        所以改这里的同时,也要记得改数码管减速Seg_Slow_Down的值*/
	{
        Ms_Count=0;
        Disp_BlingBling ^= 1;//闪动变量翻滚
	}
    
    //这样也可以
   // if(Ms_Count % 300 == 0 )
    //    Disp_BlingBling ^= 1;//闪动变量翻滚

	//永远不变
	Seg_Disp(seg_buf, pos);//数码管显示刷新
	if( ++pos == 8 ) 	pos = 0;

	Led_Disp(ucLed);//LED显示内容
}

void Seg_Proc(void)//显示处理,显示信息生成
{
	//永远不变
	if(Seg_Slow_Down) return;
	Seg_Slow_Down = 1;//减速程序

	//根据代码需求发生变化
	switch(Running_Setting_Mode)
	{
		case 1:
		case 2:
		case 3://S5 时钟界面
				sprintf(seg_string, "%02d-%02d-%02d",(unsigned int)Clock_HMS[0],(unsigned int)Clock_HMS[1],(unsigned int)Clock_HMS[2]);//待设置的时间显示处理
				break;			
		case 5:
		case 6:
		case 7://S6 闹钟界面
				sprintf(seg_string, "%02d-%02d-%02d",(unsigned int)Alarm_HMS[0],(unsigned int)Alarm_HMS[1],(unsigned int)Alarm_HMS[2]);//待设置的闹钟显示处理			
				break;			
	}	
	
	if( Disp_BlingBling==1 )
	{
			switch(Running_Setting_Mode)
			{
				case 1://时钟秒
				case 7://闹钟秒					
						seg_string[6] = " ";
						seg_string[7] = " ";				
						break;
				
				case 2://时钟分
				case 6://闹钟分					
						seg_string[3] = " ";
						seg_string[4] = " ";				
						break;	
				
				case 3://时钟时
				case 5://闹钟时					
						seg_string[0] = " ";
						seg_string[1] = " ";				
						break;		
			}		
	}

	//永远不变
	Seg_Tran(seg_string, seg_buf);
}

 

总之,就是 Seg_Slow_Down减速如果为400,那我们这里if((ms_Tick - ms_Tick_point) >= 200)在400以下的就没理想效果,所以改这里的同时,也要记得改数码管减速Seg_Slow_Down的值。

posted @ 2024-04-08 19:24  iZJ"Qq4577105  阅读(4)  评论(0编辑  收藏  举报