📄 temperature_ad.lst
字号:
C51 COMPILER V7.50 TEMPERATURE_AD 11/06/2008 20:49:04 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE TEMPERATURE_AD
OBJECT MODULE PLACED IN temperature_AD.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE temperature_AD.c BROWSE DEBUG OBJECTEXTEND
line level source
1 //-----------------------------------------------------------------------------
2 // JDCS.c
3 //-----------------------------------------------------------------------------
4 //
5 //-----------------------------------------------------------------------------
6
7 //-----------------------------------------------------------------------------
8 // Includes
9 //-----------------------------------------------------------------------------
10 #include <REG52.h> // SFR declarations
11 #include "I2C.h"
12 #include "ZLG7290.h"
13 #include <intrins.h>
14 #include <absacc.h>
15 #include <stdio.h>
16 #include <math.h>
17
18
19 #define uchar unsigned char
20 #define uint unsigned int
21
22 sbit IOclk = P1^0; //AD时钟信号
23 sbit Dout = P1^1; //AD数据信号
24 sbit ADcs = P1^2; //AD片选信号
25
26
27 //-----------------------------------------------------------------------------
28 //全局变量定义
29 //-----------------------------------------------------------------------------
30
31 //-----------------------------------------------------------------------------
32 // 函数原型定义
33 //-----------------------------------------------------------------------------
34 void INT0_Init(void); //外部中断初始化,该中断用于ZKG7290的键盘中断
35 //ZLG7290显示与键盘测试例程
36 void INT0_SVC();
37 void Delay1(unsigned int);
38 void Delay(uint);
39 void ZLG7290_Init();
40 void Display_Temperature(float );
41 uchar sample(void);
42 unsigned int SystemCount=0;
43 unsigned long FreqOne=0;
44 unsigned long FreqCountOne=0;
45 //-----------------------------------------------------------
46 //函数:Delay1()
47
48 //------------------------------------------------------------
49 void Delay1(unsigned int t)
50 {
51 1 int i, j;
52 1 for(i=1;i<t;i++)
53 1 {
54 2 for (j=1;j<100;j++) ;
55 2 }
C51 COMPILER V7.50 TEMPERATURE_AD 11/06/2008 20:49:04 PAGE 2
56 1 }
57
58 /*********************************
59 BASE DRIVE
60 **********************************/
61 void DELAY(uint t)
62 {
63 1 while(t!=0)
64 1 t--;
65 1 }
66
67
68 /************************************
69 AD DRIVE
70 *************************************/
71 uchar sample(void)
72 {
73 1 uchar i;
74 1 uint temp=0;
75 1 IOclk=0;
76 1 ADcs=0;
77 1 DELAY(4);
78 1 for(i=0;i<10;i++)
79 1 {
80 2 IOclk=1;
81 2 temp=temp<<1;
82 2 CY=Dout;
83 2 if(CY) //必须含有 "INTRINS.H"文件
84 2 {
85 3 temp|=0x01;
86 3 }
87 2 DELAY(2);
88 2 IOclk=0;
89 2 DELAY(2);
90 2 }
91 1
92 1 ADcs=1;
93 1 temp=temp>>2;
94 1 return temp;
95 1
96 1 }
97
98
99
100
101 //在数码管上显示电压
102 void Display_Temperature(float tem1)
103 {
104 1 unsigned char d ;
105 1 unsigned int flag; //为0显示正,为1显示负
106 1 float tem;
107 1 if (tem1 >= 0) flag = 0;
108 1 else
109 1 flag = 1;
110 1 tem = abs(tem1);
111 1
112 1 if (tem >= 100)
113 1 {
114 2 if (flag == 1) ZLG7290_WriteReg(ZLG7290_DpRam4,0x02);
115 2 else ZLG7290_WriteReg(ZLG7290_DpRam4,0x00);
116 2 d = tem / 100;
117 2 ZLG7290_Download(3,0,0,d);
C51 COMPILER V7.50 TEMPERATURE_AD 11/06/2008 20:49:04 PAGE 3
118 2 tem = tem - d * 100;
119 2 d = tem / 10;
120 2 ZLG7290_Download(2,0,0,d);
121 2 d = tem - d * 10;
122 2 ZLG7290_Download(1,0,0,d);
123 2 }
124 1 else if (tem >= 10)
125 1 {
126 2 if (flag == 1) ZLG7290_WriteReg(ZLG7290_DpRam4,0x02);
127 2 else ZLG7290_WriteReg(ZLG7290_DpRam4,0x00);
128 2 tem = tem * 10;
129 2 d = tem / 100;
130 2 ZLG7290_Download(3,0,0,d);
131 2 tem = tem - d * 100;
132 2 d = tem / 10;
133 2 ZLG7290_Download(2,1,0,d);
134 2 d = tem - d * 10;
135 2 ZLG7290_Download(1,0,0,d);
136 2 }
137 1 else
138 1 {
139 2 if (flag == 1) ZLG7290_WriteReg(ZLG7290_DpRam4,0x02);
140 2 else ZLG7290_WriteReg(ZLG7290_DpRam4,0x00);
141 2 tem = tem * 100;
142 2 d = tem / 100;
143 2 ZLG7290_Download(3,1,0,d);
144 2 tem = tem - d * 100;
145 2 d = tem / 10;
146 2 ZLG7290_Download(2,0,0,d);
147 2 d = tem - d * 10;
148 2 ZLG7290_Download(1,0,0,d);
149 2 }
150 1
151 1 /*
152 1 if (tem >= 10)
153 1 {
154 1 //if (flag == 1) ZLG7290_SegOnOff(7,1);
155 1 if (flag == 1) ZLG7290_WriteReg(ZLG7290_DpRam1,0x02);
156 1 else ZLG7290_WriteReg(ZLG7290_DpRam1,0x00);
157 1 d = tem / 10;
158 1 ZLG7290_Download(2,0,0,d);
159 1 d = tem - d * 10;
160 1 ZLG7290_Download(3,0,0,d);
161 1 }
162 1 else
163 1 {
164 1 //if (flag == 1) ZLG7290_SegOnOff(7,1);
165 1 if (flag == 1) ZLG7290_WriteReg(ZLG7290_DpRam1,0x02);
166 1 else ZLG7290_WriteReg(ZLG7290_DpRam1,0x00);
167 1 tem = tem * 10;
168 1 d = tem / 10;
169 1 ZLG7290_Download(2,1,0,d);
170 1 d = tem - d * 10;
171 1 ZLG7290_Download(3,0,0,d);
172 1 }
173 1 */
174 1 }
175
176
177
178 void main()
179 {
C51 COMPILER V7.50 TEMPERATURE_AD 11/06/2008 20:49:04 PAGE 4
180 1 // uchar temp;
181 1 int i,j;
182 1 float vx;
183 1
184 1 EA = 0;
185 1 INT0_Init(); //初始化外部中断,该函数打开了EA
186 1 ZLG7290_Init(); //系统初始化
187 1 EA = 1;
188 1 while(1)
189 1 {
190 2 // temp = sample();
191 2 // tempf = temp;
192 2 // vx = (tempf/256)*5.0;
193 2 // temperature = -25 * (vx) +70;
194 2 // Display_Temperature(temperature);
195 2 vx=(FreqOne/43.0)*2*3.14*0.262*36/10.0; //速度=count()*2*3.14*0.262*3600/1000/6
196 2 // vx=(FreqOne/1.0);
197 2 Display_Temperature(vx);
198 2 for (i=1;i<20;i++)
199 2 for (j=1;j<400;j++) ;
200 2 }
201 1 }
202
203
204
205 //--------------------------------------------------------------------------------
206 //外部中断初始化函数
207 //--------------------------------------------------------------------------------
208 void INT0_Init(void)
209 {
210 1 //TCON=0x05;
211 1 T2CON=0x00;
212 1 // T2MOD=0x00;
213 1 //定时10ms
214 1 RCAP2H =0xDC;
215 1 RCAP2L =0x00;
216 1 TH2=0xDC;
217 1 TL2=0x00;
218 1 ET2=1;
219 1 IT0 = 1; //负边沿触发中断
220 1 EX0 = 1; //允许外部中断0
221 1 //IT1 = 1;
222 1 //EX1=1;
223 1 TR2=1;
224 1 }
225
226 //---------------------------------------------------------------
227 //函数:ZLG7290_Init()
228 //功能:ZLG7290初始化
229 //-----------------------------------------------------------------
230 void ZLG7290_Init()
231 {
232 1 I2C_Init();
233 1 Delay1(30); //等待ZLG7290 复位完毕。延时完毕定时器0被关闭。
234 1 }
235
236 void timer2(void) interrupt 5
237 {
238 1 SystemCount++;
239 1 if(SystemCount>=37)
240 1 {
241 2 TR2=0;
C51 COMPILER V7.50 TEMPERATURE_AD 11/06/2008 20:49:04 PAGE 5
242 2 SystemCount=0;
243 2 FreqOne=FreqCountOne;
244 2 // FreqTwo=FreqCountTwo;
245 2 FreqCountOne=0;
246 2 // FreqCountTwo=0;
247 2 TH2=0xDC;
248 2 TL2=0x00;
249 2 TR2=1;
250 2 }
251 1
252 1 TF2=0;
253 1 }
254 void External0(void) interrupt 0 using 0//外部中断,用来检测和计算频率
255 {
256 1 FreqCountOne++;
257 1 }
258 //#include <REGX51.H>
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 862 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 10 11
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -