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