📄 frequency.lst
字号:
C51 COMPILER V7.06 FREQUENCY 07/31/2007 13:31:02 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE FREQUENCY
OBJECT MODULE PLACED IN E:\试验版~1\C\FREQUENCY.OBJ
COMPILER INVOKED BY: C:\keil\C51\BIN\C51.EXE E:\试验版~1\C\FREQUENCY.C DB SB OE
stmt level source
1 # include<reg52.h>
2 # include<stdio.h>
3 # include<intrins.h>
4
5 # define uchar unsigned char
6 # define uint unsigned int
7
8 uint n0; //计数次数
9 uint n1;
10 uint n2;
11 uint n3;
12 uint n4;
13 uint n5;
14
15 uchar n6; //产生0.4S阀门
16
17 float s;
18 uchar a[2]; //装整数
19 uchar b[6]; //装小数
20
21 uchar cmd;
22 uchar state; //模式信号
23 bit flag0; //测频段信号
24 bit flag1; //占空比模式下测脉宽信号
25
26 //*********************************************************//
27 // 延时子程序 //
28 //*********************************************************//
29 void delay(unsigned char n)
30 {unsigned char i;
31 1 for(i=0;i<n;i++);
32 1 }
33
34 //*********************************************************//
35 // 按键子程序 //
36 //*********************************************************//
37 void key()
38 {
39 1 unsigned char key;
40 1 key=(P2&&0X0F);
41 1 delay(711);
42 1 delay(711);
43 1 switch(key)
44 1 {case 0X0E: state=1;
45 2 break;
46 2 case 0X0D: state=2;
47 2 break;
48 2 case 0X0B: state=3;
49 2 break;
50 2 case 0X07: state=4;
51 2 break;
52 2 default: state=0;
53 2 }
54 1 }
55 //*********************************************************//
C51 COMPILER V7.06 FREQUENCY 07/31/2007 13:31:02 PAGE 2
56 // 数据处理子程序 //
57 //*********************************************************//
58 void data_process()
59 {float tcy=12/10*1000000;
60 1
61 1 switch(state)
62 1 {case 1: if(cmd==0X40)
63 2 s=1/(2*tcy*n3/2); //HZ
64 2 else if(cmd==0X20)
65 2 s=1/(2*tcy*n3/1024*1000); //KHZ
66 2 else if(cmd==0X10)
67 2 s=1/(2*tcy*n3/131072*1000000); //MHZ
68 2 break;
69 2 case 2: if(P1==0X40)
70 2 s=2*tcy*n3/2; //s
71 2 else if(P1==0X20)
72 2 s=2*tcy*n3/1024*1000; //ms
73 2 else if(P1==0X10)
74 2 s=2*tcy*n3/131072*1000000; //us
75 2 break;
76 2 case 3: s=tcy*n5;
77 2 break;
78 2 case 4: if(cmd==0X40)
79 2 s=n5/n3;
80 2 else if(cmd==0x20)
81 2 s=512*n5/n3;
82 2 else if(cmd==0x10)
83 2 s=65536*n5/n3;
84 2 }
85 1 }
86 //*********************************************************//
87 // 数据转换子程序 //
88 //*********************************************************//
89 void zhuan_huan()
90 {a[0]=s/10;
91 1 a[1]=s/1-a[0]*10;
92 1 s=(s-a[0]*10-a[1])*1000000;
93 1 b[0]=s/100000;
94 1 b[1]=s/10000-b[0]*10;
95 1 b[2]=s/1000-b[1]*10-b[0]*100;
96 1 b[3]=s/100-b[2]*10-b[1]*100-b[0]*1000;
97 1 b[4]=s/10-b[3]*10-b[2]*100-b[1]*1000-b[0]*10000;
98 1 b[5]=s/1-b[4]*10-b[3]*100-b[2]*1000-b[1]*10000-b[0]*100000;
99 1 }
100 //*********************************************************//
101 // LCD显示子程序 //
102 //*********************************************************//
103 sbit dc=P1^4; //RS
104 sbit rw=P1^5; //RW
105 sbit cs=P1^6; //E
106 sfr lcdbus=0x80; //D0--D7
107
108 void soft_nop(){}
109 /****************检查LCD忙*******************/
110 bit lcd_checkbusy() /*检查LCD 忙*/
111 {register lcdstate;
112 1 dc=0; /*dc=1为数据,=0 为命令.*/
113 1 rw=1; /*rw=1为读,=0为写.*/
114 1 cs=1; /*cs=1选通.*/
115 1 soft_nop();
116 1 lcdstate=lcdbus;
117 1 cs=0;
C51 COMPILER V7.06 FREQUENCY 07/31/2007 13:31:02 PAGE 3
118 1 return((bit)(lcdstate&0x80));
119 1 }
120 /***************写LCD命令*******************/
121 void lcd_wrcmd(uchar lcdcmd)
122 {while(lcd_checkbusy());
123 1 dc=0; /*dc=1为数据,=0 为命令.*/
124 1 rw=0; /*rw=1为读,=0为写.*/
125 1 cs=1; /*cs=1选通.*/
126 1 lcdbus=lcdcmd;
127 1 soft_nop();
128 1 cs=0;
129 1 }
130 /**************在当前显示位置显示数据********************/
131 void lcd_wrdata(char lcddata)
132 {while(lcd_checkbusy());
133 1 dc=1; /*dc=1为数据,=0 为命令.*/
134 1 rw=0; /*rw=1为读,=0为写.*/
135 1 cs=1; /*cs=1选通.*/
136 1 lcdbus=lcddata;
137 1 soft_nop();
138 1 cs=0;
139 1
140 1 }
141 /*************在当前显示位置显示LCD 字符串***************/
142 void lcd_string(char *strpoint)
143 { register i=0;
144 1 while(strpoint[i]!=0)
145 1 {lcd_wrdata(strpoint[i]);
146 2 i++;
147 2 }
148 1 }
149 /**********************初始化************************/
150 void lcd_init()
151 {lcd_wrcmd(0x38); /*设置8 位格式,2行,5*7*/
152 1 lcd_wrcmd(0x0c); /*整体显示,关光标,不闪烁*/
153 1 lcd_wrcmd(0x06); /*设定输入方式,增量不移位*/
154 1 lcd_wrcmd(0x01); /*清除显示*/
155 1 }
156 /***********************主函数***********************/
157 void lcd()
158 {uchar i;
159 1 lcd_init();
160 1 delay(711);
161 1 delay(711);
162 1
163 1 switch(state) //送模式和单位
164 1 {
165 2 case 1: lcd_string("FREQUENCY");
166 2 lcd_wrcmd(0X8C);
167 2 if(cmd==0X40)
168 2 lcd_string("HZ");
169 2 else if(cmd==0X20)
170 2 lcd_string("KHZ");
171 2 else
172 2 lcd_string("MHZ");
173 2 break;
174 2 case 2: lcd_string("PERIOD");
175 2 lcd_wrcmd(0X8C);
176 2 if(cmd==0X40)
177 2 lcd_string("S");
178 2 else if(cmd==0X20)
179 2 lcd_string("MS");
C51 COMPILER V7.06 FREQUENCY 07/31/2007 13:31:02 PAGE 4
180 2 else
181 2 lcd_string("US");
182 2 break;
183 2 case 3: lcd_string("MAIKUAN");
184 2 lcd_wrcmd(0X8C);
185 2 lcd_string("s");
186 2 break;
187 2 case 4: lcd_string("ZHANKONGBI");
188 2 }
189 1
190 1 lcd_wrcmd(0XC3); //送整数
191 1 for(i=0;i<2;i++)
192 1 {a[i]=a[i]+0X30;
193 2 lcd_wrdata(a[i]);
194 2 }
195 1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -