#includetypedef unsigned char uint8; typedef unsigned int uint16; uint8 flag=0; uint16 i=0; sbit led1=P1^6; sbit led2=P1^7; sbit bee=P1^5; code uint8 ledcode[]={ 0xC0, // 0 0xF9, // 1 0xA4, // 2 0xB0, // 3 0x99, // 4 0x92, // 5 0x82, // 6 0xF8, // 7 0x80, // 8 0x90, // 9 0x88, // A 0x83, // B 0xC6, // C 0xA1, // D 0x86, // E 0x8E // F }; uint8 table[]={0,0}; void timer0_init() { TMOD|=0x01; //工作模式1 TMOD&=0xfd; TH0=0xdc; //初始值 10ms ×100=1s TL0=0x00; TR0=1; } void intr_init() { ET0=1; //timer0中断开启 EA=1; //总中断开启 } [page] void frush() //动态显示数码管 10ms扫描一次 { static uint8 k=0; switch (k) { case 0 :led1=0;led2=1;P2=ledcode[table[0]]; break; //低位 case 1 :led2=0;led1=1;P2=ledcode[table[1]]; break; //高位 } k++; if(k==2) k=0; } void main() { timer0_init(); intr_init(); led1=1; led2=1; while(1); } void timer0_interrupt() interrupt 1 //中断函数 { static uint8 sec=0; TH0=0xdc; TL0=0x00; frush(); if(flag==0) { i++; if(i==100 ) { i=0; sec++; table[0]=sec%10; table[1]=sec/10%10; if (sec==60) //到60秒 { bee=0; flag=1; } } } }
仿真: