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

📄 display.c

📁 用单片机和数码管
💻 C
字号:
#include<inttypes.h>
#include<avr/io.h>
#include<util/delay.h>

#include "head.h"

extern uint8_t Second,Minute,Hour;
extern uint8_t AMinute,AHour,alarmEN;
extern uint8_t disp[6];
extern uint8_t dis[];

////////////////////////////////
/*
   
功能:计算输出的时间格式
_____________________

参数: mod 选择计算的是当前时间还是闹钟
______________________

返回:没有

*/
////////////////////////////////


void dispro (uint8_t mod)   
{
	if (mod==TIME) 								//当前时间模式
	{
		disp[0]=Hour/10;						//时
		disp[1]=Hour-disp[0]*10;
	
		disp[2]=Minute/10;						//分
		disp[3]=Minute-disp[2]*10;
	
		disp[4]=Second/10;						//秒
		disp[5]=Second-disp[4]*10;
	}
	
	if (mod==ALARM)  							//闹钟模式
	{
		disp[0]=AHour/10;
		disp[1]=AHour-disp[0]*10;
	
		disp[2]=AMinute/10;
		disp[3]=AMinute-disp[2]*10;
	
		disp[4]=0;
		disp[5]=alarmEN;						//是否开启闹钟,1为开启,0为关闭
	}
}


/////////////////////////////////////
/*
 显示函数
 _____________________________
 参数: 
 		c:选择显示的区域
 		mod:选择显示当前时间还是闹钟
 _____________________________
 返回:无
 
 */
////////////////////////////////////

void display (uint8_t c,uint8_t mod)	

{
	dispro (mod);					//计算显示的内容
	
	uint8_t begin,end;
	
	switch (c)
	{
		case SHOW_HOUR 		: begin=0;end=2;break;			//根据显示的区域不同而改变数码管
		case SHOW_MINUTE    : begin=2;end=4;break;			//的起始于结束位
		case SHOW_SECOND	: begin=4;end=6;break;
		case SHOW_ALL		: begin=0;end=6;c++;break;
		
		default:{}	break;
	}
	
	uint8_t i,sel;
	sel=c;
		for(i=begin;i<end;i++)								//这个循环用来扫描数码管输出
			{
				PORTA=0x00;								//插黑显示
				PORTD=~sel;								//向D口输出片选信号
				
				PORTA=dis[disp[i]];						//向A口输出段选信号
				
				_delay_ms(5);
				sel=sel<<1;			
			}
}

⌨️ 快捷键说明

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