📄 de.lst
字号:
C51 COMPILER V8.04 DE 01/18/2008 13:01:19 PAGE 1
C51 COMPILER V8.04, COMPILATION OF MODULE DE
OBJECT MODULE PLACED IN de.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE de.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /**********************************************************************
2 /* 文件名称: de.C
3 /* 文件标识: none
4 /* 适用器件: C8051F120
5 /* 摘 要:本文件是按S1,S3,DA0输出(1V);按S2,S4,DA1有1.7V输出.每间隔1S,AIN0,AIN1通过串口分别显示输入电压.
6 /* ;AIN0的电压由DA0提供,AIN1的电压由DA1提供;使用外部22.1184MHz晶振.
7 /* 当前版本:1.0
8 /* 作 者:李国涛
9 /* 完成日期:2007年12月4日
10 /***********************************************************************/
11
12 /**********************************************************************/
13 //INCLUDE引用外部头文件
14 #include <c8051f120_VarantReg.h>
15 #include <ABSACC.H>
16 #include "da-i.c"
17 #include <string.h>
18 #include <stdio.h>
19 /**********************************************************************/
20
21 /**********************************************************************
22 // 常量及全局变量定义
23 ************************************************************************/
24 long result[2];
25 long mopt[2];
26 unsigned long voltage;
27 uchar key; //key 是执行keyscan读取的值
28 long temp; //为ADC转换后的值
29 uchar temp1; //temp是执行KeySPI1的结果
30 uchar send_flag;
31 uchar temp0; //temp是执行KeySPI的结果;
32 uchar rs232_send_size;
33 uchar dat[20];
34 uchar dac_value[4];
35 uchar channel0_flag;
36 uchar channel1_flag;
37 /* TIMER0 INI */
38 bit time_1ms_flag;
39 bit time_10ms_flag;
40 bit time_50ms_flag;
41 bit time_100ms_flag;
42 bit time_500ms_flag;
43 bit time_1s_flag;
44 bit time_60s_flag;
45 uchar time_1ms;
46 uchar time_10ms;
47 uchar time_50ms;
48 uchar time_100ms;
49 uchar time_500ms;
50 uchar time_1s;
51 uchar time_60s;
52 /**********************************************************************
53 * 函数名称:delay();
54 *
55 * 函数功能描述:是一个延时程序;
C51 COMPILER V8.04 DE 01/18/2008 13:01:19 PAGE 2
56 *
57 * 输入参数:x1
58 *
59 * 返回数据:none;
60 ***********************************************************************/
61 void delay(int x1)
62 {
63 1 unsigned int y1;
64 1 for (y1=1;y1<x1;y1++);
65 1 }
66
67 /*********************************************************************
68 * 函数名称:getkey();
69 *
70 * 函数功能描述:按键的扫描判断与取值
71 *
72 * 输入参数:none;
73 *
74 * 返回数据:none;
75 *
76 * 注 意:none;
77 **********************************************************************/
78
79 unsigned char getkey(void)
80 {
81 1 uchar h; //行扫描值
82 1 uchar l; //列扫描值
83 1 SFRPAGE=0x0f ;
84 1 P5=0xF0; //P5.0~P5.3 发全0.准备读列的状态
85 1 if((P5&0xF0)!=0xF0) //如果P5.4~P5.7不全为1,可能有键按下
86 1 {
87 2 delay(100);
88 2 delay(100); //延时去抖动
89 2
90 2 if((P5&0xF0) != 0xF0) //重读高4位,如果还是不全为1,有按键按下
91 2 {
92 3 h=0xFE; //P5.0置0,开始行扫描
93 3 while((h&0x10)!=0xF0) //判断是否为最后一行,若不是继续扫描=F0的时候表示没有到最后一行;
94 3 { //如果为F0,那么还没有到最后一行;如果不为F0那么就已经到最后一行;
95 4 P5=h;
96 4 delay(100);
97 4 SFRPAGE=0x0f;
98 4 if((P5&0xF0) != 0xF0) //如果P5.4~P5.7不全为1,可能有键按下
99 4 {
100 5 l=((P5&0xF0)|0x0F); //保留P5口高四位.低四位变为1,作为列值
101 5 delay(100);
102 5 return ((~h)+(~l)); //按键值=行扫描值+列扫描值
103 5
104 5 }
105 4 else //如果该行无键按下,行扫描值左移.扫描下一行
106 4
107 4 h=(h<<1)|0x01; //这样做保证每一次就只有一位为"0"
108 4
109 4 }
110 3 }
111 2 }
112 1 return 0; //无键按下,返回0
113 1 }
114
115 /**********************************************************************
116 * 函数名称:keyup();
117 *
C51 COMPILER V8.04 DE 01/18/2008 13:01:19 PAGE 3
118 * 函数功能描述:按键的释放;
119 *
120 * 输入参数:none;
121 *
122 * 返回数据:none;
123 *
124 * 注 意:none;
125 **********************************************************************/
126
127 uchar keyup(void)
128 {
129 1 unsigned char val=0xff;
130 1 val=getkey();
131 1 if(val != 0)
132 1 {
133 2 while(1)
134 2 {
135 3 if(val!=getkey())break;
136 3 }
137 2 }
138 1 return val;
139 1 }
140
141 /*********************************************************************
142 * DAC0_Init :
143 *
144 * 1V=0X06AAH ;1.7V =0X0B54H ; 电压值 ;
145 *
146 * Return Value : None
147 *
148 * Parameters : None
149 *
150 * Configure DAC0 to update on write to
151 *
152 * REF0CN
153 *********************************************************************/
154
155 void DAC0_Init(void)
156 {
157 1 SFRPAGE = DAC0_PAGE; //DAC_PAGE包含DAC0的初始化/.
158 1 DAC0L=dac_value[0];
159 1 DAC0H=dac_value[1];
160 1 }
161
162 /********************************************************************
163 * DAC1_Init :
164 *
165 * Return Value : None
166 *
167 * Parameters : None
168 *
169 * Configure DAC1 to update on write to
170 ********************************************************************/
171
172 void DAC1_Init(void)
173 {
174 1 SFRPAGE = DAC1_PAGE;
175 1 DAC1L=dac_value[2];
176 1 DAC1H=dac_value[3];
177 1 }
178
179 /*******************************************************************
C51 COMPILER V8.04 DE 01/18/2008 13:01:19 PAGE 4
180 * 函数名称:ADC0_Init
181 *
182 * 函数功能描述:ADC0 采样初始化,输入通道AIN0.0
183 *
184 * 输入参数:none;
185 *
186 * 返回数据:none;
187 *
188 * 注意: none;
189 *
190 *******************************************************************/
191
192 void ADC0_Init(void)
193 {
194 1 char SFRPAGE_SAVE = SFRPAGE; // Save Current SFR page
195 1 SFRPAGE = ADC0_PAGE;
196 1 ADC0CF |= 0x88; //ADC转换时钟= 2.45MHz
197 1 EIE2 |= 0x02; // 关闭ADC中断
198 1 SFRPAGE = SFRPAGE_SAVE; // Restore SFR page
199 1 }
200
201 /***************************************************************
202 * 函数名称:ADC0_enable
203 *
204 * 函数功能描述:ADC0开关,1:打开;0:关闭
205 *
206 * 输入参数:1:打开;0:关闭
207 *
208 * 返回数据:none;
209 *
210 * 注意: none;
211 ***************************************************************/
212
213 void ADC0_enable(unsigned char flag)
214 {
215 1 char data SFRPAGE_SAVE = SFRPAGE; // Save Current SFR page
216 1
217 1 if(flag)
218 1 {
219 2 AD0EN = 1; // 打开ADC
220 2 EA = 1; // 开启全局中断
221 2 }
222 1 else
223 1 {
224 2 AD0EN = 0; // 关闭ADC
225 2 }
226 1
227 1 SFRPAGE = SFRPAGE_SAVE; // Restore SFR page
228 1 }
229
230 /****************************************************************
231 * 函数名称:ADC0_Conver
232 *
233 * 函数功能描述:读取AD数据
234 *
235 * 输入参数:none;
236 *
237 * 返回数据:none;
238 *
239 * 注意: none;
240 ******************************************************************/
241
C51 COMPILER V8.04 DE 01/18/2008 13:01:19 PAGE 5
242 void ADC0_Conver (void)
243 {
244 1 unsigned char i=0; // ADC mux 通道 (0-1)
245 1 char data SFRPAGE_SAVE = SFRPAGE; // Save Current SFR page
246 1 SFRPAGE = ADC0_PAGE; // set SFR page F
247 1 for (i=0;i<2;i++)
248 1 {
249 2 AMX0SL = i; // 设置mux到通道
250 2 delay(1000);
251 2 AD0INT = 0; // 清除ADC转换完成标志
252 2 AD0BUSY = 1;
253 2 while (!AD0INT);
254 2 temp = ADC0H;
255 2 temp = temp*256 + ADC0L;
256 2 result[i] = temp; // 读ADC值
257 2 }
258 1 SFRPAGE = SFRPAGE_SAVE; // Restore SFR page
259 1 }
260
261 /*******************************************************************
262 * 函数名称:Uart0_Enable;
263 *
264 * 函数功能描述:Uart0初始化;
265 *
266 * 输入参数:,打开输入1;关闭输入0;
267 *
268 * 返回数据:none;
269 *
270 * 注意: none;
271 ********************************************************************/
272
273 void Uart0_Enable( Flag)
274 {
275 1 char data SFRPAGE_SAVE = SFRPAGE; // Save Current SFR page
276 1 SFRPAGE = UART0_PAGE;
277 1 if(Flag)
278 1 {
279 2 TR1=1; // 打开串口Uart0
280 2 }
281 1 else
282 1 {
283 2 TR1=0; // 关闭串口Uart0
284 2 }
285 1 SFRPAGE = SFRPAGE_SAVE; // Restore SFR page
286 1 }
287
288 /*******************************************************************
289 * TIMER0
290 *
291 *定时器0;
292 ********************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -