外部異步時鐘的操作
#define uchar unsigned char
#define uint unsigned int
#define OUT PORTA
uchar Da
uchar CNT;//定義中斷次數(shù)
void DelayMs(uint i) //0.25ms
{uchar j;
for(;i!=0;i--)
{for(j=250;j!=0;j--) {;}}
}
/************以下為顯示*************************/
void Display(uchar *p) //適當?shù)卣{(diào)節(jié)延時,可以改變其亮度
{
OUT=0x70+p[0]; DelayMs(15);
OUT=0xb0+p[1]; DelayMs(15);
OUT=0xd0+p[2];
DelayMs(15);
OUT=0xe0+p[3]; DelayMs(15);
}
/****************************************/
/**************以下為端口初使化*******************/
void intio()
{
DDRA=0XFF;
OUT=0XFF;
}
/*****************以下為溢出處理*******************/
void dealwith(uchar *p)
{
p[3]++;
if(p[3]==10){p[3]=0;p[2]++;}
if(p[2]==6) {p[2]=0;p[1]++;}
if(p[1]==10){p[1]=0;p[0]++;}
if(p[0]==6) {p[0]=0;}
}
/***********************************************/
void main()
{uchar i;
intio();
DelayMs(2000);
ASSR=0X08;//異步時鐘使能
TCCR2=0X07;//1024分頻
TIMSK=0X40;//T/C2中斷使能
SREG=SREG|0X80;//全局中斷使能
while(1)
{
Display(Da
if(TCNT2==32)
{TCNT2=0;
dealwith(Da
}
}
}
/*********************
//1.由于ATMEGA8中沒有A口,故采用一宏定義,只能在ATMEGA8中采用D口,也因此在設(shè)計中,采用宏定義;
//2.經(jīng)測試:采用內(nèi)部2M及以下運行不穩(wěn)定,故推薦采用場4M—8M;
//3.關(guān)于外部采用外部異步晶振不必采用外接電容,內(nèi)部有36PF電容;當然接上也無防;
//4.注意32.768K晶振的使用,以及1024分頻;
評論