//stc8H2K08U  ̵
#include <COMM/STC8H.h>					 //MCUͷļ
#include "intrins.h"					 //nopָͷļ 
#include "stdio.h"/* Ҫڳʹô˴,ڳעʹSTCϼ            */

#define MAIN_Fosc        22118400UL											 
#define Timer0_Reload   (65536UL -(MAIN_Fosc / 1000))       //Timer 0 жƵ, 1000/

/*************  س    **************/
unsigned char code t_display[]={                       //P2
//   0    1    2    3    4    5    6    7    8    9    A    B    C    D    E    F
    0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,
//black  -   H    J    K    L    N    o   P    U     t    G    Q    r   M    y
    0x00,0x40,0x76,0x1E,0x70,0x38,0x37,0x5C,0x73,0x3E,0x78,0x3d,0x67,0x50,0x37,0x6e,
    0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF,0x46};    //0. 1. 2. 3. 4. 5. 6. 7. 8. 9. -1

unsigned char code T_COM[]={0x01,0x02,0x04,0x08};      //λP04λ


unsigned char  LED8[4];        //ʾ
unsigned char  display_index=0;  //ʾλ
bit B_1ms;          //1ms־

unsigned int msecond;   //



/********************** ʾʱӺ ************************/
void displayled(void)
{
    //ұһλ     
		LED8[0] =2;  
    LED8[1] =2;
    LED8[2] =3;
    LED8[3] =4;
		//ұλ
}



/********************  **************************/
void main(void)
{
  
/*
    WTST = 0;  //óָʱֵΪ0ɽCPUִָٶΪ
    EAXFR = 1; //չĴ(XFR)ʹ
    CKCON = 0; //߷XRAMٶ
*/

//LEDţSTCֱģ鶨ʱ0ã
	P2M0 = 0xff; P2M1 = 0x00; 
	P0M0 = 0xff; P0M1 = 0x00; 
//LED
//ʱ0
		AUXR |= 0x80;			//ʱʱ1Tģʽ
		TMOD &= 0xF0;			//öʱģʽ
    TH0 = (unsigned char)(Timer0_Reload / 256);
    TL0 = (unsigned char)(Timer0_Reload % 256);
    ET0 = 1;    //Timer0 interrupt enable
    TR0 = 1;    //Tiner0 run
    EA = 1;     //ж  
	
	
	
	
//ʱ0ãSTCֱģ鶨ʱ0ã

//ȫԹܣSTCֱģϵԣ
		LED8[0] =0xFF;
    LED8[1] =0xFF;
    LED8[2] =0xFF;
    LED8[3] =0xFF;
//ȫԹܣSTCֱģϵԣ

    while(1)
    { 
			//STCֱģ飩
        if(B_1ms)   //1ms
        {
            B_1ms = 0;
					        if(++msecond >= 1000)   //1뵽
            {
                msecond = 0;
                displayled();
            }
               
        }
			//STCֱģ飩
    }
}
//һDisplayScanܵɨʾöʱ0ʵ1msлһεĲˢʾܣSTCֱģ飩
/********************** ʾɨ躯 ************************/
void DisplayScan(void)
{   
	P0 = ~T_COM[3-display_index];							//Ҫȡ			//8λ74
	P2 = t_display[LED8[display_index]];						//ȡ					
    if(++display_index >= 4)    display_index = 0;  //8λ0          //8λ4λ
}


/********************** Timer0 1msжϺ ************************/
void Timer0_Isr(void) interrupt 1
{
    DisplayScan();  //1msɨʾһλ
    B_1ms = 1;      //1ms־

}
//һDisplayScanܵɨʾöʱ0ʵ1msлһεĲˢʾܣSTCֱģ飩