logo资料库

基于单片机与AD转换器的数据采集.doc

第1页 / 共8页
第2页 / 共8页
第3页 / 共8页
第4页 / 共8页
第5页 / 共8页
第6页 / 共8页
第7页 / 共8页
第8页 / 共8页
资料共8页,全文预览结束
教师签名 成绩 嘉应学院电子信息工程学院 实验报告 实验课程: 电子产品设计与实践 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
分享到:
收藏