# [2021/05/13] 微處裡作業 ``` #include "../_8051/AT89X52.H" void beepGround(unsigned char); void show7(unsigned int); sfr Data = 0x80; sbit SSLED0 = 0x90; sbit SSLED1 = 0x91; sbit SSLED2 = 0x92; sbit SSLED3 = 0x93; sbit SPK=0xA6; sbit KEY = P3^2; unsigned char delay_t = 1; unsigned char scan_t = 1; unsigned char code Table[] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71 }; unsigned char code Table_Length = 10; void main(){ unsigned int i = 9995; SPK = 0; while(1){ if(i<9995){ ++i; show7(i); }else{ if(i>=10000){ i = 0; beepGround(5); continue; } do{ while(KEY==1)show7(i); Delay_ms(20); }while(KEY==1); ++i; do{ while(KEY==0)show7(i); Delay_ms(20); }while(KEY==0); } } } void show7(unsigned int i){ unsigned char scan; unsigned char num; for(scan=0;scan<10;++scan){ SSLED0 = SSLED1 = SSLED2 = SSLED3 = 1; num=i%10; Data = ~Table[num]; SSLED0 = 0; Delay_ms(scan_t); SSLED0 = SSLED1 = SSLED2 = SSLED3 = 1; num=(i%100)/10; Data = ~Table[num]; SSLED1 = 0; Delay_ms(scan_t); SSLED0 = SSLED1 = SSLED2 = SSLED3 = 1; num=(i%1000)/100; Data = ~Table[num]; SSLED2 = 0; Delay_ms(scan_t); SSLED0 = SSLED1 = SSLED2 = SSLED3 = 1; num=i/1000; Data = ~Table[num]; SSLED3 = 0; Delay_ms(scan_t); } SSLED0 = SSLED1 = SSLED2 = SSLED3 = 1; } void beepGround(unsigned char j){ unsigned int i; while(j--){ for(i=0;i<=400;++i) { SPK = !SPK; Delay_ms(1); } Delay_ms(200); } SPK = 0; } ```