📄 oscilloscope.lst
字号:
C51 COMPILER V7.09 OSCILLOSCOPE 08/15/2005 19:39:16 PAGE 1
C51 COMPILER V7.09, COMPILATION OF MODULE OSCILLOSCOPE
OBJECT MODULE PLACED IN oscilloscope.OBJ
COMPILER INVOKED BY: c:\Keil\C51\BIN\C51.EXE oscilloscope.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include<AT89X52.H>
2 #include<absacc.h>
3 #include<intrins.h>
4 #define unchar unsigned char
5 #define unint unsigned int
6 #define DisCmd XBYTE [0xC100] //7218控制字地址
7 #define DisData XBYTE [0xC000] //7218数据口地址
8 #define LedMode P1_5
9 #define scode 0xb0 //7218软件译码方式命令字
10 #define bcode 0x90 //B码译码方式命令字
11 #define hexcode 0xd0 //软件译码方式命令字
12
13 //*****************************************************************************************************
14 //#define Select_A XBYTE[0xA0F3] //|A路选通/断路 | 01/00
15 #define Select_AB XBYTE[0xA0F3] //|A,B路选通/断路 | 01/02/03(A,B,AB)
16 #define Vertical_Gain_A XBYTE[0xA0F4] //|A垂直增益挡位(三挡) | 00/01/02
17 #define Vertical_Move_A XBYTE[0xA0F5] //|A垂直移动波形 | 00 ~ FF
18 //#define Select_B XBYTE[0xA0F6] //|B路选通/断路 | 01/00
19 #define Vertical_Gain_B XBYTE[0xA0F7] //|B垂直增益挡位(三挡) | 00/01/02
20 #define Vertical_Move_B XBYTE[0xA0F8] //|B垂直移动波形 | 00 ~ FF
21 #define Single_Auto_Select XBYTE[0xA0F9] //|单次/连续触发方式切换; | 01/00
22 #define Trigger_Voltage XBYTE[0xA0FA] //|单次触发电平值 | 00 ~ FF
23 #define Lock_Wave XBYTE[0xA0FB] //|锁存当前波形; | 先01后00
24 #define X_Freq_High XBYTE[0xA0FC] //|水平增益频率高八位; | 00 ~ 3F
25 #define X_Freq_Low XBYTE[0xA0FD] //|水平增益频率低八位; | 00 ~ FF
26 #define X_Move XBYTE[0xA0FE] //|水平移动相位八位; | 00 ~ C7
27 #define RESET XBYTE[0xA0FF] //|重置信号reset; | 置01
28 //*****************************************************************************************************
29 bit Enter; //enter键按下标志
30 bit Glint_Flag; //闪烁标志位
31 bit Special_Down_Flag;
32 bit Shift_Flag;
33 bit Lock_Wave_Flag;
34 //bit Select_A_Flag;
35 //bit Select_B_Flag;
36 //bit Lock_Wave;
37 bit Led_On=1;
38 unchar Select_Flag;
39
40 unchar keynum;
41 unchar Single_Flag; //单步标志
42 unchar Vertical_Pos_A; //垂直偏移位置A
43 unchar Vertical_Pos_B; //垂直偏移位置B
44 unchar Vertical_Gain_A_Grade; //垂直增益等级A
45 unchar Vertical_Gain_B_Grade; //垂直增益等B
46 unint X_Frequence; //X轴扫描频率
47 unint X_Pos; //X轴平移位置
48 unint Trigger_V; //触发电平
49 unchar Key_Flag; //功能键按键标志
50 unchar ledcursor=7; //保存光标当前位置
51 unchar distab[8]={0x12,0x13,0x14,0x00,0x12,0x12,0x0e,0x11}; //要显示的内容 hello-pp
52 unchar code ledtab[]={ 0xfb,0xb0,0xed,0xf5,0xb6,0xd7,0xdf,0xf0,
53 //0, 1, 2, 3, 4, 5, 6, 7
54 0xff,0xf7,0xfe,0x9f,0xcb,0xbd,0xcf,0xce,
55 //8 ,9 ,a ,b ,c ,d ,e ,f
C51 COMPILER V7.09 OSCILLOSCOPE 08/15/2005 19:39:16 PAGE 2
56 0x80,0xbe,0x8b,0xee,0x84 };
57 //熄灭 H L P -
58 //*****************************************************************************************************
59 extern void lcd_init();
60 extern void lcd_write_passage(unchar *string);
61 extern void lcd_write_sentence(unchar row,unchar col,unchar *string);
62 extern void lcd_write_command(unchar c);
63 extern void lcd_write_data(unchar ddata); //向LCD模块的字符发生器或显存写一个字节data。
64 extern void lcd_clear();
65 //*****************************************************************************************************
66 void delay200ms()
67 {
68 1 int i=10000,j=1000;
69 1 for(;i>0;i--)
70 1 for(;j>0;j--);
71 1 }
72 //***************************************************************************************
73 void display(unchar dot)
74 {
75 1 unchar i;
76 1 LedMode=1;
77 1 DisCmd=scode; //采用软件译码
78 1 LedMode=0;
79 1 if(Led_On)
80 1 {
81 2 for(i=0;i<8;i++) //将distab中的数据送如7218
82 2 {
83 3 if((i==dot)&(dot!=0))
84 3 DisData=ledtab[distab[i]]+0x80; //查表转化并将字型送入7218
85 3 else
86 3 DisData=ledtab[distab[i]]; //查表转化并将字型送入7218
87 3 }
88 2 }
89 1 }
90 //***************************************************************************************
91 void glint() //glintflag为1闪烁,flag为0,不闪烁;
92 {
93 1
94 1 unchar i;
95 1 while(Glint_Flag&Led_On) //光标位置闪烁
96 1 {
97 2 LedMode=1;
98 2 DisCmd=scode; //采用软件译码
99 2 LedMode=0;
100 2 for(i=0;i<8;i++) //将distab中的数据送如7218
101 2 {
102 3 if(i==ledcursor)
103 3 DisData=0x80; //查表转化并将字型送入7218
104 3 else
105 3 DisData=ledtab[distab[i]]; //查表转化并将字型送入7218
106 3 }
107 2 delay200ms();
108 2 LedMode=1;
109 2 DisCmd=scode;
110 2 display(0);
111 2 delay200ms();
112 2 }
113 1 }
114 //***************************************************************************************
115 /*初始化:A0F3:1, A0F4:2, A0F5:00, A0F6:0, A0F7:2, A0F8:00, A0F9:0,
116 A0FA:00, A0FB:0, A0FC:40, A0FD:00;初始挡位, A0FE:00 */
117 void FpgaInitial() //初始化程序
C51 COMPILER V7.09 OSCILLOSCOPE 08/15/2005 19:39:16 PAGE 3
118 {
119 1 Select_AB=1;
120 1 Vertical_Gain_A=2;
121 1 Vertical_Move_A=0;
122 1 //Select_A=0;
123 1 Vertical_Gain_B=2;
124 1 Vertical_Move_B=0;
125 1 Single_Auto_Select=0;
126 1 Trigger_Voltage=0;
127 1 Lock_Wave=0;
128 1 X_Freq_High=0x03;
129 1 X_Freq_Low=0xE8;
130 1 X_Move=0;
131 1 }
132 //***************************************************************************************
133 void Reset() //Fpga复位
134 {
135 1 //Special_Down_Flag=1;
136 1 RESET=00;
137 1 }
138 //***************************************************************************************
139 void Set_X_Freq() //设置X轴扫描频率,Key_Flag:1
140 {
141 1 Shift_Flag=1;
142 1 //unint Freq,temp;
143 1 Led_On=1;
144 1 Key_Flag=1;
145 1 ledcursor=4;
146 1 Glint_Flag=1;
147 1 distab[0]=0x00;
148 1 distab[1]=0x00;
149 1 distab[2]=0x00;
150 1 distab[3]=0x00;
151 1 distab[4]=0x00;
152 1 distab[5]=0x10;
153 1 distab[6]=0x10;
154 1 distab[7]=0x01;
155 1 display(0);
156 1 lcd_clear();
157 1 lcd_write_sentence(1,0,"请输X 轴扫描频率");
158 1 lcd_write_sentence(2,1,"频率范围:");
159 1 lcd_write_sentence(3,1,"0-100KHZ");
160 1
161 1 }
162 //***************************************************************************************
163 void Set_X_Pos()
164 {
165 1 Shift_Flag=1;
166 1 lcd_clear();
167 1 Key_Flag=2;
168 1 ledcursor=2;
169 1 Glint_Flag=1;
170 1 Led_On=1;
171 1 distab[0]=0x00;
172 1 distab[1]=0x00;
173 1 distab[2]=0x00;
174 1 distab[3]=0x10;
175 1 distab[4]=0x10;
176 1 distab[5]=0x10;
177 1 distab[6]=0x10;
178 1 distab[7]=0x02;
179 1 display(0);
C51 COMPILER V7.09 OSCILLOSCOPE 08/15/2005 19:39:16 PAGE 4
180 1 lcd_write_sentence(1,0,"请输入水平移相");
181 1 lcd_write_sentence(2,1,"位置范围:");
182 1 lcd_write_sentence(3,2,"0-200");
183 1
184 1 }
185 void Set_Trigger_Voltage()
186 {
187 1 Shift_Flag=1;
188 1 lcd_clear();
189 1 Key_Flag=3;
190 1 ledcursor=2;
191 1 Led_On=1;
192 1 Glint_Flag=1;
193 1 distab[0]=0x00;
194 1 distab[1]=0x00;
195 1 distab[2]=0x00;
196 1 distab[3]=0x10;
197 1 distab[4]=0x10;
198 1 distab[5]=0x10;
199 1 distab[6]=0x10;
200 1 distab[7]=0x03;
201 1 //display(2);
202 1 lcd_write_sentence(1,0,"请输入触发电平");
203 1 lcd_write_sentence(2,1,"电平范围:");
204 1 lcd_write_sentence(3,2,"0-5V");
205 1
206 1 }
207 //***************************************************************************************
208 void Lock_Current_Wave()
209 {
210 1 //Special_Down_Flag;
211 1 Lock_Wave_Flag=!Lock_Wave_Flag;
212 1 Led_On=0;
213 1 //Lock_Wave=Lock_Wave_Flag;
214 1 lcd_clear();
215 1 if(Lock_Wave_Flag)
216 1 {
217 2 lcd_write_sentence(2,1,"波形锁存成功!");
218 2 Lock_Wave=1;
219 2 }
220 1 else
221 1 {
222 2 lcd_write_sentence(2,1,"波形解除锁定!");
223 2 Lock_Wave=0;
224 2 }
225 1 }
226 //***************************************************************************************
227 void Single_Select()
228 {
229 1 //Special_Down_Flag
230 1 lcd_clear();
231 1 Led_On=0;
232 1 Single_Flag=!Single_Flag;
233 1 Single_Auto_Select=Single_Flag;
234 1 lcd_clear();
235 1 lcd_write_sentence(1,0,"当前触发状态:");
236 1 if(Single_Flag)
237 1 lcd_write_sentence(2,1,"单步");
238 1 else
239 1 lcd_write_sentence(2,1,"连续");
240 1 }
241
C51 COMPILER V7.09 OSCILLOSCOPE 08/15/2005 19:39:16 PAGE 5
242 //***************************************************************************************
243 void Select_AB_Channel()
244 {
245 1 lcd_clear();
246 1 Led_On=0;
247 1
248 1 // if(Select_Flag%3)
249 1 // Select_Flag=0;
250 1 // else
251 1 // {
252 1 switch(Select_Flag%3)
253 1 {
254 2 case 0:
255 2 Select_AB=1;
256 2 //Select_B=0;
257 2 lcd_clear();
258 2 lcd_write_sentence(2,1,"A 路选通");
259 2 lcd_write_sentence(3,1,"B 路关闭");
260 2 break;
261 2 case 1:
262 2 Select_AB=2;
263 2 //Select_B=1;
264 2 lcd_clear();
265 2 lcd_write_sentence(2,1,"A 路关闭");
266 2 lcd_write_sentence(3,1,"B 路选通");
267 2 break;
268 2 case 2:
269 2 Select_AB=3;
270 2 //Select_B=1;
271 2 lcd_clear();
272 2 lcd_write_sentence(2,1,"A 路选通");
273 2 lcd_write_sentence(3,1,"B 路选通");
274 2 break;
275 2 default:
276 2 break;
277 2 // }
278 2 }
279 1 Select_Flag++;
280 1 }
281
282 //***************************************************************************************
283 void Vertical_GainA()
284 { Led_On=0;
285 1 Vertical_Gain_A_Grade++;
286 1 if(Vertical_Gain_A_Grade>2)
287 1 Vertical_Gain_A_Grade=0;
288 1 else
289 1 {
290 2 Vertical_Gain_A=Vertical_Gain_A_Grade;
291 2 lcd_clear();
292 2 lcd_write_sentence(1,0,"当前垂直增益档位");
293 2 lcd_write_sentence(2,2,"A 路");
294 2 switch(Vertical_Gain_A_Grade)
295 2 {
296 3 case 0:
297 3 lcd_write_sentence(3,1,"0.01V/div");
298 3 break;
299 3 case 1:
300 3 lcd_write_sentence(3,1,"0.1V/div");
301 3 break;
302 3 case 2:
303 3 lcd_write_sentence(3,1,"1V/div");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -