close
程式如下 是用sdcc 寫的,不過有一些註解說明,因為是linux的小筆電,所以有亂碼還有不易對齊
真不知有沒有好方法可以克服這種情形
// FILE:key18.c
// SDCC
// AUTHOR: Naga
// CREATED: 2009.5.06
// PURPOSE: timer1&timer2
#include "8052.h"
// io port Description
#define _ONE P2_4
#define _TWO P2_5
#define _THREE P2_6
#define _FOUR P2_7
#define BIBI P2_0
#define BARUBO P1_6
#define KEY0 P1_4
#define KEY1 P1_5
const _7_seg[12]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xD8,0x80,0x98,0xff,0xBF};
int time_cnt,sec_cnt;
unsigned char _1_sec_cnt=0x28 ;
//�@�� �p��
unsigned char scan_cnt=0X00;
//��ܱ��˪���ƫ��
unsigned char key_cnt0=0x00,key_cnt1=0x00,key_cnt2=0x00;
unsigned char key_cnt0_0=0x00,key_cnt1_1=0x00,key_cnt2_2=0x00;
unsigned char disp_0,disp_1,disp_2,disp_3 ;
// ----------------------------------------------
void LCD_L_Delay(int WAIT_LOOP)
{ int L_Loop ;
for ( L_Loop = 0 ; L_Loop < WAIT_LOOP ; L_Loop ++ )
{}
}
//-------------------------------------------------
void Init_IRQ()
{
// ET0 = 0x01; //Enable Timer Interrupt 0
ET1 = 0x01; //Enable Timer Interrupt 1
ET2 = 0x01; //Enable Timer Interrupt 2
TMOD = 0X10 ;
TH1 = 0X3C ;
TL1 = 0XB0 ;
T2CON = 0X00 ;
RCAP2H = 0XFA ;
RCAP2L = 0X00 ;
EA = 0x01 ; //Enable All Interrupt
TR1 = 0X01 ; //START TIMER1
T2CON |= 0X04 ; //START TIMER2
}
void Timer_Interrupt_1() interrupt 3
{ _1_sec_cnt -- ;
if (_1_sec_cnt==0) // �p��1��
{ time_cnt ++ ;
_1_sec_cnt=0x28 ;}
if (time_cnt>=60) //�C60��i�@
{sec_cnt+=1;
time_cnt=0; }
// BIBI = !BIBI ;
TH1 = 0X3C ;
TL1 = 0XB0 ;
}
void Timer_Interrupt_2() interrupt 5
{
T2CON &= 0X7F; //CLEAR TIMER2 INT_FLAG
// BIBI = !BIBI ;
if (scan_cnt>3) scan_cnt=0x00;
// �� switch �N�i�������ҭn��檺����,�B��槹,���Wbreak��X
switch(scan_cnt)
{
case 0:
P0=0XFF;
_ONE=0x00;
_TWO=0x01;
_THREE=0X01;
_FOUR=0X01;
P0= _7_seg[disp_0] ;
scan_cnt ++ ;
break;
case 1:
P0=0XFF;
_ONE=0x01;
_TWO=0x00;
_THREE=0X01;
_FOUR=0X01;
P0= _7_seg[disp_1] ;
scan_cnt ++ ;
break;
case 2:
P0=0XFF;
_ONE=0x01;
_TWO=0x01;
_THREE=0X00;
_FOUR=0X01;
P0= _7_seg[disp_2]&0x7F ; // �j���I�G�p���I
scan_cnt ++ ;
break;
case 3:
P0=0XFF;
_ONE=0x01;
_TWO=0x01;
_THREE=0X01;
_FOUR=0X00;
scan_cnt ++ ;
break;
}
}
void main(void) //�`�N�bSDCC��,main�����������p�g
{
BIBI=0X01;
KEY0=0X01;
KEY1=0X01;
LCD_L_Delay (143) ;
Init_IRQ();
while (1)
{
disp_0 = time_cnt % 10 ;
disp_1 = (time_cnt/10)%10 ;
disp_2= (sec_cnt%10);
disp_3 = (sec_cnt/10)%10 ;
}
}
全站熱搜
留言列表