教师签名
成绩
嘉应学院电子信息工程学院
实验报告
实验课程:
电子产品设计与实践
2017~2018 学年第二学期
基于单片机与 AD 转换器的数据采
集
电子信息工程
实验名称
专 业
班 级
姓 名
学 号
任课教师
实验时间
5 月 9 日
实验地点
实验成绩
实验名称:基于单片机与 AD 转换器的数据采集
所使用的工具软件及环境:protues 软件
一、实验目的:
1.基于单片机与 AD 转换器实现信号发生器;
2.理解以上电路实现的原理与分析方法;
3.掌握 Proteus 软件与 Keil 软件的实用。
二、实验内容:
1、 1.单片机最小系统;
2.DA 转换器工作原理;
3.七段数码管的动态显示;
4.模拟信号的采集与显示
三.程序运行结果及理论分析:
3.1 单片机最小系统与外围驱动
C1
22pF
C2
22pF
R1
1k
X1
CRYSTAL
C3
1nF
U1
XTAL1
XTAL2
RST
PSEN
ALE
EA
19
18
9
29
30
31
D0
D1
D2
D3
D4
D5
D6
D7
1
2
3
4
5
6
7
8
P1.0/T2
P1.1/T2EX
P1.2
P1.3
P1.4
P1.5
P1.6
P1.7
AT89C52
P0.0/AD0
P0.1/AD1
P0.2/AD2
P0.3/AD3
P0.4/AD4
P0.5/AD5
P0.6/AD6
P0.7/AD7
P2.0/A8
P2.1/A9
P2.2/A10
P2.3/A11
P2.4/A12
P2.5/A13
P2.6/A14
P2.7/A15
P3.0/RXD
P3.1/TXD
P3.2/INT0
P3.3/INT1
P3.4/T0
P3.5/T1
P3.6/WR
P3.7/RD
39
38
37
36
35
34
33
32
21
22
23
24
25
26
27
28
10
11
12
13
14
15
16
17
P30
P31
P32
ST
EOC
OE
R9
300
R8
300
R2
300R3
300
R4
300
R5
300
R6
300R7
300
P20
P21
P22
P23
P24
P25
P26
P27
18
17
16
15
14
13
12
11
B0
B1
B2
B3
B4
B5
B6
B7
2
3
4
5
6
7
8
9
19
1
U2
A0
A1
A2
A3
A4
A5
A6
A7
CE
AB/BA
74LS245
3.2 项目 2 A/D 转换器电路
.
2
U3(CLOCK)
RV1
%
0
10k
+88.8
Volts
26
27
28
1
2
3
4
5
25
24
23
22
12
16
U3
IN0
IN1
IN2
IN3
IN4
IN5
IN6
IN7
ADD A
ADD B
ADD C
ALE
VREF(+)
VREF(-)
ADC0808
ST
CLOCK
START
EOC
OUT1
OUT2
OUT3
OUT4
OUT5
OUT6
OUT7
OUT8
10
6
7
21
20
19
18
8
15
14
17
ST
EOC
D7
D6
D5
D4
D3
D2
D1
D0
9
OE
OE
3.3 七段数码管的动态显示
P20
P21
P22
P23
P24
P25
P26
P27
P20
P21
P22
P23
P24
P25
P26
P27
P30
P20
P21
P22
P23
P24
P25
P26
P27
P31
P32
3.4 单片机程序
#include
#include
sbit LED0 = P3^0;
sbit LED1 = P3^1;
sbit LED2 = P3^2;
sbit KEY1 = P1^0;
sbit ST
= P3^4;
= P3^5;
sbit EOC
sbit OE
= P3^6;
unsigned char g_count=0 ;
unsigned int
g_tickCount=0;
3
unsigned int
unsigned int
double
g_n;
g_data=0;
g_ratio= 100.0/255.0;
void init(void )
{
EA=1;
ET0=1;
TR0=1;
TMOD=0x01;
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
}
void Delay(unsigned int ms)
{
int i,j;
for(i=0;i
if(digital==5)
{segData = 0X6D; }
if(digital==6)
{segData = 0X7D; }
if(digital==7)
{segData = 0X07; }
if(digital==8)
{segData = 0X7F; }
if(digital==9)
{segData = 0X67; }
P2 = segData;
}
void Timer0() interrupt 1
{
= (65536-1000)/256;
= (65536-1000)%256;
TH0
TL0
g_tickCount++;
if(g_tickCount>=0 && g_tickCount<10)
{
LED0 = 0;
DataTo7Seg(g_data/100);
LED1 = 1;
LED2 = 1;
}
{
}
{
if(g_tickCount>=10 && g_tickCount<20)
LED0 = 1;
DataTo7Seg((g_data%100)/10);
LED1 = 0;
LED2 = 1;
if(g_tickCount>=20 && g_tickCount<30)
5
LED0 = 1;
DataTo7Seg(g_data%10);
LED1 = 1;
LED2 = 0;
}
if(g_tickCount>=30)
{g_tickCount=0;}
}
main()
{
g_n=1;
init();
LED0 = 0;
ST = 0;
OE = 0;
EOC = 1;
Delay(10);
while(1)
{
ST = 0;
ST = 1;
ST = 0;
while(EOC == 1);//等待进入 AD 转换工作
while(EOC == 0);//等待 AD 转换结束工作
EOC = 1;
OE =1;
g_data = P1*g_ratio;
OE =0;
}
}
6
四.实验结果
电压5V的时候数码管显示255:
电压0V的时候显示000:
7
电压5V的时候数码管显示温度100摄氏度:
五.心得体会:
要使得当 IN0 的电压信号为 0 时,七段数码管显示 000,但是当 IN0 电压信号为 5V 时,七段
数码管显示温度 100。需要把 double
把 g_data = P1;改为 g_data = P1*g_ratio。这次实验加深了我对温度采集实验程序对理解,
也加强了实验操作的熟练度。
g_ratio= 100.0/255.0;
g_ratio;改为 double
8