📄 isr.c
字号:
#define P_Watchdog_Clear (volatile unsigned int *)0x7012
#define P_INT_Ctrl (volatile unsigned int *)0x7010
#define P_INT_Clear (volatile unsigned int *)0x7011
#define C_IRQ5_2Hz 0x0004 // P_INT_Ctrl
extern unsigned int ascNow[14];
extern void GET1302(unsigned int* cur_time);
extern void SET1302(unsigned int* pClock);
extern void flash_LCD();
extern void wr_comm(unsigned int comm);
extern void wr_data(unsigned int data);
void bcd2asc(unsigned int* bcd,unsigned int* asc);
unsigned int i;
void IRQ5(void)__attribute__((ISR));
void IRQ5(void)
{
unsigned int bcdNow[7];
GET1302(bcdNow);
bcd2asc(bcdNow,ascNow);
*P_Watchdog_Clear=1;
flash_LCD();
wr_comm(0x97);
if(i&1) wr_data(2);
else wr_data(1);
i++;
*P_INT_Clear=C_IRQ5_2Hz;
}
//以下为BCD码转换为ASCII码程序
void bcd2asc(unsigned int* bcd,unsigned int* asc)
{
unsigned int asc0,asc1;//asc0存个位ASC码,asc1存十位ASC码
int i;
for(i=0;i<7;i++)
{
*P_Watchdog_Clear=1;
asc0=bcd[i]&0x000f;//为个位BCD码
asc1=bcd[i]&0x00f0;
asc1>>=4;//为十位BCD码 0000 0000 0000 XXXX
asc0+=0x30;//加上0X30转为ASC码
/* 以下为12小时进制的识别语句
if(asc1&0x08)
{//如果时为12小时制
asc1&=0x08;//去掉最高识别位
if(asc1&0x02)
{//为上午,
asc1&=0x02;//去掉上午识别位
asc1|=0x80;//置asc1的低八位最高位为上午识别位
}
}
*/
asc1+=0x30;
asc[2*i]=asc1;//保存搞定的ASC码
asc[2*i+1]=asc0;
}//for
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -