?? 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 + -