📄 adda.lst
字号:
C51 COMPILER V7.06 ADDA 04/02/2007 08:52:19 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE ADDA
OBJECT MODULE PLACED IN ADDA.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ADDA.c LARGE BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include "system.h"
2 #include "menu.h"
3 #include "Lcd.h"
4 #include <string.h>
5
6 unsigned char ADCdata[1000]; //存放AD转化数据
7 unsigned int ADcounter=0;
8 unsigned char TriggerMode=2; //触发模式
9 unsigned int TriggerValue=1000; //触发器触发值,单位mv
10 unsigned char ADH_TriggerValue=0x55; //TriggerValue对应ADC值
11 unsigned char ADL_TriggerValue=0x50;
12 char LastStats=2;
13
14 char ready=0;
15 unsigned int code SinTable[]={ //一周期64点sin值表(0~4095)
16 2048, 2248, 2447, 2642, 2831, 3013, 3185, 3347, 3496, 3631,
17 3750, 3854, 3940, 4007, 4056, 4086, 4095, 4086, 4056, 4007,
18 3940, 3854, 3750, 3631, 3496, 3347, 3185, 3013, 2831, 2642,
19 2447, 2248, 2048, 1847, 1648, 1453, 1264, 1082, 910, 748,
20 599, 464, 345, 241, 155, 88, 39, 9, 0, 9,
21 39, 88, 155, 241, 345, 464, 599, 748, 910, 1082,
22 1264, 1453, 1648, 1847, };
23
24 unsigned char xdata DACdata[128] _at_ 0x0; //存放DA转化数据(梯形波或正弦波,每周期64点)
25 //ADDA参数数组:0:信源;1:频率;2:幅度;3:上升比;4:高电平;5:下降比;6:采样频率;7:接口模式
26 unsigned char ADDAParaList[]={0,1,12,20,30,40,16,0};
27
28 void DA_T4_INIT() //T4初始化,驱动DA产生波形
29 {
30 1 char SFRPAGE_SAVE;
31 1 unsigned int T4VALUE;
32 1 SFRPAGE_SAVE=SFRPAGE;
33 1 SFRPAGE = TMR4_PAGE;
34 1 //T4初值= FFFF - 22.1184M/DA频率
35 1 T4VALUE = 0xFFFF-(unsigned int)221184/(ADDAParaList[1]*64);
36 1 TMR4H=T4VALUE>>8;
37 1 TMR4L=T4VALUE;
38 1 RCAP4L=TMR4L;
39 1 RCAP4H=TMR4H;
40 1 TMR4CF |=0x09; //SYSCLK作为T4输入,向上计数
41 1 TMR4CN &=0xf4; //T4工作模式: 自动重装,计时器,忽略T3EX信号
42 1 TR4=1;
43 1 EIE2|=0x04; //开T4中断
44 1 SFRPAGE=SFRPAGE_SAVE;
45 1 }
46
47 void DAC0_Init() //DAC中断,数据通过并口发送,判断触发
48 {
49 1 char SFRPAGE_SAVE;
50 1 SFRPAGE_SAVE=SFRPAGE;
51 1 SFRPAGE = DAC0_PAGE;
52 1 REF0CN =0x03; //ADDA内部偏压发生器工作,电压基准输出到VREF引脚(2.4V)
53 1 DAC0CN=0x90; //使能DAC0,T4溢出启动转换,数据右对齐
54 1 SFRPAGE=SFRPAGE_SAVE;
55 1 }
C51 COMPILER V7.06 ADDA 04/02/2007 08:52:19 PAGE 2
56
57 void AD_T3_INIT() //T3初始化,用于驱动ADC0,但不引发中断(中断由ADC0引发)
58 {
59 1 char SFRPAGE_SAVE;
60 1 unsigned int T3Value;
61 1 T3Value=0xFFFF-(unsigned int)22118/ADDAParaList[6];
62 1 SFRPAGE_SAVE=SFRPAGE;
63 1 SFRPAGE = TMR3_PAGE;
64 1 //设置采样频率:TMR3=0xFFFF-22118400/采样频率
65 1 TMR3L=T3Value;
66 1 TMR3H=T3Value>>8;
67 1 RCAP3L=TMR3L;
68 1 RCAP3H=TMR3H;
69 1 TMR3CF |=0x09; //SYSCLK作为T3输入,向上计数
70 1 TMR3CN &=0xf4; //T3工作模式: 自动重装,计时器,忽略T3EX信号
71 1 TR3=1;
72 1 SFRPAGE=SFRPAGE_SAVE;
73 1 }
74
75 void ADC0_Init() //AD初始化
76 {
77 1 char SFRPAGE_SAVE;
78 1 SFRPAGE_SAVE=SFRPAGE;
79 1 SFRPAGE = ADC0_PAGE;
80 1 REF0CN =0x03; //ADDA内部偏压发生器工作,电压基准输出到VREF引脚(2.4V)
81 1 AMX0SL =0x06; //选择AIN0.6作为输入,单端模式
82 1 ADC0CF =0x16; //CLKsar0=SYSCLK/6;PGA放大器0.5倍增益
83 1 ADC0CN|=0x85; //T3溢出启动转换,数据左对齐,启动ADC0
84 1 SFRPAGE=SFRPAGE_SAVE;
85 1 }
86 ///////////////////////////////////////////////////////////
87 void DASetUp_OnPaint() //显示设置界面
88 {
89 1 Clear(16*3,16*10);
90 1 dprintf(2,16*2,"妚内部正弦波 妚内部梯形波 妚外部信号");
91 1 dprintf(2+ADDAParaList[0]*13,16*2,"盅");
92 1
93 1 if(ADDAParaList[0]!=2)
94 1 {
95 2 dprintf(2,16*3,"信号频率: Hz");
96 2 putufig(11,16*3, ADDAParaList[1]*100,5,0,' ');
97 2 dprintf(2,16*4,"信号幅度: mV");
98 2 putufig(11,16*4, ADDAParaList[2]*100,5,0,' ');
99 2 }
100 1 if(ADDAParaList[0]==1)
101 1 {
102 2 int Sample[9]={4,130,150,0,110,0,110,0,150};
103 2 Sample[3]=130+ADDAParaList[3];
104 2 Sample[5]=130+ADDAParaList[3]+ADDAParaList[4];
105 2 Sample[7]=130+ADDAParaList[3]+ADDAParaList[4]+ADDAParaList[5];
106 2
107 2 dprintf(2,16*5,"上升比: % 波形:");
108 2 putufig(9,16*5, ADDAParaList[3],3,0,' ');
109 2 dprintf(2,16*6,"高电平: %");
110 2 putufig(9,16*6, ADDAParaList[4] ,3,0,' ');
111 2 dprintf(2,16*7,"下降比: %");
112 2 putufig(9,16*7, ADDAParaList[5],3,0,' ');
113 2
114 2 drawline(130,150,130,100);
115 2 drawline(130,150,300,150);
116 2 link(Sample);
117 2
C51 COMPILER V7.06 ADDA 04/02/2007 08:52:19 PAGE 3
118 2 Sample[0]=3;
119 2 Sample[1]=230;
120 2 Sample[3]=230+ADDAParaList[3];
121 2 Sample[5]=230+ADDAParaList[3]+ADDAParaList[4];
122 2 Sample[7]=230+ADDAParaList[3]+ADDAParaList[4]+ADDAParaList[5];
123 2 link(Sample);
124 2 }
125 1 }
126
127 void ADDASetUp() //设置
128 {
129 1 char MovHand=1; //移动光标标志位
130 1 char ItemSel=1; //光标所在行
131 1 //显示界面
132 1 Clear(0,240);
133 1 dprintf(10,0,"并口A/D采集实验设置");
134 1 dprintf(2,16*1,"选择信号源:");
135 1 dprintf(2,16*10 ,"并口模式: EPP");
136 1 dprintf(2,16*11,"采样频率: 16KHz");
137 1 dprintf(0,16*12,line);
138 1 dprintf(0,16*13,"选择项目 改变参数");
139 1 dprintf(1,16*14, "芗 兦 戛 戋");
140 1 dprintf(35,16*14, "确定");
141 1 DASetUp_OnPaint();
142 1
143 1 while(1)
144 1 {
145 2 if(CheckKeyF==1) //键盘检测
146 2 {
147 3 CheckKey();
148 3 CheckKeyF=0;
149 3 }
150 2
151 2 if(MovHand==1)
152 2 {
153 3 int i;
154 3 for(i=0;i<12;i++)
155 3 {
156 4 if(ItemSel==i)
157 4 dprintf(0,i*16,"贲");
158 4 else
159 4 dprintf(0,i*16," ");
160 4 }
161 3 MovHand=0;
162 3 }
163 2
164 2 if(Key[0].pressed==1) //检测到上键
165 2 {
166 3 Key[0].pressed=0;
167 3 switch(ItemSel)
168 3 {
169 4 case 1:
170 4 break;
171 4 case 3:
172 4 ItemSel=1;
173 4 break;
174 4 case 10:
175 4 if(ADDAParaList[0]==2) ItemSel=1;
176 4 if(ADDAParaList[0]==1) ItemSel=7;
177 4 if(ADDAParaList[0]==0) ItemSel=4;
178 4 break;
179 4 default:
C51 COMPILER V7.06 ADDA 04/02/2007 08:52:19 PAGE 4
180 4 ItemSel--;
181 4 break;
182 4 }
183 3 MovHand=1;
184 3 }
185 2
186 2 if(Key[1].pressed==1) //检测到下键
187 2 {
188 3 Key[1].pressed=0;
189 3 switch(ItemSel)
190 3 {
191 4 case 1:
192 4 ItemSel=3;
193 4 if(ADDAParaList[0]==2) ItemSel=10;
194 4 break;
195 4 case 4:
196 4 ItemSel=5;
197 4 if(ADDAParaList[0]!=1) ItemSel=10;
198 4 break;
199 4 case 7:
200 4 ItemSel=10;
201 4 break;
202 4 case 11:
203 4 break;
204 4 default:
205 4 ItemSel++;
206 4 break;
207 4 }
208 3 MovHand=1;
209 3 }
210 2
211 2 if(Key[2].pressed==1) //检测到-键
212 2 {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -