📄 timer.c
字号:
//TIMER0 initialize - prescale:8
// WGM: Normal
// desired value: 10KHz
// actual value: 10.000KHz (0.0%)
# include "iom16v.h"
# include "LCDFun.h"
# include "macros.h"
extern void DisplayNumChar(unsigned char l,unsigned char h,unsigned char ll,unsigned char ShowBit);
extern void PrintOneASCII(uchar h,uchar l,uchar Asc);
extern unsigned char SWRecordLyric,SWPlayTime; //歌词开关,时间开关
unsigned char CurSongTim[3]={0,0,0,}; //当前歌曲的播放时间 分:秒:百秒
unsigned char TotalSongTim[4]={0,0,0,0,}; //当前歌曲的播放时间 时:分:秒:百秒
void timer0_init(void)
{
CLI(); //disable all interrupts
;
TCCR0 = 0x00; //stop
TCNT0 = 0xB2; //set count
OCR0 = 0x4E; //set compare
TCCR0 = 0x05; //start timer
;
MCUCR = 0x00;
GICR = 0x00;
TIMSK = 0x01; //timer interrupt sources
SEI(); //re-enable interrupts
}
#pragma interrupt_handler timer0_ovf_isr:iv_TIM0_OVF
void timer0_ovf_isr(void)
{
TCNT0 = 0xB2; //reload counter value
//时钟处理
CurSongTim[2]++;TotalSongTim[3]++;
if(CurSongTim[2]>=100) //百分秒溢出
{
CurSongTim[2]=0;
CurSongTim[1]++;
if(CurSongTim[1]>=60) //秒溢出
{
CurSongTim[1]=0;
CurSongTim[0]+=1;
//分处理:
//分处理结束
}
//秒处理:
if(SWPlayTime)
{
DisplayNumChar(6,88,CurSongTim[0],2); //显示当前歌曲播放时间 分
PrintOneASCII(6,104,':');
DisplayNumChar(6,112,CurSongTim[1],2); //显示当前歌曲播放时间 秒
}
//秒处理结束
}
if(TotalSongTim[3]>=100) //百分秒溢出
{
TotalSongTim[3]=0;
TotalSongTim[2]++;
if(TotalSongTim[2]>=60) //秒溢出
{
TotalSongTim[2]=0;
TotalSongTim[1]+=1;
//分处理:
}
//秒处理:
if(SWPlayTime)
{
DisplayNumChar(7,64,TotalSongTim[0],2); //显示全部歌曲播放时间 小时
PrintOneASCII(7,80,':');
DisplayNumChar(7,88,TotalSongTim[1],2); //显示全部歌曲播放时间 分
PrintOneASCII(7,104,':');
DisplayNumChar(7,112,TotalSongTim[2],2); //显示全部歌曲播放时间 分
}
//秒处理结束
if(TotalSongTim[1]>=60) //分溢出
{
TotalSongTim[1]=0;
TotalSongTim[0]+=1;
//小时处理:
if(TotalSongTim[0]>=24) //小时溢出
{
TotalSongTim[0]=0;
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -