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