C51 COMPILER V8.02 JISHIQI 06/22/2010 11:32:23 PAGE 1 C51 COMPILER V8.02, COMPILATION OF MODULE JISHIQI OBJECT MODULE PLACED IN jishiqi.OBJ COMPILER INVOKED BY: D:\处理软件\keil\C51\BIN\C51.EXE jishiqi.c BROWSE DEBUG OBJECTEXTEND line level source 1 //可实现计时功能,最大计时时间为99小时。 2 //支持暂停功能,按键盘中左下角的S2键,可暂停计时;按下S3,可继续计时。 3 //注意晶振需为11.0592M。 4 //若为其他数值晶振,请改变TH0与TL0参数值,否则计时会有很大误差 。 5 6 #include 7 8 #define uchar unsigned char 9 10 sbit dula=P2^6; 11 sbit wela=P2^7; 12 sbit beep=P2^3; 13 sbit lcden=P3^4; 14 sbit rs=P3^5; 15 unsigned char halt,j,k,a1,a0,b1,b0,c1,c0,s,f,m,n=255; 16 unsigned int pp; 17 unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 18 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; 19 20 void delay(unsigned char i) 21 { 22 1 for(j=i;j>0;j--) 23 1 for(k=125;k>0;k--); 24 1 } 25 26 void display(uchar shi2,uchar shi1,uchar fen2,uchar fen1,uchar miao2,uchar miao1) 27 { 28 1 dula=0; 29 1 P0=table[shi2]; 30 1 dula=1; 31 1 dula=0; 32 1 33 1 wela=0; 34 1 P0=0xfe; 35 1 wela=1; 36 1 wela=0; 37 1 delay(5); 38 1 39 1 P0=table[shi1]|0x80; 40 1 dula=1; 41 1 dula=0; 42 1 43 1 P0=0xfd; 44 1 wela=1; 45 1 wela=0; 46 1 delay(5); 47 1 48 1 P0=table[fen2]; 49 1 dula=1; 50 1 dula=0; 51 1 52 1 P0=0xfb; 53 1 wela=1; 54 1 wela=0; 55 1 delay(5); C51 COMPILER V8.02 JISHIQI 06/22/2010 11:32:23 PAGE 2 56 1 57 1 P0=table[fen1]|0x80; 58 1 dula=1; 59 1 dula=0; 60 1 61 1 P0=0xf7; 62 1 wela=1; 63 1 wela=0; 64 1 delay(5); 65 1 66 1 P0=table[miao2]; 67 1 dula=1; 68 1 dula=0; 69 1 70 1 P0=0xef; 71 1 wela=1; 72 1 wela=0; 73 1 delay(5); 74 1 75 1 P0=table[miao1]; 76 1 dula=1; 77 1 dula=0; 78 1 79 1 P0=0xdf; 80 1 wela=1; 81 1 wela=0; 82 1 delay(5); 83 1 } 84 85 void keyscan() 86 { 87 1 if(lcden==0) 88 1 delay(10); 89 1 if(lcden==0) 90 1 { 91 2 halt=1; 92 2 } 93 1 if(rs==0) 94 1 halt=0; 95 1 } 96 97 void main() 98 { 99 1 TMOD=0x01; 100 1 TR0=1; 101 1 TH0=(65536-46080)/256;// 由于晶振为11.0592,故所记次数应为46080,计时器每隔50000微秒发起一次中断。 102 1 TL0=(65536-46080)%256;//46080的来历,为50000*11.0592/12 103 1 ET0=1; 104 1 EA=1; 105 1 while(1) 106 1 { keyscan(); 107 2 if(halt==0) 108 2 { 109 3 TR0=1; 110 3 if(pp==20) 111 3 { pp=0; 112 4 m++; 113 4 n--; 114 4 P1=n;//闪烁灯 115 4 if(m==60) 116 4 { 117 5 m=0; C51 COMPILER V8.02 JISHIQI 06/22/2010 11:32:23 PAGE 3 118 5 f++; 119 5 if(f==60) 120 5 { 121 6 f=0; 122 6 s++; 123 6 if(s==99) 124 6 { 125 7 s=0; 126 7 } 127 6 } 128 5 } 129 4 } 130 3 131 3 a0=s%10; 132 3 a1=s/10; 133 3 b0=f%10; 134 3 b1=f/10; 135 3 c0=m%10; 136 3 c1=m/10; 137 3 display(a1,a0,b1,b0,c1,c0); 138 3 } 139 2 else 140 2 TR0=0; 141 2 display(a1,a0,b1,b0,c1,c0); 142 2 } 143 1 } 144 145 void time0() interrupt 1 146 {TH0=(65536-46080)/256; 147 1 TL0=(65536-46080)%256; 148 1 pp++; 149 1 } MODULE INFORMATION: STATIC OVERLAYABLE CODE SIZE = 325 ---- CONSTANT SIZE = 16 ---- XDATA SIZE = ---- ---- PDATA SIZE = ---- ---- DATA SIZE = 15 6 IDATA SIZE = ---- ---- BIT SIZE = ---- ---- END OF MODULE INFORMATION. C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)