1、单片机课程设计姓 名: 学 号: 专 业: 电子科学与技术 题 目: 单片机电压采集装置 专 题: AD 转换及编程实现 指导教师: 设计地点: 实验楼 时 间: 20121220 2012 年 12 月单片机课程设计任务书专业年级 电科 学号 学生姓名 任 务 下 达 日 期 : 2012 年 12 月 20 日设计日期: 2012 年 12 月 1 日 至 2012 年 12 月 20 日设计题目: 单片机电压采集装置设计专题题目:AD 转换及编程实现设计主要内容和要求:制作单片机电压采集装置基本要求1、模拟通道 0 电压采集功能 在 ADC0809 的输入 05V 电压,数码管实时显示被
2、测电压值(显示精度 0.001V,即显示 1 位整数,3 位小数) 。2、指定通道电压采集功能通过模式选择按键切换到“指定通道电压采集功能” ,利用+/-按键改变通道值,显示同上。3、8 通道自动循环电压采集功能制作单片机电压采集装置通过模式选择按键切换到“8 通道自动循环电压采集功能” ,默认通道切换时间为 2 秒。扩展要求1、超限报警功能当 Vi 超出程序预设报警限值时,报警灯以 1Hz 速度闪烁显示,并显示提示符以区别上限或下限报警。2、可修改上限和下限报警值的超限报警拨弄能可随意设置上、下限报警值(步长 0.1V,默认下限为 0V,上限为 5V) 。设置时,当下限上限(或上限下限)时予
3、以提示,并拒绝接受数据。指导教师签字:摘要:此单片机电压采集装置使用 AT89S52 芯片和 ADC0809 芯片进行电压采集,实现 AD 转换的基本功能。 ,键盘电路和 8 个 LED 数码显示电路。扩展电路中包含了 A/D 转换电路,AD 转换五种工作模式下对应要实现的功能:即模式 0 下完成通道 0 的模拟信号采集;模式 1 时完成指定模拟通道电压采集,按加、减(K2,K3)按键手动实现模拟通道的切换, 此外,通过内部定时器 T1 实现报警功能,即超过上限电压 4.999V 时报警,同时点亮 P1.1 即L2 发光 LED 小灯,低于下限电压 0.000V 时也实现报警功能,只是报警的频
4、率改变,同时点亮 P1.0 即 L1 发光 LED 小灯;而模式 2 完成 8 通道模拟信号自动循环采集功能,通过加入内部定时器 T0 中断,从而实现每隔 1 秒通道值自动加 1 的功能;进入模式 3 的时候,需要人为设置报警上限,此程序设定报警上限为 4V,而报警上限默认值为 3.999V,通过按加、减(K2/K3)按键实现上限加减 0.1V;模式 4 的时候设置报警下限电压,默认报警下限电压为 1.999V,本程序中设置的报警下限电压为 2V,通过加减(K2/K3)按键实现电压加减 0.1V 的功能,最终实现电压采集和扩展功能。关键词:AT89S52 芯片 、ADC0809 芯片 目 录1
5、 绪论11.1 系统设计方案11.1.1 系统设计原理框图12 硬件电路设计32.1 单片机电路22.1.1 单片机最小系统32.1.2 显示译码电路42.2 A/D 转换52.2.1 ADC0809 转换原理52.2.2 AD 转换电路 62.2.3 电路设计73 软件设计83.1 设计任务83.1.1 基本任务83.2 程序设计 83.3.1 主程序框图 83.3.2 AD 信号采集 94 系统调试 175 总结 18参考文献: 19附录一 电源印刷电路板布线图20附录二 单片机板电路原理图21附录三 单片机印刷电路板布线图22附录四 元件清单24第 1 页1 绪论1.1 系统设计方案本次
6、实验要求设计电压采集装置,课程设计分设计、制作和调试三个部分。设计选题以单片机为核心,基本内容应包括单片机最小系统、键盘和LED显示电路,以及设计系统涉及的其他电路。系统硬件电路由标准电路和自制电路两部分组成。标准电路包括单片机最小系统、8个LED数码管电路和键盘电路,可根据设计需要进行配置选用。自制电路需自行设计焊接,包含标准电路不具备的其他电路。设计中采用了模数转换器,利用 ADC0809 型 8 位 MOS 型 A/D 转换器。可实现 8 路模拟信号的分时采集,片内有 8 路模拟选通开关,以及相应的通道地址锁存用译码电路,实现模拟信号到数字信号的转换。控制部分采用单片机 89C52 来完
7、成。显示部分利用 LED 数码管显示模块,来显示采集到的电压分量。1.2.1 系统设计原理框图第 2 页2 硬件电路设计系统硬件电路由标准电路和自制电路两部分组成。标准电路包括单片机最小系统、6 个 LED 数码管电路和键盘电路,可根据设计需要进行配置选用。自制电路需自行设计焊接,包含标准电路不具备的其他电路。2.1 单片机电路2.1.1 单片机最小系统CPU 原理图该原理图包含单片机以及外部连接译码,锁存电路端口,其中的ALE,REST 为高电平时用来启动 ADC0809.P0、P2 口控制数码输出显示,P3口的 P3.3、P3.4、P3.5 控制按键,P1.1P1.3 控制通道选择。晶振采
8、用 12MHZ,该频率有利于提高串口的通信可靠性,同时又保证单片机有较高的运行速度。2.1.2 显示译码电路LED 显示电路可提供 8 位 LED 显示;可显示 P1(P3)口状态;也可显示输入按键状态LED 显示电路显示电路采用 6 位共阳极 LED 动态扫描显示,CD4511 输出所需字形,74LS138 选择字位。在动态方式中,逐个地循环地点亮各位显示器。第 3 页数码管显示电路显示译码电路部分由 P0 口或 P2 口输出显示。显示译码器采用 CD4511 芯片:输入:BCD 输出:七段码 74LS138 芯片是用来控制显示时候的字位的,由于单片机的管脚是有限的通过使用 138 芯片可以
9、避免少使用些单片机的管脚,当输入 001 时,译码可得 10111111:输入:07 输出:低电平 2.2 A/D 转换2.2.1 ADC0809 转换原理当单片机端的 P3.3 接低电平时,可以使两个非门打开(1)当模拟量送至某一输入通道后,CPU 将标识该通道编码的三位地址信号经数据线或地址线输入到 ADDC、ADDB、ADDA 引脚上。 (2)地址锁存允许 ALE 锁存地址信号,启动命令 START 启动 A/D 转换。(3)转换开始,EOC 变低电平,转换结束,EOC 变为高电平。EOC 可作为中断请求信号。 (4)转换结束后,可通过执行 IN 指令,设法在输出允许 OE 脚上形成一个
10、正脉冲,打开三态缓冲器把转换的结果输入到 DB,一次 A/D 转换便完成。第 4 页IN-026 msb2-1 212-2 20IN-127 2-3 192-4 18IN-228 2-5 82-6 15IN-31 2-7 14lsb2-8 17IN-42 EOC 7IN-53 ADD-A 25IN-64 ADD-B 24ADD-C 23IN-75 ALE 22ref(-)16 ENABLE 9START 6ref(+)12 CLOCK 10IC12ADC080912345678J1CON8VCC1213DBNOT2F74041122W 3WR15.1KVCCCADP0.1UADCCLKNEOC
11、CH01 2374LS02A4 5674LS02BADCCSPD7PD6CH3CH4CH5CH6CH71ADCH0 D0D1D2D3D4D5D6D7A0A1A2CH2CH1GNDIN0,通道0参考电压:5V转换时钟:接单片机ALE输出经分频后得到启动和地址锁存信号输出使能信号通道地址信号输出数据/WR/RD片选信号:P3.3=0/INT0CC4060_7 AD_CS2.2.2 AD 转换电路 2.2.3 电路设计硬件资源分配数码管显示电路:用 P2 口:bcd 码输出P2.3P2.0;字位选择 cba=P2.6P2.4 ;小数点 P2.7键盘电路: P3 口低四位1 号按键 P3.0-模式切换
12、2 号按键 P3.1-通道、报警限加3 号按键 P3.2-通道、报警限减4 号按键 P3.3- 查询法,接收 ad 转换状态(不作为按键使用) 中断法,收 ad 结束中断信号ADC0809 电压转换电路控制信号:/wr=p3.6 /rd=p3.7 eoc= p3.3 Cs= p3.5 转换通道选择地址线:CBA =P1(6-4)转换结束:EOC1第 5 页3 软件设计3.1 设计任务3.1.1 基本任务 1、进行电压采集并显示 3.1.2 扩展任务 1、指定通道采集 2、循环采集显示 ,默认每通道显示1秒钟。3、报警设置 报警上限为4V报警下限为2V 3.2 程序设计3.2.1 主程序框图主程
13、序框图3.3.2 AD 信号采集程序#include#define uchar unsigned char#define uint unsigned int#define zxma P0 /字型码地址,通过 P0 口送字型码#define zwma P2 /字位码地址,通过 P2 口送字位码sbit lowflag=P10; /下限报警 LEDsbit highflag=P11; /上限报警 LEDsbit ad_adda=P14; /ad0809 地址端 A,低位sbit ad_addb=P15; /ad0809 地址端 B,中位sbit ad_addc=P16; /ad0809 地址端 C
14、,高位sbit key1=P30; /按键 1sbit key2=P31; /按键 2第 6 页sbit key3=P32; /按键 3sbit ad_eos=P33; /ad0809 转换结束标志,1 转换完,0 正在转换sbit speeker=P34; /蜂鸣器报警sbit ad_cs=P35; /ad0809 片选,低电平有效sbit ad_wr=P36; /ad0809 写入信号,锁存地址和启动 adsbit ad_rd=P37; /ad0809 读出信号,通过 P0 口读回 ad 转换结果uchar ad_data; /ad 采集数据uchar pdata ad_start,ad_
15、over; /两个片外地址,用于产生读写信号uchar ad_td; /ad 采集通道uchar ad_mode; /ad 采集模式uchar key;uint ad_high=4000; /ad 报警上限,设置为 4Vuint ad_low=2000; /ad 报警下限,设置为 2Vuchar tt0=100; /定时 1s(10ms,需要 100 次)sbit ad_clk=P17; /本程序利用 P1.7 产生方波来给 ad0808 提供脉冲, /*共阴极数码管字形码,共阳极数码管取反即可 */uchar code zixing=0x3F, 0x06, 0x5B, 0x4F, 0x66,
16、 0x6D, 0x7D, 0x07,0x7F, 0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71;/*共阳极数码管字位码,共阴极数码管取反即可 */uchar code ziwei=0x01, 0x02, 0x04, 0x08,0x10, 0x20, 0x40, 0x80;void timer2int(); void delay(uint i); void disp(void);void ad_change(void);void keyscan(void);void keyanswer(void);void alarm(); void timer0int(voi
17、d);void timer0chengxu(void);void timer1int(void);void timer1chengxu(void);void main(void) timer0int(); timer1int();while(1) keyscan();keyanswer(); ad_change();第 7 页alarm(); disp();void keyscan(void) if(!key1)while(!key1)disp();key=1;F0=1; if(!key2)while(!key2)disp();key=2;F0=1; if(!key3)while(!key3)
18、disp();key=3;F0=1; void keyanswer(void) if(key=1if(ad_mode=5)ad_mode=0;if(ad_mode=0)ad_td=0;if(ad_mode=1)if(key=2if(ad_td=8)ad_td=0;第 8 页if(key=3if(ad_td=255)ad_td=7;if(ad_mode=2)TR0=1; else TR0=0; if(ad_mode=3) if(key=2 if(key=3if(ad_mode=4) if(key=2if(key=3F0=0;void timer0int(void) 第 9 页TMOD=0x11;
19、 TH0=(65536-10000/1)/256; TL0=(65536-10000/1)%256; ET0=1;EA=1;TR0=0; void timer0chengxu(void) interrupt 1 TH0=(65536-10000/1)/256; TL0=(65536-10000/1)%256; tt0-;if (tt0=0) tt0=100;ad_td+;if(ad_td=8)ad_td=0;void timer1int() TMOD=0x11; TH1=(65536-500/1)/256; TL1=(65536-500/1)%256; ET1=1;EA=1;TR1=0; vo
20、id timer1chengxu() interrupt 3 第 10 页uint ad_dianya;if (ad_dianyaad_high|ad_dianyaad_low) TR1=1; /开放 T1 中断else TR1=0; /关闭 T1 中断 void ad_change(void) ad_adda=0; ad_addb=0;ad_addc=0;P1=P1|(ad_td4);第 11 页ad_cs=0; ad_start=0x00; while(ad_eos=1)disp(); ad_data=ad_over; void disp(void) uint ad_dianya;ucha
21、r j,k,l,m; if(ad_mode=0|ad_mode=1|ad_mode=2)ad_dianya=ad_data*19.60784;if(ad_mode=3)ad_dianya=ad_high;if(ad_mode=4)ad_dianya=ad_low;j=ad_dianya/1000;k=ad_dianya%1000/100;l=ad_dianya%100/10;m=ad_dianya%10;zwma=ziwei0; zxma=zixingad_mode; delay(1); zxma=0xFF; zwma=ziwei2; zxma=zixingad_td; delay(1); z
22、xma=0xFF;zwma=ziwei4; zxma=zixingj delay(1); zxma=0xFF;zwma=ziwei5; zxma=zixingk; delay(1); zxma=0xFF; zwma=ziwei6; zxma=zixingl; delay(1); zxma=0xFF;zwma=ziwei7; zxma=zixingm; delay(1); zxma=0xFF; void delay(uint i)unsigned int j,k;for(j=0;ji;j+)for(k=0;k121;k+);第 12 页void timer2int() C_T2=0;RCAP2H
23、=(65536-100)/256;RCAP2L=(65536-100)%256; EA=1;ET2=1;TR2=1; void timer2pro(void) interrupt 5 using 0 TF2=0;ad_clk=ad_clk; 第 13 页4 系统调试硬件焊接分为单片机板和扩展版两部分。在焊接单片机板的时候出现过虚焊和漏焊的现象,再其次就是在焊接扩展板的时候,自己将排阵竟然全部焊接反了,由于自己的疏忽,导致杜邦线无法连接。然后自己又逐一将排阵全部焊接了一遍,再者就是电路板的布局问题,由于自己是第一次走线,导致板子背面的走线很不光滑而且混乱,没有秩序,但最终在自己的努力下实现了功能
24、。由于自己曾经掌握一些简单的汇编语言,例如 VB,C,C+等汇编语言,所以开始的时候总想将汇编语言写成 C 语言的格式,导致程序频频出现问题。而且由于自己起初对 KEIL C 软件不是非常了解,所以很多时候出现问题自己不会改写。但最终在老师和同学的帮助之下,悉心学习,耐心请教,通过程序调试各个部分的功能,完成各功能模块,把程序下载到单片机中,最终实现电压采集功能和扩展功能。第 14 页参考文献:1胡汉才, 单片机原理及其接口技术 (2 版) ,清华大学出版社 2张迎新, 单片机中级教程 ,北京航空航天大学出版社3丁元杰, 单片机原理与应用 ,机械工业出版社4孙育才, MCS-51 系列单片微型
25、计算机及其应用 ,东南大学出版社第 15 页附录一 电源印刷电路板布线图第 16 页附录二 单片机板电路原理图第 17 页附录三 单片机印刷电路板布线图第 18 页附录四 元件清单电源板符号 名称 型号 参数 数量 备注C156 2200uF/25V 3C3910电解电容100uF/25V 3C2478111213 独石电容 104 7LED123 发光二极 管 5 3 红R1 470 欧 1R2/3电阻 1K 欧2D1_1/1/2/3/4/5 二极管 IN4007 6散热片 3变压器 220V50V 1MC1 7805 1MC2 7812 1MC3芯片7912 1POWERIN/OUT5 电
26、源接口 2电路板 1插头 1扩展板符号 名称 型号 参数 数量 备注滑动变阻器 1芯片 ADC0809 174HC02 14046 174HC04 1第 19 页双排针 若干短路帽 若干单片机主板符号 名称 型号 参数 数量 备注KP1/2/3/4/SWRST1 微动开关 6*6*6 5SWPIP1 拨码开关 114P 416P 428P 1芯片座40P 11U1 AT89S52 1U2 4511 1U3 74HC138 1U5/6芯片74HC04 2L18 发光二极管 8 红SEG16 LED 数码管 共阴极 6SR18 200 欧 8R1 1K 1R2电阻10K 1CRY1 晶振 12M 1C2/3 瓷片电容 20P 2C5 独石电容 104 1C1 电解电容 22uF/25V 1RKP1 3.3K 1RKP2 1K 1RL1 10K 1RLED排阻470 1电路板 1双排针 若干第 20 页短路帽 若干POW1 电源接口 1