单片机电压采集装置课程设计AD转换及编程实现.docx

上传人:b****8 文档编号:12750889 上传时间:2023-06-07 格式:DOCX 页数:24 大小:812.21KB
下载 相关 举报
单片机电压采集装置课程设计AD转换及编程实现.docx_第1页
第1页 / 共24页
单片机电压采集装置课程设计AD转换及编程实现.docx_第2页
第2页 / 共24页
单片机电压采集装置课程设计AD转换及编程实现.docx_第3页
第3页 / 共24页
单片机电压采集装置课程设计AD转换及编程实现.docx_第4页
第4页 / 共24页
单片机电压采集装置课程设计AD转换及编程实现.docx_第5页
第5页 / 共24页
单片机电压采集装置课程设计AD转换及编程实现.docx_第6页
第6页 / 共24页
单片机电压采集装置课程设计AD转换及编程实现.docx_第7页
第7页 / 共24页
单片机电压采集装置课程设计AD转换及编程实现.docx_第8页
第8页 / 共24页
单片机电压采集装置课程设计AD转换及编程实现.docx_第9页
第9页 / 共24页
单片机电压采集装置课程设计AD转换及编程实现.docx_第10页
第10页 / 共24页
单片机电压采集装置课程设计AD转换及编程实现.docx_第11页
第11页 / 共24页
单片机电压采集装置课程设计AD转换及编程实现.docx_第12页
第12页 / 共24页
单片机电压采集装置课程设计AD转换及编程实现.docx_第13页
第13页 / 共24页
单片机电压采集装置课程设计AD转换及编程实现.docx_第14页
第14页 / 共24页
单片机电压采集装置课程设计AD转换及编程实现.docx_第15页
第15页 / 共24页
单片机电压采集装置课程设计AD转换及编程实现.docx_第16页
第16页 / 共24页
单片机电压采集装置课程设计AD转换及编程实现.docx_第17页
第17页 / 共24页
单片机电压采集装置课程设计AD转换及编程实现.docx_第18页
第18页 / 共24页
单片机电压采集装置课程设计AD转换及编程实现.docx_第19页
第19页 / 共24页
单片机电压采集装置课程设计AD转换及编程实现.docx_第20页
第20页 / 共24页
亲,该文档总共24页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

单片机电压采集装置课程设计AD转换及编程实现.docx

《单片机电压采集装置课程设计AD转换及编程实现.docx》由会员分享,可在线阅读,更多相关《单片机电压采集装置课程设计AD转换及编程实现.docx(24页珍藏版)》请在冰点文库上搜索。

单片机电压采集装置课程设计AD转换及编程实现.docx

单片机电压采集装置课程设计AD转换及编程实现

单片机课程设计

 

姓名:

学号:

专业:

 电子科学与技术 

题目:

单片机电压采集装置

专题:

AD转换及编程实现

指导教师:

设计地点:

实验楼时间:

 

2012年12月

单片机课程设计任务书

专业年级电科学号学生姓名

任务下达日期:

2012年12月20日

设计日期:

2012年12月1日至2012年12月20日

设计题目:

单片机电压采集装置

设计专题题目:

AD转换及编程实现

设计主要内容和要求:

制作单片机电压采集装置

基本要求

1、模拟通道0电压采集功能

在ADC0809的输入0~5V电压,数码管实时显示被测电压值(显示精度0.001V,即显示1位整数,3位小数)。

2、指定通道电压采集功能

通过模式选择按键切换到“指定通道电压采集功能”,利用+/-按键改变通道值,显示同上。

3、8通道自动循环电压采集功能制作单片机电压采集装置

通过模式选择按键切换到“8通道自动循环电压采集功能”,

默认通道切换时间为2秒。

扩展要求

1、超限报警功能

当Vi超出程序预设报警限值时,报警灯以1Hz速度闪烁显示,并显示提示符以区别上限或下限报警。

2、可修改上限和下限报警值的超限报警拨弄能

可随意设置上、下限报警值(步长0.1V,默认下限为0V,上限为5V)。

设置时,当下限≥上限(或上限≤下限)时予以提示,并拒绝接受数据。

指导教师签字:

摘要:

此单片机电压采集装置使用AT89S52芯片和ADC0809芯片进行电压采集,实现AD转换的基本功能。

,键盘电路和8个LED数码显示电路。

扩展电路中包含了A/D转换电路,AD转换五种工作模式下对应要实现的功能:

即模式0下完成通道0的模拟信号采集;模式1时完成指定模拟通道电压采集,按加、减(K2,K3)按键手动实现模拟通道的切换,此外,通过内部定时器T1实现报警功能,即超过上限电压4.999V时报警,同时点亮P1.1即L2发光LED小灯,低于下限电压0.000V时也实现报警功能,只是报警的频率改变,同时点亮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芯片

 

 

2硬件电路设计…………………………………………………………………………3

2.2A/D转换……………………………………………………………………5

2.2.1ADC0809转换原理…………………………………………………5

2.2.2AD转换电路………………………………………………………6

2.2.3电路设计……………………………………………………………7

3软件设计………………………………………………………………………………8

3.1设计任务……………………………………………………………………8

3.1.1基本任务……………………………………………………………8

3.2程序设计……………………………………………………………………8

3.3.1主程序框图…………………………………………………………8

3.3.2AD信号采集…………………………………………………………9

4系统调试……………………………………………………………………………17

5总结…………………………………………………………………………………18

参考文献:

……………………………………………………………………………19

附录一电源印刷电路板布线图………………………………………………………20

附录二单片机板电路原理图…………………………………………………………21

附录三单片机印刷电路板布线图……………………………………………………22

附录四元件清单………………………………………………………………………24

1绪论

1.1系统设计方案

本次实验要求设计电压采集装置,课程设计分设计、制作和调试三个部分。

设计选题以单片机为核心,基本内容应包括单片机最小系统、键盘和LED显示电路,以及设计系统涉及的其他电路。

系统硬件电路由标准电路和自制电路两部分组成。

标准电路包括单片机最小系统、8个LED数码管电路和键盘电路,可根据设计需要进行配置选用。

自制电路需自行设计焊接,包含标准电路不具备的其他电路。

设计中采用了模数转换器,利用ADC0809型8位MOS型A/D转换器。

可实现8路模拟信号的分时采集,片内有8路模拟选通开关,以及相应的通道地址锁存用译码电路,实现模拟信号到数字信号的转换。

控制部分采用单片机89C52来完成。

显示部分利用LED数码管显示模块,来显示采集到的电压分量。

1.2.1系统设计原理框图

 

2硬件电路设计

系统硬件电路由标准电路和自制电路两部分组成。

标准电路包括单片机最小系统、6个LED数码管电路和键盘电路,可根据设计需要进行配置选用。

自制电路需自行设计焊接,包含标准电路不具备的其他电路。

2.1单片机电路

2.1.1单片机最小系统

CPU原理图

该原理图包含单片机以及外部连接译码,锁存电路端口,其中的ALE,REST为高电平时用来启动ADC0809.P0、P2口控制数码输出显示,P3口的P3.3、P3.4、P3.5控制按键,P1.1~P1.3控制通道选择。

晶振采用12MHZ,该频率有利于提高串口的通信可靠性,同时又保证单片机有较高的运行速度。

2.1.2显示译码电路

LED显示电路可提供8位LED显示;可显示P1(P3)口状态;也可显示输入按键状态

LED显示电路

显示电路采用6位共阳极LED动态扫描显示,CD4511输出所需字形,74LS138选择字位。

在动态方式中,逐个地循环地点亮各位显示器。

数码管显示电路

显示译码电路部分由P0口或P2口输出显示。

显示译码器采用CD4511芯片:

输入:

BCD输出:

七段码

74LS138芯片是用来控制显示时候的字位的,由于单片机的管脚是有限的通过使用138芯片可以避免少使用些单片机的管脚,当输入001时,译码可得10111111:

输入:

0~7输出:

低电平

2.2A/D转换

2.2.1ADC0809转换原理

当单片机端的P3.3接低电平时,可以使两个非门打开

(1)当模拟量送至某一输入通道后,CPU将标识该通道编码的三位地址信号经数据线或地址线输入到ADDC、ADDB、ADDA引脚上。

(2)地址锁存允许ALE锁存地址信号,启动命令START启动A/D转换。

(3)转换开始,EOC变低电平,转换结束,EOC变为高电平。

EOC可作为中断请求信号。

(4)转换结束后,可通过执行IN指令,设法在输出允许OE脚上形成一个正脉冲,打开三态缓冲器把转换的结果输入到DB,一次A/D转换便完成。

2.2.2AD转换电路

转换结束:

EOC=1

IN0,通道0

参考电压:

5V

转换时钟:

接单片机ALE输出经分频后得到

启动和地址锁存信号

输出使能信号

通道地址信号

输出数据

/WR

/RD

片选信号:

P3.3=0

/INT0

CC4060_7

AD_CS

2.2.3电路设计

硬件资源分配

数码管显示电路:

用P2口:

bcd码输出--P2.3~P2.0;字位选择--cba=P2.6~P2.4;小数点--P2.7

键盘电路:

P3口低四位

1号按键P3.0---模式切换

2号按键P3.1---通道、报警限加

3号按键P3.2--通道、报警限减

4号按键P3.3--查询法,接收ad转换状态

(不作为按键使用)中断法,收ad结束中断信号

ADC0809电压转换电路控制信号:

/wr==p3.6/rd==p3.7

eoc==p3.3Cs==p3.5

转换通道选择地址线:

CBA==P1(6-4)

 

3软件设计

3.1设计任务

3.1.1基本任务1、进行电压采集并显示

3.1.2扩展任务1、指定通道采集

2、循环采集显示,默认每通道显示1秒钟。

3、报警设置报警上限为4V

报警下限为2V

3.2程序设计

3.2.1主程序框图

主程序框图

3.3.2AD信号采集程序

#include

#defineucharunsignedchar

#defineuintunsignedint

#definezxmaP0//字型码地址,通过P0口送字型码

#definezwmaP2//字位码地址,通过P2口送字位码

sbitlowflag=P1^0;//下限报警LED

sbithighflag=P1^1;//上限报警LED

sbitad_adda=P1^4;//ad0809地址端A,低位

sbitad_addb=P1^5;//ad0809地址端B,中位

sbitad_addc=P1^6;//ad0809地址端C,高位

sbitkey1=P3^0;//按键1

sbitkey2=P3^1;//按键2

sbitkey3=P3^2;//按键3

sbitad_eos=P3^3;//ad0809转换结束标志,1转换完,0正在转换

sbitspeeker=P3^4;//蜂鸣器报警

sbitad_cs=P3^5;//ad0809片选,低电平有效

sbitad_wr=P3^6;//ad0809写入信号,锁存地址和启动ad

sbitad_rd=P3^7;//ad0809读出信号,通过P0口读回ad转换结果

ucharad_data;//ad采集数据

ucharpdataad_start,ad_over;//两个片外地址,用于产生读写信号

ucharad_td;//ad采集通道

ucharad_mode;//ad采集模式

ucharkey;

uintad_high=4000;//ad报警上限,设置为4V

uintad_low=2000;//ad报警下限,设置为2V

uchartt0=100;//定时1s(10ms,需要100次)

sbitad_clk=P1^7;//本程序利用P1.7产生方波来给ad0808提供脉冲,

/*共阴极数码管字形码,共阳极数码管取反即可*/

ucharcodezixing[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,

0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};

/*共阳极数码管字位码,共阴极数码管取反即可*/

ucharcodeziwei[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

voidtimer2int();

voiddelay(uinti);

voiddisp(void);

voidad_change(void);

voidkeyscan(void);

voidkeyanswer(void);

voidalarm();

voidtimer0int(void);

voidtimer0chengxu(void);

voidtimer1int(void);

voidtimer1chengxu(void);

voidmain(void)

{

timer0int();

timer1int();

while

(1)

{

keyscan();

keyanswer();

ad_change();

alarm();

disp();

}

}

voidkeyscan(void)

{

if(!

key1)

{

while(!

key1)disp();

key=1;F0=1;

}

if(!

key2)

{

while(!

key2)disp();

key=2;F0=1;

}

if(!

key3)

{

while(!

key3)disp();

key=3;F0=1;

}

}

voidkeyanswer(void)

{

if(key==1&F0==1)

{

ad_mode++;

if(ad_mode==5)ad_mode=0;

}

if(ad_mode==0)

{

ad_td=0;

}

if(ad_mode==1)

{

if(key==2&F0==1)

{

ad_td++;

if(ad_td==8)ad_td=0;

}

if(key==3&F0==1)

{

ad_td--;

if(ad_td==255)ad_td=7;

}

}

if(ad_mode==2)TR0=1;

elseTR0=0;

if(ad_mode==3)

{

if(key==2&F0==1)

{

ad_high=ad_high+100;

}

if(key==3&F0==1)

{

ad_high=ad_high-100;

}

}

if(ad_mode==4)

{

if(key==2&F0==1)

{

ad_low=ad_low+100;

}

if(key==3&F0==1)

{

ad_low=ad_low-100;

}

}

F0=0;

}

voidtimer0int(void)

{

TMOD=0x11;

TH0=(65536-10000/1)/256;

TL0=(65536-10000/1)%256;

ET0=1;

EA=1;

TR0=0;

}

voidtimer0chengxu(void)interrupt1

{

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;

}

}

voidtimer1int()

{

TMOD=0x11;

TH1=(65536-500/1)/256;

TL1=(65536-500/1)%256;

ET1=1;

EA=1;

TR1=0;

}

voidtimer1chengxu()interrupt3

{

uintad_dianya;

if(ad_dianya

{

lowflag=0;

TH1=(65536-100/1)/256;

TL1=(65536-100/1)%256;

speeker=~speeker;

}

else

{

lowflag=~lowflag;

highflag=0;

TH1=(65536-5000/1)/256;

TL1=(65536-5000/1)%256;

speeker=~speeker;

}

lowflag=1;

highflag=1;

}

voidalarm()

{

uintad_dianya;

//uintspeaker;

if(ad_dianya>ad_high|ad_dianya

{

TR1=1;//开放T1中断

}

elseTR1=0;//关闭T1中断

}

voidad_change(void)

{

ad_adda=0;

ad_addb=0;

ad_addc=0;

P1=P1|(ad_td<<4);

ad_cs=0;

ad_start=0x00;

while(ad_eos==1)disp();

ad_data=ad_over;

}

voiddisp(void)

{uintad_dianya;

ucharj,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=~ziwei[0];zxma=~zixing[ad_mode];delay

(1);zxma=0xFF;

zwma=~ziwei[2];zxma=~zixing[ad_td];delay

(1);zxma=0xFF;

zwma=~ziwei[4];zxma=~zixing[j]&0x7f;delay

(1);zxma=0xFF;

zwma=~ziwei[5];zxma=~zixing[k];delay

(1);zxma=0xFF;

zwma=~ziwei[6];zxma=~zixing[l];delay

(1);zxma=0xFF;

zwma=~ziwei[7];zxma=~zixing[m];delay

(1);zxma=0xFF;

}

voiddelay(uinti)

{

unsignedintj,k;

for(j=0;j

for(k=0;k<121;k++);

}

voidtimer2int()

{

C_T2=0;

RCAP2H=(65536-100)/256;

RCAP2L=(65536-100)%256;

EA=1;

ET2=1;

TR2=1;

}

voidtimer2pro(void)interrupt5using0{

TF2=0;

ad_clk=~ad_clk;

}

4系统调试

硬件焊接分为单片机板和扩展版两部分。

在焊接单片机板的时候出现过虚焊和漏焊的现象,再其次就是在焊接扩展板的时候,自己将排阵竟然全部焊接反了,由于自己的疏忽,导致杜邦线无法连接。

然后自己又逐一将排阵全部焊接了一遍,再者就是电路板的布局问题,由于自己是第一次走线,导致板子背面的走线很不光滑而且混乱,没有秩序,但最终在自己的努力下实现了功能。

由于自己曾经掌握一些简单的汇编语言,例如VB,C,C++等汇编语言,所以开始的时候总想将汇编语言写成C语言的格式,导致程序频频出现问题。

而且由于自己起初对KEILC软件不是非常了解,所以很多时候出现问题自己不会改写。

但最终在老师和同学的帮助之下,悉心学习,耐心请教,通过程序调试各个部分的功能,完成各功能模块,把程序下载到单片机中,最终实现电压采集功能和扩展功能。

 

参考文献:

[1]胡汉才,《单片机原理及其接口技术》(2版),清华大学出版社

[2]张迎新,《单片机中级教程》,北京航空航天大学出版社

[3]丁元杰,《单片机原理与应用》,机械工业出版社

[4]孙育才,《MCS-51系列单片微型计算机及其应用》,东南大学出版社

 

附录一电源印刷电路板布线图

附录二单片机板电路原理图

附录三单片机印刷电路板布线图

附录四元件清单

电源板

符号

名称

型号参数

数量

备注

C1\5\6

电解电容

2200uF/25V

3

C3\9\10

100uF/25V

3

C2\4\7\8\11\12\13

独石电容

104

7

LED1\2\3

发光二极管

φ5

3

R1

电阻

470欧

1

R2/3

1K欧

2

D1_1/1/2/3/4/5

二极管

IN4007

6

散热片

3

变压器

220V~50V

1

MC1

芯片

7805

1

MC2

7812

1

MC3

7912

1

POWERIN/OUT5

电源接口

2

电路板

1

插头

1

扩展板

符号

名称

型号参数

数量

备注

滑动变阻器

1

芯片

ADC0809

1

74HC02

1

4046

1

74HC04

1

双排针

若干

短路帽

若干

单片机主板

符号

名称

型号参数

数量

备注

KP1/2/3/4/SWRST1

微动开关

6*6*6

5

SWPIP1

拨码开关

1

芯片座

14P

4

16P

4

28P

1

40P

11

U1

芯片

AT89S52

1

U2

4511

1

U3

74HC138

1

U5/6

74HC04

2

L1~8

发光二极管

8

SEG1~6

LED数码管

共阴极

6

SR1~8

电阻

200欧

8

R1

1K

1

R2

10K

1

CRY1

晶振

12M

1

C2/3

瓷片电容

20P

2

C5

独石电容

104

1

C1

电解电容

22uF/25V

1

RKP1

排阻

3.3K

1

RKP2

1K

1

RL1

10K

1

RLED

470

1

电路板

1

双排针

若干

短路帽

若干

POW1

电源接口

1

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2