1 /*本人水平太菜,代碼不怎么滴,希望給你帶來幫助,不喜勿噴*/
/*使兩位數碼管從00開始,間隔1s加1,加到15后回到00狀態。(要求:使用定時器1定時,定時50ms中斷一次。*/ 2 #include<reg51.h> 3 unsigned char code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; 4 sbit A1=P1^0;//我不太懂鎖存器,所以用的是74LS138模塊 5 sbit B1=P1^1; 6 sbit C1=P1^2; 7 int num=0,x=0;//num表示00-15的數,x表示重復次數 8 void delay(int i) //i * 1ms 9 { 10 int x,y; 11 for(x=0;x<i;x++) 12 for(y=0;y<120;y++); //1ms 13 } 14 main() 15 { 16 IE=0X88;//開中斷 17 TMOD=0x10; //定時器設置成工作方式1 18 TH1=(65536-50000)/256; //相當於50ms 19 TL1=(65536-50000)%256; 20 TR1=1; 21 while(1) 22 { 23 A1=0;B1=1;C1=1; 24 P0=tab[num/10]; 25 delay(1); 26 P0=0x00; 27 28 A1=1;B1=1;C1=1; 29 P0=tab[num%10]; 30 delay(1); 31 P0=0x00;//消隱用的 32 } 33 } 34 void timer1(void)interrupt 3 //定時器1中斷 3 35 { 36 if(x==20)//重復20次,相當於20*50ms=1000ms=1s 37 { 38 x=0; 39 num++; 40 if(num>15) 41 num=0; 42 } 43 TH1=(65536-50000)/256; 44 TL1=(65536-50000)%256; 45 x++; 46 }
protues仿真: