📄 3.lst
字号:
C51 COMPILER V6.23a 3 04/24/2007 09:41:58 PAGE 1
C51 COMPILER V6.23a, COMPILATION OF MODULE 3
OBJECT MODULE PLACED IN 3.OBJ
COMPILER INVOKED BY: D:\PROGRA~1\keil\C51\Bin\c51.exe 3.c DB OE SMALL ROM(LARGE)
stmt level source
1 #include <reg52.h>
2 #include <intrins.h>
3 sbit SDATA=P3^0;
4 sbit SCLK=P3^1;
5 sbit FSYNC=P3^7;
6
7 unsigned char k_value _at_ 0x30;//k_value为键值
8 unsigned char bdata protect _at_ 0x20;//对位变量区进行保护
9 unsigned char i; //定时器统计时基用
10 float f_word; //频率值
11 unsigned long f_bj; //频率步进量
12 unsigned char key_word; //核心状态控制量
13
14 sbit k_f = protect^0;//k_f为有键按下标志位
15 sbit zh = protect^1;//位中转,用于保存C,在键盘采值子程序中
16 sbit ss = protect^2;//数码管闪烁控制位
17 sbit k_rx= protect^3;//修改频率状态标志位
18 sbit f_sx= protect^4;//正弦波状态频率刷新请求,为1使能
19 sbit f_sxs=protect^5;//三角波状态频率刷新请求,为1使能
20 sbit f_squ=protect^6;//方波状态频率刷新请求,为1使能
21
22 //程序编号:0
23 //名称:键盘采值子程序
24 //功能:把采到的值在保存在k_value中(30H),并置位k_f(位00H)
25 void keyboard(void);//键盘采值函数,真正的函数体是用汇编语言写的,在keyboard文件中
26
27 //编号7,延时2ms
28 void dl_2ms (void)
29 {unsigned int i;
30 1 for(i=0;i<580;i++)
31 1 {}
32 1 }
33
34 //编号12
35 //0.5S定时信号产生
36 void second_500ms() interrupt 1 using 0
37 {TH0=0xBF;
38 1 TL0=0x63;
39 1 if(i<=25)
40 1 {i++;}
41 1 else
42 1 {i=0;
43 2 ss=!ss;
44 2 }
45 1 TF0=0;
46 1 }
47
48 //编号3,显示频率函数。。。。。。。。。。。。。。。
49 //将频率值分成八个单数送到数码管显示
50 void dispaly (float f_word,unsigned char XC)//f_word为频率值,XC为控制位,数字表示相应位灭
51 {unsigned char led_1;//数码管个位
52 1 unsigned char led_2;//数码管十位
53 1 unsigned char led_3;//数码管百位
54 1 unsigned char led_4;//数码管K位
55 1 unsigned char led_5;//数码管10K位
C51 COMPILER V6.23a 3 04/24/2007 09:41:58 PAGE 2
56 1 unsigned char led_6;//数码管100K位
57 1 unsigned char led_7;//数码管m位
58 1 unsigned char led_8;//数码管10m位
59 1
60 1 unsigned char code xsm[11]= {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
61 1 0x07,0x7f,0x6f,0x00};
62 1
63 1 led_8=(unsigned long)f_word/10000000;//提取十兆位
64 1 led_7=(unsigned long)f_word/1000000%10;//提取兆位
65 1 led_6=(unsigned long)f_word/100000%10;//提取100K位
66 1 led_5=(unsigned long)f_word/10000%10;//提取10K位
67 1 led_4=(unsigned long)f_word/1000%10;//提取1K位
68 1 led_3=(unsigned long)f_word/100%10;//提取百位
69 1 led_2=(unsigned long)f_word/10%10;//提取十位
70 1 led_1=(unsigned long)f_word%10;//提取个位
71 1
72 1 if(led_8==0) //高位为0消影
73 1 {led_8=0x0a;
74 2 if(led_7==0)
75 2 {led_7=0x0a;
76 3 if(led_6==0)
77 3 {led_6=0x0a;
78 4 if(led_5==0)
79 4 {led_5=0x0a;
80 5 if(led_4==0)
81 5 {led_4=0x0a;
82 6 if(led_3==0)
83 6 {led_3=0x0a;
84 7 if(led_2==0)
85 7 {led_2=0x0a;
86 8 if(led_1==0)
87 8 {led_1=0x0a;
88 9 }
89 8 }
90 7 }
91 6 }
92 5 }
93 4 }
94 3 }
95 2 }
96 1
97 1 if(XC==1)
98 1 {P0 = 00; // 关闭最右边的一个,个位
99 2 P2 = 0x80;}
100 1 else
101 1 {led_1=xsm[led_1];//数转码
102 2 P0=0;
103 2 P2 = 0x80;// 选中最右边的一个
104 2 P0=led_1;
105 2 dl_2ms();}//送码
106 1
107 1 if(XC==2) //十位
108 1 {P0 = 00;
109 2 P2 = 0x40;
110 2 }
111 1 else
112 1 {led_2=xsm[led_2];//数转码
113 2 P0=0;
114 2 P2 = 0x40;//
115 2 P0=led_2;
116 2 dl_2ms();}//送码
117 1
C51 COMPILER V6.23a 3 04/24/2007 09:41:58 PAGE 3
118 1 if(XC==3) //百位
119 1 {P0 = 00;
120 2 P2 = 0x20;
121 2 }
122 1 else
123 1 {led_3=xsm[led_3];//数转码
124 2 P0=0;
125 2 P2 = 0x20;//
126 2 P0=led_3;
127 2 dl_2ms();}//送码
128 1
129 1 if(XC==4) //K位
130 1 {P0 = 00;
131 2 P2 = 0x10;
132 2 }
133 1 else
134 1 {led_4=xsm[led_4];//数转码
135 2 P0=0;
136 2 P2 = 0x10;//
137 2 P0=led_4;
138 2 dl_2ms();}//送码
139 1
140 1 if(XC==5) //10K位
141 1 {P0 = 00;
142 2 P2 = 0x08;
143 2 }
144 1 else
145 1 {led_5=xsm[led_5];//数转码
146 2 P0=0;
147 2 P2 = 0x08;//
148 2 P0=led_5 ;
149 2 dl_2ms();}//送码
150 1
151 1 if(XC==6) //100K位
152 1 {P0 = 00;
153 2 P2 = 0x04;
154 2 }
155 1 else
156 1 {led_6=xsm[led_6];//数转码
157 2 P0=0;
158 2 P2 = 0x04;//
159 2 P0=led_6 ;
160 2 dl_2ms();}//送码
161 1
162 1 if(XC==7) //M位
163 1 {P0 = 00;
164 2 P2 = 0x02;
165 2 }
166 1 else
167 1 {led_7=xsm[led_7];//数转码
168 2 P0=0;
169 2 P2 = 0x02;//
170 2 P0=led_7 ;
171 2 dl_2ms();}//送码
172 1
173 1 if(XC==8) //10M位,最左边的数码管
174 1 {P0 = 00;
175 2 P2 = 0x01;
176 2 }
177 1 else
178 1 {led_8=xsm[led_8];//数转码
179 2 P0=0;
C51 COMPILER V6.23a 3 04/24/2007 09:41:58 PAGE 4
180 2 P2 = 0x01;//
181 2 P0=led_8;
182 2 dl_2ms();}//送码
183 1 }
184
185 //函数编号4,串行发送16位数据
186 void send_2B(unsigned int word)
187 {unsigned char i;
188 1 EA=0;//时序严格要求区,必须关闭中断
189 1 SCLK=1;
190 1 SDATA=0;
191 1 FSYNC=1;
192 1 _nop_ ();
193 1 _nop_ ();
194 1 FSYNC=0;
195 1 for (i=0;i<16;i++)
196 1 {SCLK=1;
197 2 if(word&0x8000)
198 2 {SDATA=1;}
199 2 else
200 2 {SDATA=0;}
201 2 _nop_ ();
202 2 SCLK=0;
203 2 word=word<<1;
204 2 SCLK=1;
205 2 SDATA=0;
206 2 }
207 1 FSYNC=1;
208 1 EA=1;//操作完毕后开启中断
209 1 }
210
211
212 //函数编号编号5,将期望频率值换算为AD9833控制字并发
213 void frejs(float fout)//频率计算,处理。频率控制函数,入口参数为频率值,经该函数处理,直接控制AD9833输出相
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -