📄 main.lst
字号:
C51 COMPILER V8.02 MAIN 07/16/2007 12:56:06 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*一个机器周期采样值为1,下一个机器周期采样为0,则计数器加1*/
2 /*外部事件的最高计数频率为晶振的1/24,故最高计数为0.9216M;*/
3 /*目前状态下只是显示0到9999HZ的频率*/
4 /*原创作者:陈永刚*/
5 /*优化整理:tiansir*/
6
7 /*测频率原理*/
8 /*定时器T0作为定时装置,编程设定定时1s,定时器T1对外部信号计数,每1S中对计数结果处理*/
9
10 #include<reg51.h>
11 #include<absacc.h>
12
13 #define SEG_Q XBYTE[0xfcec]
14 #define SEG_B XBYTE[0xfced]
15 #define SEG_S XBYTE[0xfcee]
16 #define SEG_G XBYTE[0xfcef]
17
18 //通用数码管显示函数,传入数据0~9999
19 void renew_disp(unsigned int number)
20 {
21 1 unsigned char code tab1[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
22 1 unsigned char temp,flag=0;
23 1
24 1 if(number < 10000)
25 1 {
26 2 //千位数码管
27 2 temp = number/1000%10;
28 2 if (temp)
29 2 {
30 3 SEG_Q = tab1[temp];
31 3 flag = 1;
32 3 }
33 2 else
34 2 {
35 3 SEG_Q = 0xff;//数码管熄灭
36 3 flag = 0;
37 3 }
38 2
39 2 //百位数码管
40 2 temp = number/100%10;
41 2 if(flag | temp)
42 2 {
43 3 SEG_B = tab1[temp];
44 3 flag = 1;
45 3 }
46 2 else
47 2 {
48 3 SEG_B = 0xff;//数码管熄灭
49 3 flag = 0;
50 3 }
51 2
52 2 //十位数码管
53 2 temp = number/10%10;
54 2 if(flag | temp) SEG_S = tab1[temp];
55 2 else SEG_S = 0xff;//数码管熄灭
C51 COMPILER V8.02 MAIN 07/16/2007 12:56:06 PAGE 2
56 2
57 2 //个位数码管
58 2 temp = number%10;
59 2 SEG_G = tab1[temp];
60 2 }
61 1 else
62 1 {
63 2 SEG_Q = 0xbf;
64 2 SEG_B = 0xbf;
65 2 SEG_S = 0xbf;
66 2 SEG_G = 0xbf;
67 2 }
68 1 }
69
70 //T0定时中断,晶振22.1184M
71 void T0_int(void) interrupt 1
72 {
73 1 static char counter=0;
74 1 TH0=(65536-46063)/256;
75 1 TL0=(65536-46063)%256;
76 1 if(counter++==39)
77 1 {
78 2 counter=0;
79 2 TR1=0;
80 2 renew_disp(256*TH1+TL1);
81 2 TH1=TL1=0;
82 2 TR1=1;
83 2 }
84 1 }
85
86 void main()
87 {
88 1 TMOD = 0x51;/*01010001 T1计数,T0定时*/
89 1 TH1 = 0;
90 1 TL1 = 0;
91 1 //晶振22.1184M
92 1 TH0 = (65536-46063)/256;//定时25MS
93 1 TL0 = (65536-46063)%256;
94 1 TR0 = 1; //开定时器0
95 1 TR1 = 1; //启动计时器1
96 1 EA = 1; //开总中断
97 1 ET0 = 1; //开定时器0中断
98 1 while(1); //原地踏步,等待中断
99 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 296 ----
CONSTANT SIZE = 10 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 1 2
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -