单片机课程设计电阻测量(完整版)

课程设计报告

课程名称:单片机课程设计

设计题目:院 系: 通信与控制工程系

专 业: 通信工程

班 级:

学生姓名: 学 号: 起止日期:

指导教师: 教研室主任:

摘 要

本设计电阻测量是利用A/D转换原理,将被测模拟量转换成数字量, 并用数字方式显示测量结果的电子测量仪表。通常测量电阻都采用大规模的A/D转换集成电路,测量精度高,读数方便,在体积、重量、耗电、稳定性及可靠性等方面性能指标均明显优于指针式万用表。其中,A/D转换器将输入的模拟量转换成数字量,逻辑控制电路产生控制信号,按规定的时序将A/D转换器中各组模拟开关接通或断开,保证A/D转换正常进行。A/D转换结果通过计数译码电路变换成BCD 码,最后驱动显示器显示相应的数值。本系统以单片机AT 89C 52为系统的控制核心, 结合A/D转换芯片ADC 0809设计一个电阻测量表,能够测量一定数值之间的电阻值,通过四位数码显示。具有读数据准确,测量方便的特点。

关键词:单片机(AT 89C 52) ; 电压;A/D转换;ADC 0809

目录

设计要求 ........................................................ 1

1、方案论证与对比 ................................................ 1

1.1方案一 ............................................................ 1

1.2方案二 ............................................................ 1

1.3方案对比与比较 ................................... 错误!未定义书签。

2、系统硬件电路的设计 ............................................ 2

2.1 振荡电路模块 ..................................................... 2

2.2 A/D转换电路模块 .................................................. 3

2.2.1主要性能 ...................................................... 3

2.2.2 ADC0809芯片的组成原理 ........................................ 4

2.2.3 ADC0809引脚功能 .............................................. 4

2.3 主控芯片AT89C52模块 .............................................. 5

2.3.1主要功能特性 .................................................. 6

2.3.2 主要引脚功能 .................................................. 6

2.4 显示控制电路的设计及原理 .......................................... 8

3、程序设计 ..................................................... 9

3.1 初始化程序 ........................................................ 9

3.2主程序 ........................................................... 10

3.3显示子程序 ....................................................... 10

3.4 A/D转换测量子程序 ............................................... 11

4、调试及性能分析 ............................................... 11

4.1调试与测试 ....................................................... 11

4.2性能分析 ......................................................... 12 5、元件清单 .................................................... 13

6、总结与思考及致谢 ............................... 错误!未定义书签。

参考文献 ....................................................... 13

附一:原理图 ................................................... 16

附二:程序 ..................................................... 16

设计要求

电阻测量(需要简单的外围检测电路,将电阻转换为电压)

测量100,1k,4.7k,10k,20k 的电阻阻值,由数码管显示。

测试:误差10%。

1、方案论证与对比

1.1方案一

利用单稳或电容充放电规律等,可以把被测电阻量的大小转换成脉冲的宽窄,即脉冲的宽度Tx 与Rx 成正比。只要把此脉冲和频率固定不变的方波(以下称为时钟脉冲)相与,便可以得到计数脉冲,将它送给数字显示器。如果时钟脉冲的频率等参数合适,便可实现测量电阻。计数控制电路输出的脉冲宽度Tx 应与Rx 成正比,其电路原理图及具体555单稳态触发器的构成及仿真如图1所示。

用555构成的单稳态电路在正常工作条件下输出脉冲的宽度Tx 与Rx 的函数关系是:

T X =R ⨯C X ⨯ln 3

所产生的时间误差可能达到百分之十五,再加上其他原因产生的误差,测量是的时间延迟太大。

图1 方案一原理图

1.2方案二

用ADC0809 电阻测量,以一个1K 的电阻作为基准电阻。和被测电阻进行分

压,分压比例得出电阻比例。

R 1

R 2=V 1

V 2

用ACD0809测量电阻时间误差为%10以下,分辨率高,输出能与TTL 电平兼容。其原理图如图2所示。

图2 方案二原理图

1.3方案对比与比较

由于课程设计的要求是电阻测量需要简单的外围检测电路,将电阻转换为电压,测量100,1k,4.7k,10k,20k 的电阻阻值,由数码管显示。测试:误差10%。通过比较以上两个方案,可知方案二相对来说比较适合。所以选用方案二作为实验方案。

2、系统硬件电路的设计

2.1 振荡电路模块

振荡电路通过这两个引脚外并接石英晶体振荡器和两只电容(电容和一般取

33pF ),这样就构成一个稳定的自激振荡器。为单片机提供时钟信号。如图3所示。

图3. 振荡电路

2.2 A/D转换电路模块

ADC 0809是采用逐次逼近式原理的A/D转换器。

ADC 0809的工作过程是:首先输入3位地址,并使ALE =1,将地址存入地址锁存器中。此地址经译码选通8路模拟输入之一到比较器。START 上升沿将逐次逼近寄存器复位。下降沿启动 A/D 转换,之后EOC 输出信号变低,指示转换正在进行。直到A /D 转换完成,EOC 变为高电平,指示A /D 转换结束,结果数据已存入锁存器,这个信号可用作中断申请。当OE 输入高电平时,输出三态门打开,转换结果的数字量输出到数据总线上,9电路图如图4所示。

图4 A/D转换电路原理图

2.2.1主要性能

1分辨率为8位二进制数。

2模拟输入电压范围0V —5V ,对应A/D转换值为00H —FFH 。

3每路A/D转换完成时间为100µs。

4允许输入4路模拟电压,通过具有锁存功能的4路模拟开关,可以分时进行4路A/D转换。

5工作频率为500kHz , 输出与TTL 电平兼容。

2.2.2 ADC0809芯片的组成原理

具体设计要求如图5所示,它是由地址锁存器、4路模拟开关、8位逐次A/D转换器和三态锁存输出缓冲器构成。由3位地址输入线ADDRA 、ADDRB 、ADDRC 决定4路模拟输入中的1路进8位A/D转换器,A/D转换值进入三态锁存输出缓冲器暂存,在CPU 发来输出允许控制信号OE 后,三态门打开,经DB 7—DB 0进入CPU 总线,完成一次A/D转换全过程。

图5 A/D转换电路原路图

2.2.3 ADC0809引脚功能

ADC 0809采用28引脚的封装,双列直插式。A/D转换由集成电路ADC 0809完成。ADC 0809具有8路模拟输入端口,地址线(23— 25脚—即C,B,A, )可决定对哪一路模拟输入作A/D转换。22脚为地址锁存控制(ALE ),当输入为高电平时,对地址信号进行锁存。6脚为测试控制(START ),当输入一个2us 宽高电平脉冲时,就开始A/D转换。7脚为A/D转换结束标志(EOC ),当A/D转换结束时,7脚输出高电平。9脚为A/D转换数据输出允许控制(OE ),当OE 脚为高电平时,A/D转换数据从该端口输出。10脚为ADC 0809的时钟输入端(CLOCK ),利用单片机30脚的六分频晶振频率再通过14024二分频得到1MHz 时钟。单片机的P 1、P 3.0—P 3.3端口作

为四位LED 数码管显示控制。P 3.5端口用作单路显示/循环显示转换按钮,P 3.6端口用作单路显示时选择通道。P 0端口作A/D转换数据读入用,P 2端口用作ADC 0809的A/D转换控制。

2.3 主控芯片AT89C52模块

AT 89C 52是一个低电压,高性能CMOS 8位单片机,片内含8k bytes 的可反复擦写的Flash 只读程序存储器和256 bytes 的随机存取数据存储器(RAM ),器件采用ATMEL 公司的高密度、非易失性存储技术生产,兼容标准MCS —51指令系统,片内置通用8位中央处理器和Flash 存储单元,功能强大的AT 89C 52单片机可为您提供许多较复杂系统控制应用场合。

AT 89C 52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口。3个16位可编程定时计数器,2个全双工串行通信口,2个读写口线,AT 89C 52可以按照常规方法进行编程,也可以在线编程。其将通用的微处理器和Flash 存储器结合在一起,特别是可反复擦写的Flash 存储器可有效地降低开发成本。

如图6所示为AT 89C 52管脚图。

图6 AT 89C 52管脚图

2.3.1主要功能特性

·与MCS —51产品指令和引脚完全兼容

·8k 字节可重擦写Flash 闪速存储器

·1000次擦写周期

·全静态操作:0Hz —24MHz

·三级加密程序存储器

·32个可编程I/O口线

·低功耗空闲和掉电模式

·3个16位定时/计数器

·可编程串行UART 通道

2.3.2 主要引脚功能

VCC : 电源

GND : 地

P 0 口:P 0 口是一组8 位漏极开路型双向I/O 口,也即地址/数据总线复用口。

P 1口:P 1口是一个具有内部上拉电阻的8位双向I/O口,P 1输出缓冲器能驱动4个TTL 逻辑电平。对P 1端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL )。此外,P 1.0和P 1.2分别作定时器/计数器2的外部计数输入(P 1.0/T2)和时器/计数器2的触发输入(P 1.1/T2EX )。

P2口:P 2口是一个具有内部上拉电阻的8位双向I/O口,P 2输出缓冲器能驱动4个TTL 逻辑电平。对P 2端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL )。在访问外部程序存储器或用16位地址读取外部数据存储器(例如执行MOVX @DPTR)时,P 2口送出高八位地址。在这种应用中,P 2口使用很强的内部上拉发送1。在使用8位地址(如MOVX @RI )访问外部数据存储器时,P 2口输出P 2锁存器的内容。在flash 编程和校验时,P 2口也接收高8位地址字节和一些控制信号。

P 1口和P 2口的第二功能如下表1所示。

表1 P 0和P 1口的第二功能

引脚号

功能特性

P 1.0 P 1.1

T 2(定时/计数器2外部计数脉冲输入) ,时钟输出 T 2EX (定时/计数2捕获/重载触发和方向控制)

P 3口:P 3口是一个具有内部上拉电阻的8位双向I/O口,P 3口输出缓冲器能驱动4个TTL 逻辑电平。对P 3端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL )。P 3口亦作为AT 89C 52特殊功能(第二功能)使用,在flash 编程和校验时,

P 3口也接收一些控制信号。具体功能如表2所示:

表2 P3口的第二功能

端口引脚

第二功能

P 3.0 P 3.1 P 3.2 P 3.3 P 3.4 P 3.5 P 3.6 P 3.7

RXD (串行输入口) TXD (串行输出口) 外中断0 外中断1

T 0(定时/计数器0) T 1(定时/计数器1) 外部数据存储器写选通 外部数据存储器读选通

RST : 复位输入。晶振工作时,RST 脚持续2个机器周期高电平将使单片机复位。看门狗计时完成后,RST 脚输出96个晶振周期的高电平。特殊寄存器AUXR (地址8EH ) 上的DISRTO 位可以使此功能无效。DISRTO 默认状态下,复位高电平有效。

ALE/PROG:地址锁存控制信号(ALE )是访问外部程序存储器时,锁存低8位地址的输出脉冲。在flash 编程时,此引脚(PROG )也用作编程输入脉冲。在一般情况下,ALE 以晶振六分之一的固定频率输出脉冲,可用来作为外部定时器或时钟使用。然而,特别强调,在每次访问外部数据存储器时,ALE 脉冲将会跳过。如果需要,通过将地址为8EH 的SFR 的第0位置 “1”,ALE 操作将无效。这一位置 “1”,ALE 仅在执行MOVX 或MOVC 指令时有效。否则,ALE 将被微弱拉高。这个ALE 使能标志位(地址为8EH 的SFR 的第0位)的设置对微控制器处于外部执行模式下无效。

PSEN :外部程序存储器选通信号(PSEN )是外部程序存储器选通信号。当AT 89C 52从外部程序存储器执行外部代码时,PSEN 在每个机器周期被激活两次,而在访问外部数据存储器时,PSEN 将不被激活。

EA/VPP:访问外部程序存储器控制信号。为使能从0000H 到FFFFH 的外部程序存储器读取指令,EA 必须接GND 。为了执行内部程序指令,EA 应该接VCC 。在flash 编程期间,EA 也接收12伏VPP 电压。

XTAL 1:振荡器反相放大器和内部时钟发生电路的输入端。 XTAL 2:振荡器反相放大器的输出端。

2.4 显示控制电路的设计及原理

显示子程序采用动态扫描法实现4位数码管的数值显示。测量所得的A/D转换数据放70H —77H 内存单元中,测量数据在显示时须经过转换成为十进制BCD 码放在78H —7BH 单元中,其中7B 存放通道标志数。寄存器R 3用作8路循环控制,R 0用作显示数据地址指针。

本系统显示部分采用4位数码管动态扫描显示。

动态扫描显示接口是单片机中应用最为广泛的一种显示方式之一。其接口电路是把所有显示器的8个笔划段a-h 同名端连在一起,而每一个显示器的公共极COM 是各自独立地受I/O线控制。CPU 向字段输出口送出字形码时,所有显示器接收到相同的字形码,但究竟是那个显示器亮,则取决于COM 端,而这一端是由 I/O控制的,所以我们就可以自行决定何时显示哪一位了。而所谓动态扫描就是指我们采用分时的方法,轮流控制各个显示器的COM 端,使各个数码管轮流点亮。本系统采用4位共阴极数码管,COM 端接接P 20—P 23端,8个笔划段a-h 分别按顺序接P 07—P 00,轮流给P 20—P 23口低电平,使各个数码管轮流点亮。

在轮流点亮扫描过程中,每位显示器的点亮时间是极为短暂的(约1ms ),但由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位显示器并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感。

显示控制电路由图7的8255芯片和图8的数码管显示电路两部分组成

图7

8255芯片

图8 数码管显示电路

3、程序设计

3.1 初始化程序

void Init() {

ST = 0; OE = 0;

a8255_CON=0x81; PB=0xff; PA=0xff; }

3.2主程序

void main() { uchar I=0,J=0;

uint RRR=0;

Init();

while (1)

{

Get_Resistance();

If(RRR==0)RRR=R_T; //计算平均值 else

if(J==30){R=RRR;RRR=0;J=0;} //J为 30个平均值 else J++;

Display();

} }

3.3显示子程序

void Display() { uchar A; uint B=10000;

for(A=0x02;A

if(R/B)

《可改》

}

}

{ if(A!=0X02)Delay(150);

PB=0XFF; PA=0XFF;

PB=LED_CODE[(R%(B*10))/(B)]; PA=~A;

}B/=10;

3.4 A/D转换测量子程序

uchar Ad_Cover() {

uchar AD_DATA; ST = 0;

ST = 1; //启动AD 转换 ST = 0;

while (EOC==0)CLK = ~CLK; OE = 1; AD_DATA = P0; OE = 0;

return AD_DATA; }

4、系统调试与分析

4.1 硬件调试

硬件调试时可以检查印制板和外围电路是否有断路或短路问题,在检查无误的情况下,通过外围电路接入一个被测电阻,检查数码管显示是否正常,若不正常,用万用表检查出电路的问题所在,并纠正电路的焊接问题。

为了测量的精准度,用万用表选择1KΩ的基准电阻,尽量使基准电阻接近1KΩ, 减少测量的误差。

4.2 软件调试

将用keil 编译产生的HEX 文件下载到单片机开发板中,通过外围电路接入一个已知的被测电阻,看数码管上的显示数值是否接近已知的电阻值,若不对,则反复调试程序,直到正确为止。

4.3 性能分析

1. 误差W=

|R 1-R 2|

R 0

⨯100%,如表3所示。

2. 误差分析

AD 的分辨率只有八位,分辨率小,所以测量小电阻的时候误差小,随着测量电阻的变大误差变大。

表3 误差分析

5、元件清单

6、总结与思考及致谢

这次单片机课程设计意义非同一般,把我从单深入的理论编程到硬件软件综

合实现一个使用的电路。通过这学期的单片机的学习,知道了单片机在实际应用中占据很重要的作用,也了解单片机本身的功能,用编程控制;也了解了单片机的一些扩展功能。通过这次设计,我更深入地了解到单片机的使用原理和功能。

为期两周的设计中,我看到很多同学都很努力,很认真,我也不敢懈怠。虽说两周的时间有点仓促,但老师和同学们夜以继日在解决问题,我做电阻测量的设计中也遇到些许问题,但通过他人的指点,并查阅很多有价值的书籍,我从中认识了不少。也增强了自己发现问题解决问题的能力。还有在编程的时候要仔细,要实现一个完整的功能就要考虑全面,在测试程序的时候要善于发现错误,而且可能是一些小问题,比如说把立即数和地址混用,这是很常见的。

两周的设计完满结束了,经过自己的努力和同学的帮忙终于有了成果,特别离不开指导老师方智文的悉心教导,我受益匪浅,相信他的工作作风和知识筑成都是我们学习榜样,给我很大的启迪。感谢这些老师不畏辛劳,热心精心的指导。在这里向他们说声谢谢,你们辛苦了。

参考文献

[1] 张鑫. 《单片微机原理与应用》.[M ] 北京. 电子工业出版社. 2008

[2] 楼然苗. 李光飞. 《单片机课程设计指导》. [M ]北京. 航空航天大学出版社. 2007

[3] 长洪润. 刘秀英. 《单片机应用设计200例(上、下)》. [M ] 北京. 航空航天大学出版社.2006

[4] 张毅刚. 《 新编MCS —51单片机应用设计(第3版)》.[M ]哈尔滨工业大学出版社.2008

[5] 马静. 《单片机原理与应用》. [

附一:原理图

M ] 实践教学指导书中国计量出版社. 2003

附二:程序

#include #define uchar unsigned char #define uint unsigned int sbit ST = P2 ^ 7; sbit EOC = P3 ^ 4; sbit OE = P2 ^ 3; sbit CLK = P2 ^ 0;

xdata uchar PA _at_ 0xD1FF, PB _at_ 0xD2FF, PC _at_ 0xD5FF, a8255_CON _at_ 0xD7FF;

uint R=0,R_T;

uchar code LED_CODE[]= {0xA0, 0xBB, 0x62, 0x2A, 0x39, 0x2C, 0x24,

0xBA, 0x20, 0x28};

void Init() {

ST = 0; OE = 0;

a8255_CON=0x81; PB=0xff; PA=0xff; }

uchar Ad_Cover() {

uchar AD_DATA; ST = 0; ST = 1; ST = 0;

while (EOC==0)CLK = ~CLK; OE = 1;

AD_DATA = P0;

OE = 0;

return AD_DATA;

}

void Get_Resistance()

{ float c;

uchar TEMP; TEMP=Ad_Cover(); c=(float)(256-TEMP);

c = 1000.000*(c/(float)TEMP); R_T=(unsigned int)c;

}

void Delay(uint CNT)

{

}

void Display()

{

uchar A; uint B=10000; for(A=0x02;A

17

} } }B/=10;

void main() {

uchar I=0,J=0; uint RRR=0; Init(); while (1) {

}

}

Get_Resistance(); if(RRR==0)RRR=R_T; else if(J==30){R=RRR;RRR=0;J=0;} else J++; Display();

18

课程设计报告

课程名称:单片机课程设计

设计题目:院 系: 通信与控制工程系

专 业: 通信工程

班 级:

学生姓名: 学 号: 起止日期:

指导教师: 教研室主任:

摘 要

本设计电阻测量是利用A/D转换原理,将被测模拟量转换成数字量, 并用数字方式显示测量结果的电子测量仪表。通常测量电阻都采用大规模的A/D转换集成电路,测量精度高,读数方便,在体积、重量、耗电、稳定性及可靠性等方面性能指标均明显优于指针式万用表。其中,A/D转换器将输入的模拟量转换成数字量,逻辑控制电路产生控制信号,按规定的时序将A/D转换器中各组模拟开关接通或断开,保证A/D转换正常进行。A/D转换结果通过计数译码电路变换成BCD 码,最后驱动显示器显示相应的数值。本系统以单片机AT 89C 52为系统的控制核心, 结合A/D转换芯片ADC 0809设计一个电阻测量表,能够测量一定数值之间的电阻值,通过四位数码显示。具有读数据准确,测量方便的特点。

关键词:单片机(AT 89C 52) ; 电压;A/D转换;ADC 0809

目录

设计要求 ........................................................ 1

1、方案论证与对比 ................................................ 1

1.1方案一 ............................................................ 1

1.2方案二 ............................................................ 1

1.3方案对比与比较 ................................... 错误!未定义书签。

2、系统硬件电路的设计 ............................................ 2

2.1 振荡电路模块 ..................................................... 2

2.2 A/D转换电路模块 .................................................. 3

2.2.1主要性能 ...................................................... 3

2.2.2 ADC0809芯片的组成原理 ........................................ 4

2.2.3 ADC0809引脚功能 .............................................. 4

2.3 主控芯片AT89C52模块 .............................................. 5

2.3.1主要功能特性 .................................................. 6

2.3.2 主要引脚功能 .................................................. 6

2.4 显示控制电路的设计及原理 .......................................... 8

3、程序设计 ..................................................... 9

3.1 初始化程序 ........................................................ 9

3.2主程序 ........................................................... 10

3.3显示子程序 ....................................................... 10

3.4 A/D转换测量子程序 ............................................... 11

4、调试及性能分析 ............................................... 11

4.1调试与测试 ....................................................... 11

4.2性能分析 ......................................................... 12 5、元件清单 .................................................... 13

6、总结与思考及致谢 ............................... 错误!未定义书签。

参考文献 ....................................................... 13

附一:原理图 ................................................... 16

附二:程序 ..................................................... 16

设计要求

电阻测量(需要简单的外围检测电路,将电阻转换为电压)

测量100,1k,4.7k,10k,20k 的电阻阻值,由数码管显示。

测试:误差10%。

1、方案论证与对比

1.1方案一

利用单稳或电容充放电规律等,可以把被测电阻量的大小转换成脉冲的宽窄,即脉冲的宽度Tx 与Rx 成正比。只要把此脉冲和频率固定不变的方波(以下称为时钟脉冲)相与,便可以得到计数脉冲,将它送给数字显示器。如果时钟脉冲的频率等参数合适,便可实现测量电阻。计数控制电路输出的脉冲宽度Tx 应与Rx 成正比,其电路原理图及具体555单稳态触发器的构成及仿真如图1所示。

用555构成的单稳态电路在正常工作条件下输出脉冲的宽度Tx 与Rx 的函数关系是:

T X =R ⨯C X ⨯ln 3

所产生的时间误差可能达到百分之十五,再加上其他原因产生的误差,测量是的时间延迟太大。

图1 方案一原理图

1.2方案二

用ADC0809 电阻测量,以一个1K 的电阻作为基准电阻。和被测电阻进行分

压,分压比例得出电阻比例。

R 1

R 2=V 1

V 2

用ACD0809测量电阻时间误差为%10以下,分辨率高,输出能与TTL 电平兼容。其原理图如图2所示。

图2 方案二原理图

1.3方案对比与比较

由于课程设计的要求是电阻测量需要简单的外围检测电路,将电阻转换为电压,测量100,1k,4.7k,10k,20k 的电阻阻值,由数码管显示。测试:误差10%。通过比较以上两个方案,可知方案二相对来说比较适合。所以选用方案二作为实验方案。

2、系统硬件电路的设计

2.1 振荡电路模块

振荡电路通过这两个引脚外并接石英晶体振荡器和两只电容(电容和一般取

33pF ),这样就构成一个稳定的自激振荡器。为单片机提供时钟信号。如图3所示。

图3. 振荡电路

2.2 A/D转换电路模块

ADC 0809是采用逐次逼近式原理的A/D转换器。

ADC 0809的工作过程是:首先输入3位地址,并使ALE =1,将地址存入地址锁存器中。此地址经译码选通8路模拟输入之一到比较器。START 上升沿将逐次逼近寄存器复位。下降沿启动 A/D 转换,之后EOC 输出信号变低,指示转换正在进行。直到A /D 转换完成,EOC 变为高电平,指示A /D 转换结束,结果数据已存入锁存器,这个信号可用作中断申请。当OE 输入高电平时,输出三态门打开,转换结果的数字量输出到数据总线上,9电路图如图4所示。

图4 A/D转换电路原理图

2.2.1主要性能

1分辨率为8位二进制数。

2模拟输入电压范围0V —5V ,对应A/D转换值为00H —FFH 。

3每路A/D转换完成时间为100µs。

4允许输入4路模拟电压,通过具有锁存功能的4路模拟开关,可以分时进行4路A/D转换。

5工作频率为500kHz , 输出与TTL 电平兼容。

2.2.2 ADC0809芯片的组成原理

具体设计要求如图5所示,它是由地址锁存器、4路模拟开关、8位逐次A/D转换器和三态锁存输出缓冲器构成。由3位地址输入线ADDRA 、ADDRB 、ADDRC 决定4路模拟输入中的1路进8位A/D转换器,A/D转换值进入三态锁存输出缓冲器暂存,在CPU 发来输出允许控制信号OE 后,三态门打开,经DB 7—DB 0进入CPU 总线,完成一次A/D转换全过程。

图5 A/D转换电路原路图

2.2.3 ADC0809引脚功能

ADC 0809采用28引脚的封装,双列直插式。A/D转换由集成电路ADC 0809完成。ADC 0809具有8路模拟输入端口,地址线(23— 25脚—即C,B,A, )可决定对哪一路模拟输入作A/D转换。22脚为地址锁存控制(ALE ),当输入为高电平时,对地址信号进行锁存。6脚为测试控制(START ),当输入一个2us 宽高电平脉冲时,就开始A/D转换。7脚为A/D转换结束标志(EOC ),当A/D转换结束时,7脚输出高电平。9脚为A/D转换数据输出允许控制(OE ),当OE 脚为高电平时,A/D转换数据从该端口输出。10脚为ADC 0809的时钟输入端(CLOCK ),利用单片机30脚的六分频晶振频率再通过14024二分频得到1MHz 时钟。单片机的P 1、P 3.0—P 3.3端口作

为四位LED 数码管显示控制。P 3.5端口用作单路显示/循环显示转换按钮,P 3.6端口用作单路显示时选择通道。P 0端口作A/D转换数据读入用,P 2端口用作ADC 0809的A/D转换控制。

2.3 主控芯片AT89C52模块

AT 89C 52是一个低电压,高性能CMOS 8位单片机,片内含8k bytes 的可反复擦写的Flash 只读程序存储器和256 bytes 的随机存取数据存储器(RAM ),器件采用ATMEL 公司的高密度、非易失性存储技术生产,兼容标准MCS —51指令系统,片内置通用8位中央处理器和Flash 存储单元,功能强大的AT 89C 52单片机可为您提供许多较复杂系统控制应用场合。

AT 89C 52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口。3个16位可编程定时计数器,2个全双工串行通信口,2个读写口线,AT 89C 52可以按照常规方法进行编程,也可以在线编程。其将通用的微处理器和Flash 存储器结合在一起,特别是可反复擦写的Flash 存储器可有效地降低开发成本。

如图6所示为AT 89C 52管脚图。

图6 AT 89C 52管脚图

2.3.1主要功能特性

·与MCS —51产品指令和引脚完全兼容

·8k 字节可重擦写Flash 闪速存储器

·1000次擦写周期

·全静态操作:0Hz —24MHz

·三级加密程序存储器

·32个可编程I/O口线

·低功耗空闲和掉电模式

·3个16位定时/计数器

·可编程串行UART 通道

2.3.2 主要引脚功能

VCC : 电源

GND : 地

P 0 口:P 0 口是一组8 位漏极开路型双向I/O 口,也即地址/数据总线复用口。

P 1口:P 1口是一个具有内部上拉电阻的8位双向I/O口,P 1输出缓冲器能驱动4个TTL 逻辑电平。对P 1端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL )。此外,P 1.0和P 1.2分别作定时器/计数器2的外部计数输入(P 1.0/T2)和时器/计数器2的触发输入(P 1.1/T2EX )。

P2口:P 2口是一个具有内部上拉电阻的8位双向I/O口,P 2输出缓冲器能驱动4个TTL 逻辑电平。对P 2端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL )。在访问外部程序存储器或用16位地址读取外部数据存储器(例如执行MOVX @DPTR)时,P 2口送出高八位地址。在这种应用中,P 2口使用很强的内部上拉发送1。在使用8位地址(如MOVX @RI )访问外部数据存储器时,P 2口输出P 2锁存器的内容。在flash 编程和校验时,P 2口也接收高8位地址字节和一些控制信号。

P 1口和P 2口的第二功能如下表1所示。

表1 P 0和P 1口的第二功能

引脚号

功能特性

P 1.0 P 1.1

T 2(定时/计数器2外部计数脉冲输入) ,时钟输出 T 2EX (定时/计数2捕获/重载触发和方向控制)

P 3口:P 3口是一个具有内部上拉电阻的8位双向I/O口,P 3口输出缓冲器能驱动4个TTL 逻辑电平。对P 3端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL )。P 3口亦作为AT 89C 52特殊功能(第二功能)使用,在flash 编程和校验时,

P 3口也接收一些控制信号。具体功能如表2所示:

表2 P3口的第二功能

端口引脚

第二功能

P 3.0 P 3.1 P 3.2 P 3.3 P 3.4 P 3.5 P 3.6 P 3.7

RXD (串行输入口) TXD (串行输出口) 外中断0 外中断1

T 0(定时/计数器0) T 1(定时/计数器1) 外部数据存储器写选通 外部数据存储器读选通

RST : 复位输入。晶振工作时,RST 脚持续2个机器周期高电平将使单片机复位。看门狗计时完成后,RST 脚输出96个晶振周期的高电平。特殊寄存器AUXR (地址8EH ) 上的DISRTO 位可以使此功能无效。DISRTO 默认状态下,复位高电平有效。

ALE/PROG:地址锁存控制信号(ALE )是访问外部程序存储器时,锁存低8位地址的输出脉冲。在flash 编程时,此引脚(PROG )也用作编程输入脉冲。在一般情况下,ALE 以晶振六分之一的固定频率输出脉冲,可用来作为外部定时器或时钟使用。然而,特别强调,在每次访问外部数据存储器时,ALE 脉冲将会跳过。如果需要,通过将地址为8EH 的SFR 的第0位置 “1”,ALE 操作将无效。这一位置 “1”,ALE 仅在执行MOVX 或MOVC 指令时有效。否则,ALE 将被微弱拉高。这个ALE 使能标志位(地址为8EH 的SFR 的第0位)的设置对微控制器处于外部执行模式下无效。

PSEN :外部程序存储器选通信号(PSEN )是外部程序存储器选通信号。当AT 89C 52从外部程序存储器执行外部代码时,PSEN 在每个机器周期被激活两次,而在访问外部数据存储器时,PSEN 将不被激活。

EA/VPP:访问外部程序存储器控制信号。为使能从0000H 到FFFFH 的外部程序存储器读取指令,EA 必须接GND 。为了执行内部程序指令,EA 应该接VCC 。在flash 编程期间,EA 也接收12伏VPP 电压。

XTAL 1:振荡器反相放大器和内部时钟发生电路的输入端。 XTAL 2:振荡器反相放大器的输出端。

2.4 显示控制电路的设计及原理

显示子程序采用动态扫描法实现4位数码管的数值显示。测量所得的A/D转换数据放70H —77H 内存单元中,测量数据在显示时须经过转换成为十进制BCD 码放在78H —7BH 单元中,其中7B 存放通道标志数。寄存器R 3用作8路循环控制,R 0用作显示数据地址指针。

本系统显示部分采用4位数码管动态扫描显示。

动态扫描显示接口是单片机中应用最为广泛的一种显示方式之一。其接口电路是把所有显示器的8个笔划段a-h 同名端连在一起,而每一个显示器的公共极COM 是各自独立地受I/O线控制。CPU 向字段输出口送出字形码时,所有显示器接收到相同的字形码,但究竟是那个显示器亮,则取决于COM 端,而这一端是由 I/O控制的,所以我们就可以自行决定何时显示哪一位了。而所谓动态扫描就是指我们采用分时的方法,轮流控制各个显示器的COM 端,使各个数码管轮流点亮。本系统采用4位共阴极数码管,COM 端接接P 20—P 23端,8个笔划段a-h 分别按顺序接P 07—P 00,轮流给P 20—P 23口低电平,使各个数码管轮流点亮。

在轮流点亮扫描过程中,每位显示器的点亮时间是极为短暂的(约1ms ),但由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位显示器并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感。

显示控制电路由图7的8255芯片和图8的数码管显示电路两部分组成

图7

8255芯片

图8 数码管显示电路

3、程序设计

3.1 初始化程序

void Init() {

ST = 0; OE = 0;

a8255_CON=0x81; PB=0xff; PA=0xff; }

3.2主程序

void main() { uchar I=0,J=0;

uint RRR=0;

Init();

while (1)

{

Get_Resistance();

If(RRR==0)RRR=R_T; //计算平均值 else

if(J==30){R=RRR;RRR=0;J=0;} //J为 30个平均值 else J++;

Display();

} }

3.3显示子程序

void Display() { uchar A; uint B=10000;

for(A=0x02;A

if(R/B)

《可改》

}

}

{ if(A!=0X02)Delay(150);

PB=0XFF; PA=0XFF;

PB=LED_CODE[(R%(B*10))/(B)]; PA=~A;

}B/=10;

3.4 A/D转换测量子程序

uchar Ad_Cover() {

uchar AD_DATA; ST = 0;

ST = 1; //启动AD 转换 ST = 0;

while (EOC==0)CLK = ~CLK; OE = 1; AD_DATA = P0; OE = 0;

return AD_DATA; }

4、系统调试与分析

4.1 硬件调试

硬件调试时可以检查印制板和外围电路是否有断路或短路问题,在检查无误的情况下,通过外围电路接入一个被测电阻,检查数码管显示是否正常,若不正常,用万用表检查出电路的问题所在,并纠正电路的焊接问题。

为了测量的精准度,用万用表选择1KΩ的基准电阻,尽量使基准电阻接近1KΩ, 减少测量的误差。

4.2 软件调试

将用keil 编译产生的HEX 文件下载到单片机开发板中,通过外围电路接入一个已知的被测电阻,看数码管上的显示数值是否接近已知的电阻值,若不对,则反复调试程序,直到正确为止。

4.3 性能分析

1. 误差W=

|R 1-R 2|

R 0

⨯100%,如表3所示。

2. 误差分析

AD 的分辨率只有八位,分辨率小,所以测量小电阻的时候误差小,随着测量电阻的变大误差变大。

表3 误差分析

5、元件清单

6、总结与思考及致谢

这次单片机课程设计意义非同一般,把我从单深入的理论编程到硬件软件综

合实现一个使用的电路。通过这学期的单片机的学习,知道了单片机在实际应用中占据很重要的作用,也了解单片机本身的功能,用编程控制;也了解了单片机的一些扩展功能。通过这次设计,我更深入地了解到单片机的使用原理和功能。

为期两周的设计中,我看到很多同学都很努力,很认真,我也不敢懈怠。虽说两周的时间有点仓促,但老师和同学们夜以继日在解决问题,我做电阻测量的设计中也遇到些许问题,但通过他人的指点,并查阅很多有价值的书籍,我从中认识了不少。也增强了自己发现问题解决问题的能力。还有在编程的时候要仔细,要实现一个完整的功能就要考虑全面,在测试程序的时候要善于发现错误,而且可能是一些小问题,比如说把立即数和地址混用,这是很常见的。

两周的设计完满结束了,经过自己的努力和同学的帮忙终于有了成果,特别离不开指导老师方智文的悉心教导,我受益匪浅,相信他的工作作风和知识筑成都是我们学习榜样,给我很大的启迪。感谢这些老师不畏辛劳,热心精心的指导。在这里向他们说声谢谢,你们辛苦了。

参考文献

[1] 张鑫. 《单片微机原理与应用》.[M ] 北京. 电子工业出版社. 2008

[2] 楼然苗. 李光飞. 《单片机课程设计指导》. [M ]北京. 航空航天大学出版社. 2007

[3] 长洪润. 刘秀英. 《单片机应用设计200例(上、下)》. [M ] 北京. 航空航天大学出版社.2006

[4] 张毅刚. 《 新编MCS —51单片机应用设计(第3版)》.[M ]哈尔滨工业大学出版社.2008

[5] 马静. 《单片机原理与应用》. [

附一:原理图

M ] 实践教学指导书中国计量出版社. 2003

附二:程序

#include #define uchar unsigned char #define uint unsigned int sbit ST = P2 ^ 7; sbit EOC = P3 ^ 4; sbit OE = P2 ^ 3; sbit CLK = P2 ^ 0;

xdata uchar PA _at_ 0xD1FF, PB _at_ 0xD2FF, PC _at_ 0xD5FF, a8255_CON _at_ 0xD7FF;

uint R=0,R_T;

uchar code LED_CODE[]= {0xA0, 0xBB, 0x62, 0x2A, 0x39, 0x2C, 0x24,

0xBA, 0x20, 0x28};

void Init() {

ST = 0; OE = 0;

a8255_CON=0x81; PB=0xff; PA=0xff; }

uchar Ad_Cover() {

uchar AD_DATA; ST = 0; ST = 1; ST = 0;

while (EOC==0)CLK = ~CLK; OE = 1;

AD_DATA = P0;

OE = 0;

return AD_DATA;

}

void Get_Resistance()

{ float c;

uchar TEMP; TEMP=Ad_Cover(); c=(float)(256-TEMP);

c = 1000.000*(c/(float)TEMP); R_T=(unsigned int)c;

}

void Delay(uint CNT)

{

}

void Display()

{

uchar A; uint B=10000; for(A=0x02;A

17

} } }B/=10;

void main() {

uchar I=0,J=0; uint RRR=0; Init(); while (1) {

}

}

Get_Resistance(); if(RRR==0)RRR=R_T; else if(J==30){R=RRR;RRR=0;J=0;} else J++; Display();

18


相关内容

  • 单片机毕业设计完整版
  • 安徽工业大学继续学院 <单片机原理>期末课程设计 题 目: 单片机计时时钟设计与制作 专 业: 电气工程及其自动化 班 级: 14 电 升 姓 名: 夏 云 飞 学 号: [1**********]35 指导老师: 贺 容 波 成 绩: ( 2015.12 ) 目 录 一.绪论- --- ...

  • 智能电风扇控制器设计报告完整版
  • 智能电风扇控制器设计 <单片机课程设计>设计报告 设计题目 智能电风扇控制器设计 目 录 序言 一. 设计任务----------------..------2 二. 小直流电机调速控制系统的总体方案设计-------.-.2 T6.,2.1.系统硬件总体结构-------------- ...

  • 单片机交通灯实训报告完整版
  • 课 程 设 计 课题名称 智能交通信号灯 姓 名 学 号 班 级 专 业 所 在 系 指导教师 完成日期 智能交通信号灯 摘要 本设计是在熟练掌握单片机及其仿真系统使用方法基础上,综合应用单片机原理.微机原理等课程方面的知识,设计一个采用AT89C52单片机控制的交通灯控制电路.该设计结合实际情况给 ...

  • 智能仪器课程设计--温度测量仪-开封大学
  • 目 录 前 言 ................................... 错误!未定义书签. 第1章 智能温度测量仪表方案设计与论证 ............. 3 1.1 功能与要求 .................................................. ...

  • 电子秤报告
  • 测控技术与仪器专业 <传感器技术>课程设计任务书 课题:电阻应变式电子秤 班 级 测控 学生姓名 学号 指导教师 张青春 淮阴工学院 电子与电气工程学院 2015年 6月 目录 1.系统方案设计 1.1 概述 1.2 系统方案框图 2.工作原理 2.1 检测原理 2.2 传感器选择 2. ...

  • 电脑电饭煲控制器设计
  • 辽 宁 工 业 大 学 单片机原理及接口技术 课程设计(论文) 题目: 电脑电饭煲控制器设计 院(系): 电气工程学院 专业班级: 电气11 学 号: 111902010 学生姓名: 杨月 指导教师: (签字) 起止时间:2011.06.02-2011.06.13 课程设计(论文)任务及评语 院(系 ...

  • 传感器电子秤设计
  • <传感器技术>课程设计 课题:设计一种电子秤 班 级 学生姓名 学号 指导教师 XX学院 XX年X月X日 数字电子秤设计 1.系统方案设计 1.1 概述 本课程设计的电子秤以单片机为主要部件,利用全桥测量原理,通过对电路输出电压和标准重量的线性关系,建立具体的数学模型,将电压量纲(V)改 ...

  • 单片机电子称课程设计
  • 目 录 一.绪论„„„„„„„„„„„„„„„„„„„„„„„„„„„„„1 1.0引言 „„„„„„„„„„„„„„„„„„„„„„„„„„„„„1 1.1问题的提出 „„„„„„„„„„„„„„„„„„„„„„„„„„ 1 1.2任务与分析„„„„„„„„„„„„„„„„„„„„„„„„„„„1 ...

  • 仪器综合课程设计
  • <仪器综合课程设计> 任务书与说明书 智能化重量测量仪设计 Design of an Intelligent Weight Measuring Instrument 学院名称: 专业班级: 学生学号: 学生姓名: 指导教师姓名: 指导教师职称: 2015 年 1月 <仪器综合课程设 ...