51单片机课程设计报告

2025-04-10 版权声明 我要投稿

51单片机课程设计报告(推荐9篇)

51单片机课程设计报告 篇1

51单片机课程设计报告

学院:

专业班级:姓名:

指导教师:

设计时间:

51单片机课程设计

一、设计任务与要求

1.任务:制作并调试51单片机学习板 2.要求:

(1)了解并能识别学习板上的各种元器件,会读元器件标示;(2)会看电路原理图;

(3)制作51单片机学习板;

(4)学会使用Keil C软件下载调试程序;

用调试程序将51单片机学习板调试成功。

二、总原理图及元器件清单

1.总原理图

要求:用铅笔在A4纸整页绘制

2.元件清单

三、模块电路分析

1.最小系统:

单片机最小系统电路分为振荡电路和复位电路,振荡电路选用 12MHz 高精度晶振, 振荡电容选用 22p和30p 独石电容;

晶振为单片机提供时钟激励,保证单片机内部和外部电路的时序逻辑电路协调动作,课程中使用的是12M的晶振,可以产生每秒12M频率的激

励。而构成振荡回路的俩个电容为负载电容,可以影响晶振的谐振频率和振荡幅度。

图 1图

2复位电路使用 RC 电路,使用普通的电解电容与金属膜电阻即可;

3当单片机上电瞬间由于电容电压不能突变会使电容两边的电位相同,此时RST为高电平,之后随着时间推移电源负极通过电阻对电容放电,放完电时RST为低电平。正常工作为低电平,高电平复位。(分析振荡电路:测振荡频率; 分析复位电路:高或低电平复位?)

2.显示模块:

发光二极管显示电路:

Usb的为系统加电时,power的发光二极管处于高电位,发光。当程序控制其余四个脚的电位为低电位,输出端口为高电位,剩下的四个发光二极管发光

4数码管显示电路

本课程使用数码管显示状态为静态显示。静态显示就是显示驱动电路具有

输出锁存功能。单片机将所要显示的数据输出后,数码管显示数据不变。Cpu不再控制led。静态显示的接口电路采用一个并行口接一个数码管。数码管的公共端按共阴极或共阳极分别接地或

VCC

5四、硬件调试

1、是否短路

用万用表检查P2两端是短路。电阻为0,则短路,电阻为一适值,电路正常。

2、焊接顺序

焊接的顺序很重要,按功能划分的器件进行焊接,顺序是功能部件的焊接--调试--另一功能部件的焊接,这样容易找到问题的所在。

3、器件功能

1)检查原理图连接是否正确

2)检查原理图与PCB图是否一致

3)检查原理图与器件的DATASHEET上引脚是否一致 4)用万用表检查是否有虚焊,引脚短路现象

5)查询器件的DATASHEET,分析一下时序是否一致,同时分析一下命令字是否正确

6)通过示波器对芯片各个引脚进行检查,检查地址线是否有信号的7)飞线。用别的的口线进行控制,看看能不能对其进行正常操作,多试验,才能找到问题出现在什么地方。

六、软件调试

1、设置硬件仿真环境

单片机应用系统程序的编译和仿真在KeilμVision环境下进行,在调试程序之前,需要对工程进行Debug设置,选择软件仿真或硬件仿真。软件仿真使用计算机来模拟程序的运行,不需要建立硬件平台就可以快速得到某些运行结果;硬件仿真是最准确的仿真方法,必须建立硬件平台,通过PC机→硬件仿真器→用户目标系统进行系统调试。采用硬件仿真的方法,硬件平台即为带有图1所示接口电路的单片机应用系统,设置硬件仿真环境的具体操作步骤如下:

首先,点击所建工程:Project菜单中的Options for Target„Targer 1‟,出现工程的配置窗口,点击Debug设置,选择KeilMcmitor-51 Driver,具体参数设置如图6所示。

图 6

然后,设置仿真器参数。建议波特率设置范围300~38 400。为避免程序中的中断和Keil硬件仿真环境中的中断互相冲突,不选择“Stop ProgramExecution with SerialInterrupt”。仿真器参数的设置如图7所示。

图7

完成51单片机在Keil μVision环境中的硬件仿真环境设置后,可以进行程序的调试仿真。

2、调试仿真

1)导入测试代码:文件→打开→key and display.Uv2 2)重建全部工程:工程→重建全部目标文件

重建结果为,“DA_5615” – 0 Error(s), 0 Warning(s).3)调试:调试→Start/Stop Debug session(Ctrl + F5)

调试结果为:Connected to Monitor_51 V3.4Load “C:......DA_56511、详细描述软件调试步骤。及各模块调试结果。

2、详细描述调试过程中出现的故障现象,并作故障分析,及解决方法

七、心得

51单片机课程设计报告 篇2

一、《单片机 C51》课程简介

《单片机C51》是我院电子工程系中多个专业开设的一门课程。本文所介绍的《单片机C51》课程, 是机电一体化专业中设置的专业核心课程。能为从事机电产品生产与开发的企业培养具有单片机应用产品设计、分析、调试和制作能力的实践型人才。机电一体化专业中本门课前导课程包括电路基础、电子技术基础、传感器与检测技术、电气控制与PLC;平行课程包括液压与气动技术、机电一体化技术、数控技术应用; 后续课程包括创新设计与实现、用户控制界面开发。《单片机C51》课程采用项目教学法能让学生更深入的理解单片机开发的过程, 不仅提升了硬软件设计能力, 而且培养了职业素养, 对于推动高职教学改革工作具有积极的意义。

二、《单片机 C51》课程教学目标

本门课程教学目标分为三个方面: (1) 知识目标。掌握单片机端口及端口的基本应用;掌握C51程序的基本结构及设计方法; 掌握程序对单片机端口的控制方法; (2) 技能目标。通过相应的项目学习, 提高学生单片机控制电路的设计能力和动手操作能力, 从而培养学生分析和解决实际问题的能力。 (3) 情感目标。通过师生互动让学生在学习中有成功的欲望和获得知识的喜悦, 增强自信心;同时培养学生的职业道德、团队精神和协作能力, 培养创新意识。目标三位一体, 全面培养具有丰富理论知识和很强动手能力的高级技术应用型人才, 与高职院校培养目标接轨。

三、《单片机 C51》课程采用项目教学法的设计原则

1.“先整体、后具体”的原则。先让学生对本门课程有一个整体的认识和了解, 掌握C51程序结构, 以及端口的应用, 然后用具体项目进一步拓展培养学生的编程思想, 提高学生的分析问题和解决问题的能力。经过多年的积累我个人对本课程的认识总结了以下几句话: 时间改变状态, 状态控制端口;端口驱动硬件, 硬件实现功能;硬件端口分配, 软件功能分配。

2. 虚拟仿真与试验箱验证相结合的原则。授课时使用Proteus仿真软件、Keil C51编程软件对项目进行原理图布图、代码调试。然后与试验箱连接, 实现与外围电路协同仿真, 真正实现了从概念到产品的完整设计 ( 完成从概念到具体应用的过程) 。

3. 以学生为主体, 鼓励学生主动探索, 培养学生自主创新意识, 提高学习兴趣, 享受成功的喜悦。

4. 以教师为主导, 对项目进行集中讲解, 个别辅导, 充分发挥教师的指导、协助、协调和监督的作用。

四、《单片机 C51》课程教学过程设计

本门课程设计了五个项目, 包括项目一单片机实验电路制作;项目二C语言程序识读; 项目三班级成绩排名; 项目四流水灯; 项目五键控数码显示;项目六倒计时;项目七交通灯;项目八数字钟。下面以具体的一个项目为例介绍教学过程, 教学分为六个步骤。

1. 情境导入。用多媒体播放交通灯画面, 把本项目内容形象化, 让学生乐于接受, 易于理解。

2. 项目任务。要求是只有红灯、绿灯轮流切换。南北方向绿灯40秒, 东西方向绿灯30秒, 动态扫描显示时间。

3. 项目分析。学生按照分组首先分析项目任务, 根据任务查找、搜集相关资料, 设计硬件、软件资源的分配, 初步确定方案。

4. 方案制定。小组讨论方案, 如有问题, 分析解决, 最终形成纸质文档。以下是某一小组制定的方案, 如表1。

5. 方案实施。根据方案, 使用Proteus仿真软件、Keil C51编程软件对项目进行原理图布图、代码调试。主函数完成初始化, 定时器T0完成动态扫描、倒计时、状态变换。通过编译、仿真验证后与试验箱连接, 观测效果, 进一步完善设计。

6. 项目拓展。完成本设计后, 教师进行引导, 学生可以把本项目的编程思想拓展到不同领域, 例如洗衣机的状态, 洗涤、漂洗、脱水这三个状态和交通灯的红灯、黄灯、绿灯这三个状态类似。因此学生经过一个项目的实施, 学会一类项目, 学习能力大大提高。

7. 小结与评价。以小组为单位进行成果展示, 评价时采取自我评价、小组互评、教师评价相结合的形式进行。

五、应用“项目教学法”的几点感触

1. 使学生真正感觉到了理论与实践的有机结合, 领悟到程序设计的基本方法。

2. 使学生学会了怎样学习和运用新知识、新技能的方法, 学会了学习, 体验了知识技能的“边学边用, 活学活用”的价值, 自主学习能力初步形成。学会了面对问题、分析问题、解决问题的方法。

3. 培养了学生协作学习、合作探究的学习能力, 初步形成了团队意识

4. 培养了学生搜集信息、分析取舍信息、整理信息的能力。

5. 巩固拓展了学生以前的知识技能, 使学生完成专业任务的综合能力得到提高。

51单片机课程设计报告 篇3

关键词:单片机;开发板;ISP

中图分类号:TP368.1 文献标识码:A文章编号:1007-9599 (2011) 08-0000-02

MCU Development Borad Design of Multi-function MCS-51

Zhang Daode

(Hubei University of Technology Mechanical Engineering,Wuhan430068,China)

Abstract:The develop boarddesigned here is of common functions,

such as water lamp,timer,interrupt,singing by buzzer,X5045 watch dog,Real time clock DS1302,digital temperature sensor DS18B20,parallel D/A converter DAC0832,serial A/D converter TLC0832,RS-232 interface,

dynamic display of digital tub,ISP download online,SRAM6264 etc.It is meaningful for single chip machine study and development.

Keywords:MCU;Development board;ISP

一、前言

MCS-51系列单片机是目前主流的8位单片机之一[1],但由于它的硬件能力有限,本文设计了一种单片机开发板,综合了当下流行的单片机接口电路,很好地扩充了MCS-51单片机的功能。

二、系统主要组成及开发平台

该系统的组成部分的核心是AT89S52单片机芯片,同时扩展了一块RAM6264,并口8155,同时扩充了DAC0832和TLC0832作为AD/DA转换电路,在此基础上还扩充有FM12864中文液晶图形模块接口电路、DS18B20温度传感检测电路,DS1302时钟显示芯片接口,X5045看门狗接口电路,另外将键盘和数码管显示作为独立的模块,方便了使用也使I/O资源空闲,RS-232串口通信电路可实现开发楹和电脑的双机通信。电源方面设置了USB供电和外接电源供电两种方式。

AT89S52单片机口具有8KB的FLASH[2],通过提供的ISP在线下载线可以现场仿真而无须专门的烧写器即可以将目标程序下载到CPU中,在51 MCU_SYSTEM中就可以观察到程序的运行情况。本文所使用的开发工具为µVision2集成开发平台[3],包含一个高效的编辑器、一个项目管理器和一个MAKE工具。并且支持所有Keil C51工具,包括C编译器、宏汇编器连接/定位器、目标代码到HEX转换器。

三、系统主要硬件设计

(一)单片机部分

CPU采用的是AT89S5X系列的单片机,同时兼容飞利浦P89系列的单片机,在本系统是单片机上的EA接的是高电平,表示对ROM的读写从内部程序存储器开始,并且可以延至外部存储器。在P0口接有470欧的排组上拉数据口,系统主频率12MHz。

图1.单片机部分电路设计

(二)8155部分

在本系统中采用8155实现I/O扩展。8155不仅具有两个8位的I/O端口A、B口和一个6位的I/O端口C口,而且还可以提供256个字节的静态RAM存储器和一个14位的定时/计数器。8155和单片机的接口非常简单,目前被广泛应用。系统用一片73LS138实现8155、6264等芯片的片选。

图2.8155接口电路设计

(三)DAC0832部分

DAC0832是8位D/A转换器,,转换结果为一对差动电流输出,转换时间大约为1us。使用单电源+5V―+15V供电[1]。参考电压为-10V-+10V。在此我们直接选择+5V作为参考电压。DAC0832有三种工作方式:直通方式,单缓冲方式,双缓冲方式;在此我们选择直通的工作方式,将XFER、WR2、CS管脚全部接数字地。管脚8接参考电压,在此我们接的参考电压是+5V,如图3所示,可以产生三角波,锯齿波,梯型波等波形。CE2接在74LS138上,通过分配地址完成片选。

图3.DAC0832接口电路

(四)TLC0832

TLC0832是八位串行逐次逼近模数转换器[4],它有两个可选择的输入通道。其接口电路如图所示。TLC0832的通道0外接了电位器,可以模拟不同的电压输入。对TLC0832的控制需要3根I/O口线,可以从单片机及8155接入。

图4.TLC0832接口电路

(五)X5045接口电路

复位电路采用了带I2C的监控芯片X5045,上电即可复位[5],电路如图5所示。另外8155设置了独立的复位方式以弥补和51单片机的复位不同步缺点。

图5.看门狗接口电路

(六)键盘接口电路

在单片机应用系统中通常应具有人机对话功能能随时发出各种控制指令和数据输入以及报告应用系统的运行状态与运行结果。本文所采用的是独立式键盘,其中key代表阻值为1kΩ的排阻。

(七)数码管显示接口电路

系统数码管显示及键盘显示均比较灵活,提供了专门的I/O接口,可以用8155来控制,也可以用单片机来控制。开发板支持4位七段示LED数码显示器。

四、结束语

限于篇幅,本文关于DS1302、LCD显示接口以及系统软件设计等方面未能介绍。本文设计的单片机开发板在实际中发挥了重要作用,适合于单片机学习者及简单的工程应用。

参考文献:

[1]杨光友.单片微型计算机原理及接口技术[M].水利水电出版社,2002

[2]AT89S51 Datasheet.Atmel Inc.2006

[3]赵亮.单片机C语言编程与实例[M].人民邮电出版社,2003

[4]张道德.单片机接口技术(C51版).中国水利水电出版社,2007

[5]X5045 Datasheet.Intersil inc.2006

[作者简介]张道德(1973-),男,博士,研究方向:从事嵌入式系统、智能控制等领域的研究。

51单片机课程设计报告 篇4

随着电子技术的发展,电子技术在各个领域的运用也越来越广泛,人对它的认识也逐步加深。秒表计时器秒表计时器常常用于体育竞赛及各种其他要求有较精确时间的各领域中。其中启/停开关的使用方法与传统的机械计时器相同,即按一下启/停开关,启动计时器开始计时,再按一下启/停开关计时终止。而复位开关可以在任何情况下使用,即使在计时过程中,只要按一下复位开关,计时应立即终止,并对计时器清零。本设计就是利用所学到的电子元器件将脉冲源用数码管显示出来,以制承诺简易的秒表。

以单片机为核心,设计一个秒表,具有计时功能,按键有启动计时、数据清零、停止、时间显示。

采用3个LED数码管显示时间,计时范围设置为0~99.9秒,即精确到0.1秒,用按键控制秒表的“开始”、“暂停”、“复位”,按“开始”按键,开始计时;按“暂停”按键,系统暂停计时;再按“开始”键,系统继续计时;数码管显示当前计时值;按“复位”按键,系统清零。

目录

一、设计任务.................................................................................................................3

二、设计题目.................................................................................................................3

三、功能分析.................................................................................................................3

四、总体设计.................................................................................................................3

4.1硬件设计...............................................................................................................4

4.1.1 89C51单片机...........................................................................................4

4.1.2晶体振荡电路...........................................................................................5

4.1.3复位电路...................................................................................................6

4.1.4按键电路...................................................................................................7

4.1.5显示电路.................................................................................................8

4.2引脚控制...............................................................................................................9

五、电路原理图...........................................................................................................10

六、程序流程图及程序设计......................................................................................11

6.1程序流程图.........................................................................................................11

6.2程序设计.............................................................................................................12

七、程序仿真...............................................................................................................21

八、心得体会...............................................................................................................22

九、致谢.......................................................................................................................23

十、参考文献...............................................................................................................24

一、设计任务

以单片机为核心,设计一个秒表,具有计时功能,按键有启动计时、数据清零、停止、时间显示。

二、设计题目

秒表的设计

三、功能分析

采用3个LED数码管显示时间,计时范围设置为0~99.9秒,即精确到0.1秒,用按键控制秒表的“开始”、“暂停”、“复位”,按“开始”按键,开始计时;按“暂停”按键,系统暂停计时;再按“开始”键,系统继续计时;数码管显示当前计时值;按“复位”按键,系统清零。

四、总体设计

本实验利用单片机的定时器/计数器定时和计数的原理,通过采用Proteus仿真软件来模拟实现。模拟AT89C51单片机、LED数码管以及控件来控制秒表的计数以及计时的开启、暂停、继续、与复位。其中有三个数码管来显示数据,两个数码管显示秒(两位),另一个数码管显示十分之一秒,十分之一秒的数码管计数从0~9,满十进一后显示秒得数码管的个位加一,并且十分之一秒显示清零

重新从零计数。同理当个位满十进一后个位也清零重新计数,当计时超过范围(即超过99.9秒)后,所有数码管全部清零从新计数

4.1硬件设计

4.1.1 89C51单片机

MCS-51系列单片机是8位单片机产品,89C51是其中的典型代表,基本模块包括以下几个部分:

(1)CPU:89C51的CPU是8位的,另外89C51内部有1个位处理器

(2)R0M:4KB的片内程序存储器,存放开发调试完成的应用程序

(3)RAM:256B的片内数据存储器,容量小,但作用大

(4)I/O口:P0-P3,共4个口32条双向且可位寻址的I/O口线

(5)中断系统:共5个中断源,3个内部中断,2个外部中断

(6)定时器/计数器:2个16位的可编程定时器/计数器

(7)通用串行口:全双工通用异步接收器/发送器

(8)振荡器:89C51的外接晶振与内部时钟振荡器为CPU提供时钟信号

(9)总线控制:89C51对外提供若干控制总线,便于系统扩展

89C51单片机引脚如下图:

4.1.2晶体振荡电路

89C51单片机内部的振荡电路是一个高增益反相放大器,引线XTAL1和XTAL2分别为反相振荡放大器的输入及内部时钟工作电路的输入和来自反相

振荡器的输出,该反相放大器可以配置为片内振荡器。

这里选用51单片机12MHZ的内部振荡方式,电路如下:C2、C3起稳定振荡频率、快速起振的作用。

晶振电路

4.1.3复位电路

采用上电复位,上电后,由于电容充电,使RST持续一段时间的高电平,从而实现上电复位操作。这不仅能使单片机复位,还能是单片机的外围设备同时复位,当程序出现错误时,可以随时使电路复位。

电路图如下:

复位电路

4.1.4按键电路

当按键被按下时,相应的引脚被拉低,经扫描后,获得键值,并执行键功能程序,因此按下不同的按键,将执行不同的功能程序。

电路图如下:

按键电路

4.1.5显示电路

采用3个LED数码管,LED是七段显示器,内部有7个条形发光二极管和1个小圆点发光二极管,根据各管的亮暗组成字符。

在用数码管显示时,有静态和动态两种选择,这里采用LED动态显示,用P0、P1、P2口驱动显示,由于P0口没有上拉电阻,因此P0口需要外接上拉

电阻才能输出高电平,这里使用8个4.7k的电阻作为上拉电阻。

电路图如下:

显示电路

4.2引脚控制

P0.0—P0.7、P2.0—P2.7、P1.0—P1.7对应三个数码管的a、b、c、d、e、f、g段和小数点位;P0控制数码管十位的显示,P2控制数码管个位的现实,P1控制小数点后一问的显示,P3.2、P3.3、P3.4分别接。

五、电路原理图

用Proteus软件画出主电路图如下:

六、程序流程图及程序设计

6.1程序流程图

6.2程序设计

程序的各个组成模块及工作流程描述:

(1)秒表的初始化

根据程序流程图,先进行秒表的初始化,即:①将I/O口P3全写一,为秒表的控制输入做好准备;②将数码管全部置零,使其处于秒表计时的初始状态;③将工作寄存器R0~R2以及30H初始化,留待后面的计时程序备用;④将定时器0置于工作方式1,并为其装入计时预置数D8FE(因为程序运行过程中占用的时间会导致一定误差,此为经实物测试之后的修正值),即将定时器定为每10ms溢出;⑤开总中断允许和定时器0中断允许。初始化完成后,即进入之后的按键扫描程序。

(2)按键检测程序

轮流检测开始计时(P3.2)、暂停计时(P3.3)、秒表清零(P3.4)三个按键。若发现有一个按键出现低电平(可能被按下),则延时10ms(调用延时子程序DELAY),延时完成后,若发现低电平消失,则说明该按键实际上未被按下,此时转回按键检测处继续检测;若发现仍然是低电平,则说明此键确实被按下了,此时就跳转至相应的程序标号处,执行相应的功能。

(3)开始计时

若确认“开始计时”键被按下,则跳转至程序标号“RUN”处,将定时器0计时允许控制位TR0置位,则定时器开始运行。此动作完成后,返回按键检测程序,等待操作者的下一次指令。

(4)计时程序

定时器0计时至10ms,溢出,引发中断,程序跳转至定时器0中断服务程序入口000BH处执行。程序跳转至中断服务程序TIME0。由于秒表的最小计时单位是0.1s,即100ms,因此需加入软件计时,使定时器0溢出10次之后才改变数码管的显示状态。因此每来一次中断就将30H中的数加1,若30H中的数没有到10,则给定时器0重新装入预置数,之后中断返回并继续等待中断;到10了,才进入显示程序,改变数码管的显示状态,执行完毕之后中断返回并继续等待中断。

(5)显示程序

将数码管的段选码放在数表TAB中。每次100ms计时完成后,将R0中的值(初值为0)送入A,然后自加1。.若R0中的值没到10,则使用累加器A查表,并将查得的数码管段选码送入毫秒位数码管。之后将30H中的数置零,中断返回。若发现R0中的数到10了,则将R0置零,并转入秒位进位子程序SECOND,向秒位进位,之后,继续照常向毫秒位送数。

在秒位进位子程序SECOND中,由于要用到累加器A,因此先将其推入堆栈保护。将R1中的值(初值为10)送入A,然后自加1。.若R1中的值没到20,则使用累加器A查表,并将查得的数码管段选码送入秒位数码管。若发现R1中的数到20了,则将R1重置为10,并转入十秒位进位子程序SECOND1,向十秒位进位,之后,继续照常向秒位送数。完成后,弹出ACC和PSW,子程序返回。

十秒位进位子程序与秒位进位子程序相似,只是没有向下一位进位的功能。

(6)暂停计时

若确认“暂停计时”键被按下,则跳转至程序标号“PAUSE”处,将定时器0计时允许控制位TR0置零,则定时器暂停运行。此动作完成后,返回按键检测程序,等待操作者的下一次指令。

(7)秒表清零

若确认“秒表清零”键被按下,则跳转至程序标号“STOP”处,将TR0置零,关闭定时器0运行。并且将数码管、工作寄存器、定时器0预置数全部重置,使其处于秒表计时的初始状态。此动作完成后,返回按键检测程序,等待操作者的下一次指令。

(8)延时程序

用于按键延时防抖,延时10ms。

程序清单如下:

ORG 0000H;程序开始

AJMP START;跳转到主程序START ORG 000BH;定时器0中断的地址入口

AJMP TIME0;定时器0溢出,跳转到中断程序TIME0 START:;主程序

MOV P3,#0FFH;输入端口P3全写1 MOV P0,#3FH;MOV P1,#3FH;

MOV P2,#0BFH;数码管初始化

MOV 30H,#00H;MOV R0,#00H;MOV R1,#0AH;MOV R2,#00H;MOV TMOD,#01H;MOV TH0,#0D8H;MOV TL0,#0FEH;SETB EA;SETB ET0;READ:;L1:JB P3.2,L2;LCALL DELAY;JB P3.2,L1;AJMP RUN;L2:JB P3.3,L3;

工作寄存器初始化

定时器0工作于方式1

定时器0预置数(D8FEH=55550D)

开总中断允许

开定时器0中断允许

读键程序

按键延时防抖

确认计时键被按下,开始/继续计时15

LCALL DELAY;按键延时防抖

JB P3.3,L2;AJMP PAUSE;确认暂停键被按下,暂停计时

L3:JB P3.4,L1;LCALL DELAY;JB P3.4,L3;AJMP STOP;RUN:;SETB TR0;AJMP READ;PAUSE:;CLR TR0;AJMP READ;TIME0:;INC 30H;MOV A,30H;

按键延时防抖

确认清零键被按下,秒表重置

计时键按下,跳转至此

定时器0开始/继续运行

暂停键按下,跳转至此

定时器0溢出,中断,跳转至此16

CJNE A,#0AH,TIME1;30H单元中的值到10了吗?(计时到10毫秒了吗,也就是说,该向毫秒位送数了吗?)MOV DPTR,#TAB;30H中的值到10了,顺序执行

MOV A,R0;INC R0;CJNE R0,#0AH,GET;R0MOV R0,#00H;LCALL SECOND;进位

GET:;MOVC A,@A+DPTR;MOV P1,A;MOV 30H,#00H;TIME1:;MOV TH0,#0D8H;MOV TL0,#0FEH;RETI;中的值到10了吗?(该向秒位进位了吗?)

到了,R0清零,调用进位子程序SECOND,向秒位没到,跳过进位子程序

查表并向数码管毫秒位送数

重置30H单元

给定时器0重新预置数

中断返回

SECOND:;秒位进位子程序

PUSH ACC;PUSH PSW;将ACC和PSW推入堆栈保护

MOV A,R1;INC R1;CJNE R1,#14H,GET1;R1了吗?

MOV R1,#0AH;LCALL SECOND1;位进位

GET1:;MOVC A,@A+DPTR;MOV P2,A;POP PSW;POP ACC;PSW,ACCRET;SECOND1:;中的值到20了吗,也就是说,该向十秒位进位到了。R1重置,调用进位子程序SECOND1,向十秒没到,跳过进位子程序

查表并向数码管秒位送数

出栈

子程序返回

十秒位进位子程序

PUSH ACC;PUSH PSW;将ACC和PSW推入堆栈保护

MOV A,R2;INC R2;CJNE R2,#0AH,GET2;R2

MOV R2,#00H;GET2:;MOVC A,@A+DPTR;MOV P0,A;POP PSW;POP ACC;PSWRET;STOP:;MOV P3,#0FFH;MOV P0,#3FH;MOV P1,#3FH;

中的值到10了吗,也就是说,该将此位归零了到了,R2清零

没到,跳过清零程序

查表并向数码管十秒位送数,ACC出栈

子程序返回

清零键按下,跳转至此 吗?

MOV P2,#0BFH;数码管清零

MOV 30H,#00H;MOV R0,#00H;MOV R1,#0AH;MOV R2,#00H;CLR TR0;MOV TH0,#0D8H;MOV TL0,#0FEH;AJMP READ;DELAY:;MOV R3,#50D;D1:MOV R4,#100D;D2:DJNZ R4,D2;DJNZ R3,D1;RET;工作寄存器初始化计时器0停止计时定时器0预置数

延时10ms子程序

子程序返回

TAB: DB 06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,3FH,86H,0DBH,0CFH,0E6H,0EDH,0FDH,87H,0FFH,0EFH,0BFH;数码管段选码数表

END;程序结束

七、程序仿真

将以上程序清单导入先前做好的Proteus仿真电路,汇编之后,按 键开始进行仿真。

仿真结果如下:

仿真结果描述:

按“开始”键,秒表开始计时;按“暂停”键,秒表暂停计时;再按“开始”键,秒表继续计时;按“清零”键,秒表清零。

八、心得体会

虽然秒表是一个非常简单的功能,但要在单片机中使用汇编语言来实现这个功能,仍然花了我不少心思。

首先是计时的问题,由于单片机计时器最大只能计时65.5ms,因此要实现毫秒位的变化,我采用了软件计时的方法,单片机只需计时10ms,然后用软件重复10次,即可达到计时100ms的目的。

显示方面,为了使编程简单,我使用了静态显示。不过这使得占用I/O口线过多,而且连线复杂繁琐,为实物的制作带来了不便。在以后的学习和应用中我会努力加深动态扫描显示的理解,争取熟练运用。

根据书本知识,我们一开始只给P0口加上了上拉电阻,但是实物做成后我们发现P1和P2口得输出显示非常暗,初步确定是驱动能力不足的问题后,我们给二者也加上了上拉电阻,结果使得显示正常了。由此我们了解到,实践才是检验真理的唯一标准,有时候书本上的知识需要经过实践的改进,才能运用到实际中。

此次课程设计巩固了我的基础知识,提高了我的应用水平,锻炼了我的动手能力,使我受益匪浅。然而,在吸取经验的同时,我也吃了不少教训。在编程、仿真、焊接方面都走了不少弯路。但是,学则要有所收获,经过此次的锻炼,我在很多方面都已经有所提高,知识也掌握得更加扎实了。

在今后的学习和实践中,我将继续努力钻研,提高自己,争取在学术和记忆上获得更大的进步。

九、致谢

本设计是在李芳老师的悉心指导下完成的,李老师渊博的知识,严谨的治学态度,一丝不苟的工作作风,平易近人的性格都是我学习的楷模。在论文的研究及整理期间,李老师给了我很大的支持和鼓励,才使得论文得以顺利的完成,在此谨向导师表示忠心的感谢和崇高的敬意。

同时还要感谢同学们,他们也给了我很大的支持和帮助。

十、参考文献

1)《微控制器与接口技术》.虞沧.电子工业出版社.2012.10 2)李朝青.单片机原理及接口技术[M].北京:北京航空航天大学出版社.2005.10 3)夏继强.单片机实验北京:北京航空航天大学出版社.2001.4)孙德辉,郑士富.微型计算机控制系统.北京:冶金工业出版社.2002

5)肖洪兵.跟我学用单片机.北京:北京航空航天大学出版社.2002.8 6)陈汝全.实用微机与单片机控制技术.电子科技大学出版社.1995.7 7)王涌.单片机与嵌入式系统应用[J],2002(3):58-61 8)罗亚非.凌阳16位单片机应用基础[M].北京:北京航空航天大学出版社.2003.5 9)李庆.Keil C51 使用详解 V3.0[M].北京:北京理工大学出版

10)李华.MCS-51系列单片机实用接口技术.北京航空航天大学出版社.1993,162-229 11)温钢云,黄道平.计算机控制技术.广州:华南理工大学出版社.2002 12)肖洪兵.单片机应用技术.自编教材

13)孙德辉,郑士富.微型计算机控制系统.北京:冶金工业出版社.2002 14)韩来吉.用 89C51实现急救车优先的交通灯控制系统[J] 15)陈志强,芮延年,城市路口交通灯多级智能控制方法的研究J.2007 16)李广弟.单片机基础.北京:北京航空航天大学出版社.2001,56 17)马忠梅等.单片机的C语言应用程序设计.北京航空航天出版社.1999

51单片机实训报告 篇5

为期一周的单片机实习已经结束了。通过此次实训,让我们掌握了单片机基本原理的基础、单片机的编程知识以及初步掌握单片机应用系统开发实用技术,了解“51”单片机精简开发板的焊接方法。同时培养我们理论与实践相结合的能力,提高分析问题和解决问题的能力,增强学生独立工作能力;培养了我们团结合作、共同探讨、共同前进的精神与严谨的科学作风。

此次实训主要有以下几个方面:

一、实训目的

1.了解“51”精简开发板的工作原理及其结构。2.了解复杂电子产品生产制造的全过程。

3.熟练掌握电子元器件的焊接方法及技巧,训练动手能力,培养工程实践概念。4.能运用51单片机进行简单的单片机应用系统的硬件设计。5.掌握单片机应用系统的硬件、软件调试方法

二、实验原理

流水灯实际上就是一个带有八个发光二极管的单片机最小应用系统,即为由发光二极管、晶振、复位、电源等电路和必要的硬件组成的单个单片机。

它的电气性能指标:输入电压:DC4.5~6V,典型值为5V。可用干电池组供电,也可用直流稳压电源供电。如图所示:

本流水灯实际上就是一个带有八个发光二极管的单片机最小应用系统,即为由发光二极管、晶振、复位、电源等电路和必要的硬件组成的单个单片机。

三、硬件组成

1、晶振电路部分

单片机系统正常工作的保证,如果振荡器不起振,系统将会不能工作;假如振荡器运行不规律,系统执行程序的时候就会出现时间上的误差,这在通信中会体现的很明显:电路将无法通信。他是由一个晶振和两个瓷片电容组成的,x1和x2分别接单片机的x1和x2,晶振的瓷片电容是没有正负的,注意两个瓷片电容相连的那端一定要接地。

2、复位端、复位电路

给单片机一个复位信号(一个一定时间的低电平)使程序从头开始执行;一般有两中复位方式:上电复位,在系统一上电时利用电容两端电压不能突变的原理给系统一个短时的低电平;手动复位,同过按钮接通低电平给系统复位,时如果手按着一直不放,系统将一直复位,不能正常。当要对晶体重置时,只要对此引脚电平提升至高电平并保持两个及其周期以上的时间便能完成系统重置的各项动作,使得内部特殊功能寄存器内容均被设成已知状态。

如图所示,只要按此开关就能完成LED和开关的重置。

3、发光二极管电路

LED发光二极管依次接P1口,利用共阳极接线,只要P1口由高电平变为低电平LED灯即点亮。

四、安装、焊接及调试 ⑴安装步骤

1.检查元器件的数量、质量和规格,详细阅读硬件说明部分,并将元件对号入座,对于有极性的元器件要注意安装方向,确保一次性焊接成功。

2.先焊接低矮、耐热的元件,比如电阻,再对高一些的元件进行焊接,比如芯片座、排阻等,以此类推,最后焊接高大的元件。⑵焊接部分

1.检查印刷电路裸板电源正负端、各相邻焊点是否短路。

2.检测元器件质量,电容、接插件是否短路,按键通断状态是否正确。3.集成电路一定焊接插座,确定好插座空间安装位置。4.焊接时特别要注意锡不能太多,否则易发生焊点短路。5.电烙铁焊接时间不要过长,以免烫坏焊点。⑶调试部分 1.硬件调试

拿到电路板后,首先要检查加工质量,并确保没有任何方面的错误,如短路和断路,尤其要避免电源短路;元器件在安装前要逐一检查,用万用表测其数值,看是否与所用相同;完成焊接后,应先空载上电(芯片座上不插芯片),并检查各引脚的电位是否正确。若一切正常,方可在断电的情况下将芯片插入,再次检查各引脚的电位及其逻辑关系。将万用表的探针放到单片机接电源的引脚上检测一下,看是否符合要求。

进行串口测试。接上单片机电源和串口线,打开电源开关,电源指示灯D0亮,使用STC89C系列单片机,其本身自带了一个测试程序,上电之后D1~D8便会两个两个的灯亮的闪烁。或者自己下载一个程序,如果串口正常,如不成功,就应该好好检查焊点及串口线。2.流水灯程序调试

将电路板串口连接电脑,把程序烧入STC89C52系统。用USB接口连接电脑,为单片机提供电源。电源接入口,程序开始运行。LED灯开始轮流闪烁,闪烁间隔大概为0.5S。点击复位电路,单片机复位,LED灯从第一盏灯开始又循环亮起。3.C语言程序 #include #include void delay(unsigned int d){while(--d>0);} void main(){ unsigned char i,LED;while(1){LED=0x7f;for(i=7;i>=0;i--){P1=LED;delay(50000);LED=_cror_(LED,1);}}} 在电路调试过程中也许会碰到以下一些故障:

1.接好电池盒,电源这是灯不亮。这些是因为电源插座存在虚焊现象,接触不良。遇到这种情况的时候应该及时检查和修复虚焊点。

2.出现不能正常下载程序。这是因为电路板电源没有正常接通或者下载线焊接组装有误、电池电压低、芯片MAX232不正常工作或管脚虚焊。应该去检查电源是否正常接通,并且更正正确。

3.下载程序不能正常完成流水灯功能。这是因为电池电压低或者发光二极管损坏或者管脚虚焊、电阻R1开路或管脚虚焊。解决这样的方法是更换电池或者修复焊点。

五、结论

通过这次实习让我们可以在实践中检验我们所学的单片机知识,更好的融会贯通,并在实践中发现问题,解决问题。这次设计的流水灯由于比较简单,遇到的问题都不是很困难,我们通过互相之间的交流、查阅书籍以及通过互联网所搜所需的资料都能够比较好的解决。

这次所调试的流水灯系统缺点是程序输入采用串口输入,烧入程序比较复杂。电路比较简单,所实现的功能只有流水灯,时间闪烁的控制需要修改程序才能实现。如果需要改进的,可以增加一个时间设置来设这流水灯的闪烁时间,或者通过流水灯排列的形状不同可以做成花样流水灯。

下图为本次实训结果展示图:

电路板焊接图

电路板实现流水灯图

51单片机脉冲产生程序设计 篇6

用51单片机用独立键盘控制输出4种频率:1Hz、2Hz、10Hz、50Hz,占空比为50%的脉冲信号。

#include

#define uint unsigned int #define uchar unsigned char sbit d0=P1^0;sbit d1=P3^2;uintnum=0,counter=0;void delay(uint x){ uinti,j;for(i=x;i>0;i--)for(j=110;j>0;j--);} void main(){

d1=1;

d0=1;

d2=1;num=0;

IT0=1;

EX0=1;

TMOD=0x01;

TH0=(65536-1000)/256;

TL0=(65536-1000)%256;

EA=1;

ET0=1;

TR0=1;while(1)

{

} } void Int0()interrupt 0 { delay(10);if(d1==0){

d1=1;num++;if(num==4)num=0;counter=0;}

} void Timer0(void)interrupt 1 {

TH0=(65536-1000)/256;

TL0=(65536-1000)%256;counter++;

if(num==0){ if(counter<=500)

d0=0;if(counter>500)

d0=1;if(counter==1000)counter=0;

} if(num==1){ if(counter<=250)

d0=0;if(counter>250)d0=1;if(counter==500)counter=0;}

if(num==2){ if(counter<=50)d0=0;if(counter>50)d0=1;if(counter==100)counter=0;} if(num==3){ if(counter<=10)

d0=0;if(counter>10)

d0=1;

51单片机多任务编程设计及应用 篇7

51单片机在微型智能控制系统中应用广泛。随着人们对控制系统要求的不断提高,针对51单片机不具备实时多任务支持功能,在控制系统的进一步发展很受限制的情况,人们做了很多关于51单片机多任务实时编程的研究和实验。罗江等在四川省教育厅资助的基金项目《基于多任务机制的51单片机在微型智能控制系统中的应用研究》中,借鉴多任务操作系统的设计特点,提出了利用时间片分配机制,实现多任务分时轮流执行,和利用中断强行切换任务的多任务编程方法[1];在www.ddvip.com的单片机技术交流中,阮元提出了依据分时操作系统思想实现单片机多任务编程的方法[2];厦门大学的王辉堂等在一安防系统的设计中,通过对嵌入式实时操作系统RTOS的分析,认为其核心是利用中断切换任务,提出了用C51编程实现的多任务编程方案[3];美国Keil公司开发的MCS51系列单片机的实时多任务操作系统RTX51,占用定时器T0中断产生时间片来切换任务[4,5];此外,还有时间片轮转算法[6]、时分多线程[7]等多种单片机多任务设计方法在实际系统中应用。

综上所述,在目前51单片机多任务编程工作中,大多采用了基于实时操作系统RTOS分时操作的思路和采用中断切换任务。但也有人认为,这种任务切换产生大量数据,额外占用系统资源,不适合资源有限的单片机系统[8]。本文提出的51单片机多任务编程方法,不采用时间片,而是基于一个完整过程切换任务,并将任务调度分配到各任务内部,任务的切换和调度都不占用系统额外资源。通过实际系统应用证明,用该方法设计系统,硬件电路更简单,单片机工作效率更高。

本文首先阐述多任务编程设计方法的原理,然后介绍几种典型任务的设计方法,最后通过一个简单的实例来说明该方法的可行性。

1 多任务设计原理

多任务要求系统在同一时间执行多个任务,对于一个处理器,并不可能在同一时间运行多个任务程序,而是按时间片在各个任务间快速切换执行来完成多任务要求的。这是基于实时操作系统RTOS的方法。本文提出的方法也是按时间片切换任务的,但有所不同的是,执行任务的时间不是由定时器平均分配的,而是按照执行任务中一个完整过程的时间来自动分配的。

在单片机系统设计中,可按系统的功能或模块划分为任务,而每个任务可按具体作业细分为各个过程。可见任务由过程组成。按时间片分配任务的设计,任务的调度可分为两级,一是对任务的调度,二是在每项任务中对过程的调度。由于采用两级调度,比较繁琐,也占用了系统较多资源。如果不考虑对任务的调度,直接调度各任务的过程,其系统运行的效率就能极大地提高。同时,在任务中主动设置切换点自动切换任务,切换时不需保留大量现场数据,系统效率就会更高。再进一步,将过程的调度分配到各个实际任务之中,不设专门的过程调度表。系统的运行效率就会达到最高。为此本文提出的51单片机多任务编程的原理是:

1)将系统的各任务依次排成队列,处理器依次执行各任务,在执行完最后一项任务后,马上回头执行第一任务,并以此循环。

2)在每次执行一项任务时,只执行该任务的其中一个过程,并完整执行。其它的过程需等待下一轮执行该任务时才有机会执行。这可保证系统尽快从本任务切换到其它任务。

3)每个过程不包括循环延时、等待等浪费CPU时间的程序,循环延时、等待等程序将作为一个特殊过程独立设计。

4)常规任务(甚至实时任务)都设有一个空执行过程,以便系统跳过该任务的执行。优先任务或抢占式任务可利用此功能保证任务优先执行或独占运行。

5)系统不设专门的过程调度表,过程的调度在实际任务之中进行。

6)中断只用于调度过程,不处理任务,更符合系统实时性要求。

7)系统、任务和过程间均通过全局变量共享和交换数据。任务、过程间切换不保留现场数据和传递参数。

由此可见、系统按完整过程(最小作业单元)自动切换任务,不需保留临时现场数据,不需定时被动切换,不需额外的调度表。和单任务编程相比,多任务编程也没有占用系统任何额外资源。其结构和代码的可读性也没有较大的改变。

实际上,设计操作系统与设计应用系统最本质的区别是,操作系统面临的任务是不确定的,在设计完成后还允许应用添加新的任务;而应用系统面临的任务是事先定制的。因此,多任务应用系统的设计可不完全基于操作系统分时的思路。本文提出的多任务编程方法,就不需要强制的时间片划分,也不需要占用中断切换任务。

2 多任务编程的实现方法

2.1 一般任务的设计

任务分为实时任务和常规任务,实时任务是需无条件执行的任务,即在系统每次扫描任务队列时都必需执行的任务。通常是显示,外围检测等实时任务;常规任务是在满足一定条件时才启动的任务,通常被中断或其它任务调度,也能被中断或其它任务中止。为将实时任务与常规任务排在同一队列中执行,我们为常规任务增设了一个特殊过程,在调度这个过程时,该任务不执行任务的实际操作。这个过程称为空过程。例如,下面例举的任务包括一个空过程和三个实际操作过程,在任何其它任务中,通过屏蔽本任务的空过程,即SETB 00H,就可启动本任务,同理,CLR 00H就可在任何时候中止本任务的执行:

PROC:JNB 00H,PROCE;空过程调度,不执行本任务

JB 11H,PROC2;11H置位时,执行过程2

JB 10H,PROC1;10H置位时,执行过程1

PROC0:……;过程0:本过程通常为任务初始化

SETB 10H;调度过程1

AJMP PROCE

PROC1:…….;过程1

SETB 11H;调度过程2

AJMP PROCE

PROC2:……;过程2

CLR 00H;任务完成,调度本任务的空过程

PROCE:NOP;空过程

由任务设计可以看出,过程是通过消息(位寻址变量置位)来调度的。每次执行任务只执行该任务的一个过程,并且过程不能包括循环延时、等待等代码,以保证系统轮流执行多任务的实时性。如果一个过程必需包括等待或延时,则将过程从等待或延时处分解为两个过程,并在两个过程中插入专门的延时或等待过程。延时和等待过程的设计说明如下。

2.2 延时等待过程设计

延时,等待等过程在程序设计中是必不可少的,为不影响系统的实时性,多任务编程的延时和等待需要特殊设计。

延时分为短延时和长延时,短延时是通过一个和几个计数变量计数就能完成的延时,长延时则通常利用计数变量配合计时器中断来完成延时。短延时可设计成任务中的一个特殊过程,长延时可设计成任务中的一个特殊过程或一个独立的特殊任务。

1)短延时,以下程序设计了一个特殊过程PROC1:一个计数变量30H递减实现延时,其计数周期是系统执行任务队列中全部任务所需的时间。

2.3 串行口连续发送数据任务

串行口发送数据需占用较长时间,连续发送多个字节数据将影响多任务系统的实时性。基于时间片的多任务切换系统,一般通过计算发送一帧数据所需的时间,采用约大于这一时间的定时方式,来作为发送两帧数据间的时间间歇,而不是在检测到发送数据缓冲区SBUF为空时立即发送后一帧数据。其连续发送数据的实时性较差,不能保证在数据总线上较好地与其它系统协调工作。本方法通过以下程序解决这一问题(假设数据缓冲区30H-3FH的16字节数据需要从串行口发送):

3 单片机多任务编程实例

3.1 说明

本实例是从楼宇可视对讲系统的门口主机系统中简化出来的,可视对讲系统是一计算机支持的分布式多设备协同工作系统,总线制通信对串行口收发数据具有很高的实时要求。门口主机系统包括4位LED数码显示,12键键盘,串行口发送、接受数据,处理数据,以及控制开锁、发出蜂鸣声,密码数据闪存,计时,切换工作状态等多项任务。采用多任务编程是十分必要的。本实例就其LED显示,键盘扫描和串行口交换数据功能来说明该系统的多任务编程过程。

3.2 硬件设计

能完成上述几项功能的硬件电路设计如图1所示,这是一个单片机最小系统。4位LED数码管采用动态显示,键盘为矩阵扫描键盘,这两个模块在单任务设计中,都需要较多的延时过程,很难保证系统的实时性,操作按键时还会造成显示闪烁或停顿。为此,很多类似设计都增加外围硬件或采用专用芯片如CH451来驱动[9],而多任务编程可省去这些硬件。图中75176芯片的AB端接楼宇对讲系统的485总线,与其它设备交换数据协同工作。

3.3 软件设计

3.3.1 编程说明

编程目的:

1)从键盘键入4位数据,键入过程中可按*键清除重输。

2)每键入1位数据。LED屏从最右边1位开始显示,原各位显示向左移1位。

3)键入数据过程中,如果有5s钟没有继续按键,系统清除输入数据和显示。

4)当输入完4位数据后,系统将4位数据从串行口发送到数据总线。

5)当从数据总线上接收到数据#0D8H时,开始发送4位数据。

6)75176芯片平时为接收状态,当接收到#0D8H时,如果系统有数据要发送,则变为发送状态,发送数据,当数据发送完毕时,75176芯片恢复为接收状态。

根据上述编程目的将系统编程划分为以下7个任务:

1)4位LED数码管动态显示;

2)键盘扫描检测;当有按键时,启动第3任务。

3)处理键盘检测结果,设置防抖动延时;计算键值;并在释放键后启动第4任务;

4)将键值转换为输入数据和显示数据,分别送输入数据缓存区和显示缓存区;当键入*时清除已输入数据和显示;当输入第1位数据时,启动第5任务;当输入数据缓冲区满时,启动第6任务的一个条件;

5)5s延时,5s过后没有继续按键时,清除已输入数据和显示;

6)串行口发送数据,启动本任务同时需满足有数据要发送和接收到#0D8H两个条件;

7)串行口接收数据,当接收到#0D8H时,启动第6任务的另一条件。

其它说明:

1)在上述7个任务中,LED显示和键盘检测是实时任务,其余是常规任务。

2)系统采用执行其它任务的时间处理LED动态显示和键盘扫描检测任务所需的延时。

3)系统采用定时器0中断处理5s延时。定时标志20H置位间歇为25ms;计数变量6EH初始化和重置值为200(#0C8H)。

4)系统采用串行口中断处理串行数据的接收和发送。串行口接收中断启动系统第7项任务。

3.3.2 系统流程图

图2是7个任务轮流执行的系统总流程图

3.3.3 任务设计说明

1)4位LED数码管动态显示

在单任务设计中,4位LED数码管显示是一次完成的[10],每显示1位,都要设计一定的延时,这会浪费CPU时间,影响其它任务的实时执行。多任务设计的方案是,每次执行显示任务只依次显示一位,然后就执行下一任务。系统利用执行其它任务的时间来为LED的每位显示延时,即在显示延时过程中,系统同时在执行其它任务。

系统设有一个显示缓冲区7CH-7FH,LED显示是通过自动扫描显示缓冲区进行的。

显示初始化:

矩阵键盘扫描检测的典型设计是依次置每行电平为低,对键盘行进行扫描,检测各列是否有键按下。由图1所示,矩阵键盘的行线和LED显示的位线是一致的,键盘扫描和动态显示扫描保持同步,很便于程序设计。所以,在多任务设计方案中,和LED显示任务一样,每次执行键盘检测任务时,只对一行进行检测。当没有按键按下时,系统依次对每行都进行检测;当有按键按下时,系统只对上次检测到按键按下的行进行检测,从而锁定对该按键的继续检测。

键盘扫描任务与LED显示任务通过共享全局变量R0保持同步:

3)按键的处理

按键的处理主要包括计算按键持续按下的时间,键值计算和对按键释放后的处理。为防止按键抖动,持续按键需在一定的延时后,才能处理。多任务设计是在其任务中插入一个短延时过程。在处理完按键键值后,需等待释放按键。多任务设计通过设置消息(11H置位)屏蔽本任务和不启动后续相关任务的方式来设计等待过程:

4)键值转换和数据处理

键值转换的目的是将键值转换为输入数据和显示数据,分别存入数据缓冲区和显示缓冲区。当输入数据缓冲区满时,系统将缓冲区数据从串行口发送到总线上,当输入数据是*时,系统清除缓冲区数据和显示。为检测输入一位数据后,继续输入是否被放弃,每输入一位数据,系统启动或重置一个5s延时。R2为输入数据缓冲区指针,初始值为#50H:

5)按键间延时

系统通过按键连续输入数据,要求按键间间隙时间不能超过5s,超过5s被认为是放弃输入,系统将清除已输入数据和显示。在本实例中,按键间延时设计为一个特殊任务。该任务的5s计数值在键值转换中启动或重置,可保证每次按键后都有5s时间延时。该延时可在5s后自动结束或被其它任务中止。

按键延时代码中,21H在定时器0中断程序中置位,设计置位周期为50ms,计算变量6EH在键值转换任务中设置或重置:

6)串行口发送4字节数据

串行口连续发送数据任务是配合串行口发送中断进行的。除第2节典型示例外,串行口发送数据任务还可按下面方式设计:

7)串行口接收数据

为了串行口中断不对系统的实时性产生较大影响,对串行口接收数据的处理是在中断外多任务队列中进行的。限于篇幅,系统只考虑从管理中心接收到发送数据允许同步信号#0D8H,开始向管理中心发送数据:

8)串行中断程序

在串行发送数据中断中,系统设计了75176芯片转换为接收状态的过程,48H在串行发送最后一字节时置位,以便在发送完数据后,改变系统状态。

在串行接收数据中断中,04H置位,通知系统从串行口接收到一字节数据,并已存入4FH,同时04H启动串行口接收数据任务:

3.3.4 系统的构成

将系统的7个任务经过上述设计,然后排成队列,并在队列最后设置一个长调转指令到队列中最前一个任务,构成一个依次执行并轮流循环的系统,这就是多任务编程的系统实例。在系统中,各任务需然是依次排成队列执行的,但任务的排序是可任意改变的。在任务间任意插入新的任务,也不会影响原系统正常运行。基于这一特征,各任务被看成是并发执行的。

4 结论

单片机多任务编程方法可归纳为:

1)在单片机多任务编程中,各任务依次排成队列轮流执行。

2)每次执行任务只调用其一个过程来执行,可保证各任务间最快速地切换。

3)和时间片任务切换不同,切换任务不占用堆栈和额外的系统资源。

4)各任务、过程间使用全局变量共享或交换数据,避免各种参数传递。

5)基于消息(位寻址变量的置位),每项任务,都可被其它任务启动和中止。

通过对循环延时和等待过程的重新设计,单片机多任务设计的每项任务和每个过程都是连续执行的。这可保证多任务间的切换最快,单片机的运行效率最高。因为任务的过程是完整执行的,所以和时间片强制切换不同,任务和过程的切换不占用堆栈和额外的系统资源。因为任何任务都可中止和屏蔽其它任务的执行,本方法也可设计抢占式任务。只要给实时任务也设计一个空过程,抢占式任务甚至还可屏蔽实时任务。达到最优先,最快执行的目的。本方法基于消息,但没有单独的消息循环过程[11,12,13],可最大限度地减少系统开支。

本文介绍的多任务编程方法是用汇编语言实现的,但显而易见,根据本方法的原理,用C51语言同样也可设计单片机多任务系统。

在过去采用传统方法设计复杂的单片机系统过程中,人们容易发现系统交叉调用多,重复代码多,系统运行效率差,容易逻辑混乱且难以调试。例如要完成本文实例的设计,键盘处理过程需反复进行键盘检测。为了不让显示中断,键盘处理防抖延时和等待释放键盘时,又要多次调用显示过程,串行口连续发送数据过程中,更是频繁调用显示。显示、键盘检测、键盘处理等任务不能成为低耦合性的独立模块。系统程序的层次结构和可读性也都较差,并很难移植和重用。鉴于此,为探索一个结构清晰,易调试,任务明确且可重用、提高开发效率,无相互调用,无重复代码的系统,一个新的编程方式开始了实践和研究,并被总结为多任务编程方法。在近八年不断利用新方法设计(如楼宇对讲系统、联网报警系统、门禁系统,安防监控、广播控制、一卡通等)智能系统产品的同时,本多任务编程方法取得了成熟和发展。与传统设计相比,这些系统产品硬件资源少,运行效率高。其硬件功能更多以软件取代,所以运行更稳定,且易维护,性价比高,取得了更高的经济效益。

摘要:本文论述了在51系列单片机系统中,一种多任务系统编程设计方法。该方法不基于实时操作系统RTOS分时操作的思路和采用中断切换任务。本文通过一个具有4位LED数码显示,12键的键盘扫描和用串行口与其它系统交换数据的简单系统为例,说明该方法编程具有硬件设计简单、单片机工作效率高,实时性强等特点。该方法编程采用汇编语言,但根据相同的原理和思路,也不难用到C51语言编程上面。

51单片机课程设计报告 篇8

关键词 报警装置 AT89C51单片机 设计

中图分类号:TP27 文献标识码:A

1 引言

1.1 目的和意义

本实验以单片机作为主控核心,与键盘、报警器等模块组成核心主控制模块,在主控模块上设有8个按键和报警器。

本文主要对使用单片机设计简易报警器进行了分析,并介绍了基于单片机进行硬件组成。并且本文分别从原理图,主要芯片,各模块原理及各模块的程序的调试来详细阐述。

1.2 本系统主要研究内容

本系统设计制作一个简易报警器。

(1)检测八路信号;

(2)任何一路產生触发信号就会引起中断;

(3)在主机中断服务中,数码管闪烁,并连续闪烁;

(4)按复位按钮,警报解除。

2 总体设计方案

2.1 系统组成

本系统以51单片机为主控核心,与矩阵键盘、扬声器、LED显示管模块一起组合而成。具体如下图1:

2.2 系统工作原理

(1)翻转法,找到对应的按键键位及亮灯;

(2)键位的值,定义 P1口的状态及蜂鸣器和数码管的状态;

(3)警报的中断,通过数码管的亮暗进行闪烁;

(4)按键复位。

3系统硬件设计

3.1系统硬件总体设计

本系统由键盘矩阵、LED显示管、扬声器这几个部分组成,当按下按键时,对应的灯亮,LED显示管显示闪烁。硬件总体设计如图2。

3.2子系统

LED显示模块如图2-2所示,利用AT89C51单片机的P0端口的P0.0-P0.7连接到一个七段数码管的a-h的笔段上,数码管的公共端接电源。

矩阵按键显示当前按键模块如下图3:

4系统软件设计

(1)整体构思系统,确定工作原理;

(2)确定所需元件参数;

(3)购买所需元件和实验板,焊接电路;

(4)用KeilC51编写程序,并用仿真器仿真通过,下载至芯片AT89C51;

(5)调试硬件系统,符合预期构想;

(6)创新改进系统。

5系统使用说明

(1)Keil下编译,产生目标HEX文件,Proteus下Programme Files选择产生的HEX文件,点击运行开始模拟;

(2)开启本系统,数码管显示“00”;

(3)按任意8键盘位,数码管闪烁,对应的灯亮,蜂鸣器发生。

6结束语

本计算器是以51系列单片机为核心构成报警装置,该设计具有报警功能,以及系统的复位功能,很好地解决了生活中的防盗问题。

参考文献

[1] 李刚民.单片机原理及实用技术[M].高等教育出版社,2005.

[2] 乔洁.单片机电路在防盗报警系统中的应用[J].黑龙江科技信息.2009(14).

基于51单片机的电子秤设计 篇9

(2015届)

题 目:基于51单片机的电子秤设计

专业名称:应用电子技术

姓 名:谢玉夏

学 号:1210401038 班 级:2012级应用电子技术

指导教师:刘志芳

2014年 12 月 30 日

摘要

称重技术是人类生活中不可缺少的部分,自古以来就被人们所重视。作为一种计量手段,被广泛应用于工业、农业、贸易等各个领域。随着现代文明和科学技术的不断进步,人们对称重技术的准确度要求也越来越高,电子秤产品技术水平的高低,直接影响各行各业的现代化水平和社会经济效益的提高。近年来,电子称重技术取得了突飞猛进的发展,电子秤在称重计量领域中也占有越来越重要的地位,其应用领域也在不断地扩大。尤其是商用电子秤,由于其具有准确度高、反应灵敏、结构简单等优点,被广泛应用于工商贸易、轻工食品、医药卫生等领域。目前,机械秤正在逐步被电子秤取代,这就促使电子秤的研究需要进一步的深入。

本设计是以AT89S51为核心的一种高精度电子秤,系统采用模块化设计法,其硬件结构主要包括:数据采集模块、最小系统模块、电源模块、键盘和显示模块。其中,数据采集模块包括称重传感器和A/D转换电路;最小系统部分主要包括AT89S51和扩展的外部数据存储器;键盘由4×4位矩阵键盘组成;显示部分LM4229液晶显示。软件部分由C语言编程,实现对各部分的控制。该电子秤可以能够显示商品的名称、价格、总量、总价等;能够自动完成商品的价格计算;能够储存几种简单商品的价格;能够具有超重提醒功能。其称重范围为0~5Kg,分度值为0.001g。整个系统结构简单,使用方便。

关键词:电子秤;AT89S51单片机;称重传感器;A/D转换电路;液晶显示II

目录 绪论...........................................................1

1.1 选题的背景与意义.........................................1

1.1.1 选题的背景..........................................1 1.1.2 选题的意义..........................................2 1.2 电子秤的研究现状及发展趋势...............................2

1.2.1 电子秤的研究现状....................................2 1.2.2 电子秤的发展趋势....................................3 1.3 本文的结构...............................................4 2 系统总体方案设计...............................................5

2.1 电子秤的基本知识介绍.....................................5

2.1.1 电子秤的基本结构....................................5 2.1.2 电子秤的工作原理....................................5 2.1.3 电子秤的计量参数....................................6 2.2 总体方案设计.............................................7 2.3 系统各部分设计方案论证...................................8

2.3.1 电子秤分度数的设定..................................8 2.3.2 称重传感器的选定....................................8 2.3.3 A/D转换器的选定....................................14 2.3.4 单片机型号的选定...................................16 硬件设计......................................................18

3.1 系统硬件结构图..........................................18 3.2 单片机主控单元的设计....................................18

3.2.1 单片机引脚说明.....................................18 3.2.2 AT89S51最小系统设计................................20 3.3 数据采集模块设计........................................22

III

3.3.1 传感器单元设计.....................................22 3.3.2 A/D转换单元设计....................................22 3.4 键盘和显示电路单元设计..................................24

3.4.1 键盘电路设计.......................................24 3.4.2 显示电路设计.......................................25 3.5 系统总体原理图..........................................25 3.6 硬件抗干扰设计..........................................26 4 系统软件设计..................................................29

4.1 主程序设计..............................................29 4.2 LM4229液晶显示驱动程序..................................30 4.3 ADC0832采样程序.........................................31 4.4 键盘程序................................................31 5 系统仿真......................................................33

5.1 欢迎界面的仿真..........................................33 5.2 无重物情况仿真..........................................34 5.3 称量物体仿真............................................35 5.4 最大量程仿真............................................36 5.5 仿真总结与问题补充......................................37

5.5.1 仿真总结...........................................37 5.5.2 问题补充...........................................37 总结与展望....................................................39 附录程序.........................................................40 参考文献.........................................................49

IV 绪论

1.1 选题的背景与意义

1.1.1 选题的背景

(1)电子技术渗入衡器制造业

随着第二次世界大战后的经济繁荣,为了把称重技术引入生产工艺过程中去,对称重技术提出了新的要求,希望称重过程自动化,为此电子技术不断渗入衡器制造业。在1954年使用了带新式打印机的倾斜杠杆式秤,其输出信号能控制商用结算器,并且用电磁铁机构与代替人工操作的按键与办公机器联用。在1960年开发出了与衡器相联的专门称重值打印机。当时的带电子装置的衡器其称量工作是机械式的,但与称量有关的显示、记录、远传式控制器等功能是电子方式的。(2)电子秤步入社会

电子秤的发展过程与其它事物一样,也经历了由简单到复杂、由粗糙到精密、由机械到机电结合再到全电子化、由单一功能到多功能的过程。特别是近30年以来,工艺流程中的现场称重、配料定量称重、以及产品质量的监测等工作,都离不开能输出电信号的电子衡器。这是由于电子衡器不仅能给出质量或重量信号,而且也能作为总系统中的一个单元承担着控制和检验功能,从而推进工业生产和贸易交往的自动化和合理化。

近年来,电子秤已愈来愈多地参与到数据处理和过程控制中。现代称重技术和数据系统已经成为工艺技术、储运技术、预包装技术、收货业务及商业销售领域中不可缺少的组成部分。随着称重传感器各项性能的不断突破,为电子秤的发展奠定了基础,国外如美国、西欧等一些国家在20世纪60年代就出现了0.1%称量准确度的电子秤,并在70年代中期约对75 %的机械秤进行了机电结合式的电子化改造。

我国的衡器在20世纪40年代以前还全是机械式的,40年代开始发展了机电结合式的衡器。50年代开始出现了以称重传感器为主的电子衡器。80年代以来,我国通过自行研制、引进消化吸收和技术改造,已由传统的机械式衡器步入集传感器、微电子技术、计算机技术于一体的电子衡器发展阶段。目前,由于电子衡器具有称量快、读数方便、能在恶劣环境下工作、便于与计算机技术相结合而实现称重技术和过程控制的自动化等

特点,已被广泛应用于工矿企业、能源交通、商业贸易和科学技术等各个部门。随着称重传感器技术以及超大规模集成电路和微处理器的进一步发展,电子称重技术及其应用范围将更进一步的发展,并被人们越来越重视。

1.1.2 选题的意义

电子秤是日常生活中常用的电子衡器,广泛应用于超市、大中型商场、物流配送中心。电子秤在结构和原理上取代了以杠杆平衡为原理的传统机械式称量工具。相比传统的机械式称量工具,电子秤具有称量精度高、装机体积小、应用范围广、易于操作使用等优点,在外形布局、工作原理、结构和材料上都是全新的计量衡器。目前市场上使用的称量工具,或者是结构复杂,或者运行不可靠,且成本高,精度稳定性不好,调整时间长,易损坏,维修困难,装机容量大,能源消耗大,生产成本高。而且目前市场上电子秤产品的整体水平不高,部分小型企业产品质量差且技术力量薄弱,设备不全,缺乏产品的开发能力,产品质量在低水平徘徊。因此,有针对性地开发出一套有实用价值的电子秤系统,从技术上克服上述诸多缺点,改善电子秤系统在应用中的不足之处,具有现实意义。

1.2 电子秤的研究现状及发展趋势

1.2.1 电子秤的研究现状

近几年,我国的电子称重系统从最初的机电结合型发展到现在的全电子型和数字智能型。电子称重技术逐渐从静态称重向动态称重发展,从模拟测量向数字测量发展,从单参数测量向多参数测量发展。电子称重系统制造技术及其应用得到了新发展。国内电子称重技术基本达到国际上20世纪90年代中期的水平,少数产品的技术已处于国际领先水平。

在研究方法上,电子称重系统的工作原理一般是将作用在承载器上的质量或力的大小,通过压力传感器转换为电信号,并通过控制电路来处理该电信号。其中压力传感器大多数采用电阻应变片压力传感器,由于应变片的体积较小,市场上有多种规格可供选择,而且可以针对弹性敏感元件的形式可以灵活设计来适应各种应用场合的要求,所以

应变片式压力传感器得到广泛的应用。但是电阻应变片压力传感器的一个严重缺陷是应变灵敏度、应变片本身的电阻都随温度变化,而且灵敏度随温度变化较大。在不同的环境中,应变片的阻值发生变化,输出零点漂移明显。并且应变片的输出信号很小、线性范围窄,而且动态响应较差,有待进一步开发。

在国际上,一些发达国家在电子称重方面,从技术水平、品种和规模等方面都达到了较高的水平。特别是在准确度和可靠性等方面有了很大的提高。其中梅特勒.托利多公司生产的BBK4系列高精度电子秤精度达到了lmg,速度大约为1次/秒。目前,电子秤在称量速度方面需要进一步的研究。

在称重传感器方面,国外产品的品种和结构又有创新,技术功能和应用范围不断扩大。

1.2.2 电子秤的发展趋势

电子秤的称重功能是基于微处理器这一核心技术来实现的。由于目前在设计电子称重系统时大量地采用集成芯片,因此电子称重系统已经摆脱了以往的电子模式,正向小型化、模块化、智能化、集成化发展;其技术性能趋向于高速率、高准确度、高稳定性、高可靠性;其应用性趋向于综合性、组合性。

小型化:体积小、高度低、重量轻,即小薄轻。为使电子衡器的承载器达到小、薄、轻,开始采用重量轻且刚度大的空心波纹铜板和方形闭合截面的薄壁型材。

模块化:电子衡器的承载器采用模块式一体组合或分体组合,产生新的品种和规格。这种模块化组合不但提高了产品的通用性和可靠性,而且也大大提高了生产效率,降低了成本。

智能化:与电子计算机组合或开发称重用计算机,利用计算机的智能来增加称重显示控制的功能,使其在原有功能的基础上增加推理、判断、自诊断、自适应、自组织等功能。

集成化:对于某些品种和结构的电子衡器,可以实现承载器与称重传感器一体化或承载器、称重传感器与称重显示控制器一体化。

综合性:电子称重技术和电子衡器产品的应用范围不断扩大,它已渗透到一些学科和工业自动控制领域。对某些商用电子计价秤而言,只具备称重、计价、显示、打印功能还远远不够,现代商业系统还要求它能提供各种销售信息,把称重与管理自动化紧密

结合,使称重、计价、进库、销售管理一体化,实现管理自动化。这就要求电子计价秤能与电子计算机联网,把称重系统与计算机系统组成一个完整的综合控制系统。

组合性:在工业生产过程或工艺流程中,不少称重系统还应具有可组合性,即:测量范围可以任意设定;硬件能够依据不定的程序进行修改和扩展;输入输出数据与指令可使用不同的语言,并能与外部的控制和数据处理设备进行通信。

今后, 随着电子高科技的飞速发展, 电子秤技术的发展定将日新月异。同时, 功能更加齐全的高精度的先进电子秤将会不断问世, 其应用范围也会更加拓宽。

1.3 本文的结构

本设计是以AT89S51为核心的一种高精度电子秤,系统采用模块化设计法,其硬件结构主要包括:数据采集模块、最小系统模块、电源模块、键盘和显示模块。软件部分由C语言编程,实现对各部分的控制。可以实现称重、去皮、置零、计价和显示等功能。其称重范围为0~5Kg,分度值为0.001g。整个系统结构简单,使用方便。全文共分为五章,各章主要内容如下:

第一章为绪论部分,简要介绍了选题的背景及意义、电子秤的研究现状及发展趋势以及本文的主要内容及结构;

第二章为总体设计部分,简要介绍了电子秤的结构及工作原理,论证了系统总体方案的设计,以及对各种方案的选择做出了比较;

第三章为系统硬件设计部分,主要是通过对各种模块的介绍以及对电路功能的分析,对系统硬件进行了选型和设计,得出系统硬件结构图;

第四章为系统软件设计部分,主要介绍了系统各部分软件的设计流程,给出了简单的程序;

第五章为系统软件仿真;

第六章为总结与展望,主要是对本课题的总结,以及对存在的问题进行归纳和进一步研究的方向。系统总体方案设计

2.1 电子秤的基本知识介绍

2.1.1 电子秤的基本结构

电子秤是利用物体的重力作用来确定物体质量(重量)的测量仪器,也可用来确定与质量相关的其它量大小、参数、或特性。不管根据什么原理制成的电子秤均由以下三部分组成:

(1)承重、传力复位系统

它是被称物体与转换元件之间的机械、传力复位系统,又称电子秤的秤体,一般包括接受被称物体载荷的承载器、秤桥结构、吊挂连接部件和限位减振机构等。(2)称重传感器

即由非电量(质量或重量)转换成电量的转换元件,它是把支承力变换成电的或其它形式的适合于计量求值的信号所用的一种辅助手段。

按照称重传感器的结构型式不同,可以分直接位移传感器(电容式、电感式、电位计式、振弦式、空腔谐振器式等)和应变传感器(电阻应变式、声表面谐振式)或是利用磁弹性、压电和压阻等物理效应的传感器。

对称重传感器的基本要求是:输出电量与输入重量保持单值对应,并有良好的线性关系;有较高的灵敏度;对被称物体的状态的影响要小;能在较差的工作条件下工作;有较好的频响特性;稳定可靠。

(3)测量显示和数据输出的载荷测量装置

即处理称重传感器信号的电子线路(包括放大器、模数转换、电流源或电压源、调节器、补偿元件、保护线路等)和指示部件(如显示、打印、数据传输和存贮器件等)。这部分习惯上称载荷测量装置或二次仪表。在数字式的测量电路中,通常包括前置放大、滤滤、运算、变换、计数、寄存、控制和驱动显示等环节。

2.1.2 电子秤的工作原理

当被称物体放置在秤体的秤台上时,其重量便通过秤体传递到称重传感器,传感器

随之产生力-电效应,将物体的重量转换成与被称物体重量成一定函数关系(一般成正比关系)的电信号(电压或电流等)。通常此电压信号很小,需要通过前端信号处理电路进行准确的线性放大,放大后的模拟电压信号经过滤波电路和A/D转换电路转换成数字信

1号被送入到主控电路的单片机中○,单片机不断扫描键盘和各种功能开关,根据键盘输入内容和各种功能开关的状态进行必要的判断、分析、由仪表的软件来控制各种运算。运算结果送到内存贮器,需要显示时,单片机发出指令,从内存贮器中读出送到显示器显示。

2.1.3 电子秤的计量参数

电子秤的计量性能涉及的主要技术指标有:量程、安全载荷、额定载荷、允许误差、分度值、分度数、准确度等级等。

(1)量程:一台电子秤不计皮重,所能称量的最大的载荷Max,即电子秤在正常工作情况下,所能称量的最大值。

(2)安全载荷:为电子秤正常称量案范围的120%。(3)额定载荷:电子秤的正常称量范围。(4)允许误差:等级检定时允许的最大偏差。

(5)分度值:电子秤的测量范围被分成若干等份,每份值即为分度值。用e或d来表示。

(6)分度数:衡器的测量范围被分成若干等份,总份数即为分度数用n表示。电子衡器的最大称量Max可以用总分度数n与分度值d的乘积来表示,即Max=n*d。

(7)准确度等级:国际法制计量组织把电子秤按照不同的分度数分成Ⅰ、Ⅱ、Ⅲ、Ⅳ四类等级,分别对应不同准确度的电子秤和分度数n的范围,如表

1因为本设计采用软件仿真而不能进行实际的称量,故信号的放大滤波电路部分舍去,直接输入模拟电压信号,○放大滤波部分内容会在第五章仿真总结与问题补充中进行后续介绍。

2-1所示。

表2-1 电子秤等级分类

标志及等级 特种准确度

电子秤种类 基准衡器

分度数范围 n>100,000

高准确度 中准确度 普通准确度

精密衡器 商业衡器 粗衡器

10,000

按照设计的基本要求,可以确定系统共分为五大模块,数据采集模块、最小系统模块、超重报警模块、键盘和显示模块。其中,数据采集模块包括称重传感器和A/D转换电路;最小系统模块由AT89S51单片机及其外围电路组成;键盘由4×4位矩阵键盘组成,可以控制显示商品种类和价钱等信息;显示部分采用LM4229液晶显示,显示当前商品的名称、单价、重量及总价等信息。软件部分由C语言编程,实现对各部分的控制。该电子秤可以实现显示商品的名称、单价、重量、总价等功能。其称重范围为0~5Kg,分度值为0.001g。在扩展功能上,本设计增加了一个超重报警提示。其总体设计的框图如图2-1所示:

数据采集模块单片机最小系统超重报警模块键盘模块显示模块

图2-1 总体设计方框图

系统工作原理:把所称物体放到秤台上,物体的重力通过秤体传给称重传感器,传感器受到压力使电阻发生变化引起电压变化,再将电压值送到A/D转换电路,将模拟量转换成数字量,转换后的数字量送至单片机进行处理,并显示结果。单片机最小系统由AT89S51和外围的时钟电路及复位电路组成。显示电路设计采用LM4229液晶显示,对各部分的控制由采用C语言编程的软件来实现。

2.3 系统各部分设计方案论证

2.3.1 电子秤分度数的设定

当前,一些单位为了提高Ⅲ级商贸秤的准确度,尝试改小电子秤的分度值,扩大电子秤的分度数,以便达到高精度称量的目的。这样做非但不能进行高精度称量,还会破坏电子秤原有的计量性能,降低电子秤的准确度,有损电子秤的可靠性,使电子秤出现更多的计量误差。

现在我国已经完全与OIML规定接轨,衡器计量检定规程完全按OIML规定而来。表2-2为Ⅲ级商业秤误差要求。

表2-2 Ⅲ级数字显示商用衡器允差表

m <500e 500e< m≤2000e 2000e< m≤Max

允差e(检定分度值)

检定要求 ±0.5e ±1.0e ±1.5e

使用中要求 ±1.0e ±2.0e ±3.0e 由表2-2可知,它的整个称量范围允差规定是变化的,误差是从大到小再变大,最高准确度在中间。从0~500分度数为低精度称量段,到高于3000个分度数之后的实际称量精度逐渐变低,实际误差不断加大。分度数再高其允差也是不变的。从国外电子秤的准确度和分度数设置、国内原先衡器的检定标准和现在我们统计的电子秤分度数的准确度以及OIML对Ⅲ级秤的允差规定看,说明现有Ⅲ级商业秤的分度数设置为2000~3000是比较理想的,属于最佳分度数。这样设置决定了电子秤的准确度首检为±0.05%,使用中为±0.1%的正确性、合理性与必要性。

2.3.2 称重传感器的选定

称重传感器在电子秤中占有十分重要的位置,被喻为电子秤的心脏部件,它的性能好坏很大程度上决定了电子秤的精确度和稳定性。考虑到不同使用地点的重力加速度和空气浮力对转换的影响,称重传感器的性能指标主要有线性误差、滞后误差、重复性误差、蠕变、零点温度特性和灵敏度温度特性等。在各种衡器和质量计量系统中,通常用

综合误差带来综合衡量传感器准确度,并将综合误差带与衡器误差带联系起来,以便选用对应于某一准确度衡器的称重传感器。国际法制计量组织(OIML)规定,传感器的误差带δ占衡器误差带Δ的70%,称重传感器的线性误差、滞后误差以及在规定温度范围内由于温度对灵敏度的影响所引起的误差等的总和不能超过误差带δ。若在环境恶劣的条件下(如高低温、湿热),传感器所占的误差比例就更大,因此,在人们设计电子秤时,正确地选用称重传感器非常重要。1.常用各种称重传感器

称重传感器按转换方法分为光电式、液压式、电磁力式、电容式、磁极变形式、振动式、陀螺仪式、电阻应变式等8类,以电阻应变式使用最广。

光电式传感器包括光栅式和码盘式两种。光栅式传感器利用光栅形成的莫尔条纹把角位移转换成光电信号。光栅有两块,一为固定光栅,另一为装在表盘轴上的移动光栅。加在承重台上的被测物通过传力杠杆系统使表盘轴旋转,带动移动光栅转动,使莫尔条纹也随之移动。利用光电管、转换电路和显示仪表,即可计算出移过的莫尔条纹数量,测出光栅转动角的大小,从而确定和读出被测物质量。码盘式传感器的码盘是一块装在表盘轴上的透明玻璃,上面带有按一定编码方法编定的黑白相间的代码。加在承重台上的被测物通过传力杠杆使表盘轴旋转时,码盘也随之转过一定角度。光电池将透过码盘接受光信号并转换成电信号,然后由电路进行数字处理,最后在显示器上显示出代表被测质量的数字。光电式传感器曾主要用在机电结合秤上。

液压式传感器:在受被测物重力P作用时,液压油的压力增大,增大的程度与P成正比。测出压力的增大值,即可确定被测物的质量。液压式传感器结构简单而牢固,测量范围大,但准确度一般不超过1/100。

电磁力式传感器:它利用承重台上的负荷与电磁力相平衡的原理工作。当承重台上放有被测物时,杠杆的一端向上倾斜;光电件检测出倾斜度信号,经放大后流入线圈,产生电磁力,使杠杆恢复至平衡状态。对产生电磁平衡力的电流进行数字转换,即可确定被测物质量。电磁力式传感器准确度高,可达1/2000~1/60000,但称量范围仅在几十毫克至10千克之间。

电容式传感器:工作原理是利用电容器振荡电路的振荡频率f与极板间距d成正比的关系。极板有两块,一块是固定不动的,另一块是可移动的。在秤体加载重物时,两

极板间的距离发生变化,随之,电路的振荡频率也改变。只要测出频率的变化便可求出被测物的质量。电容式传感器耗电量少,造价低,准确度为1/200~1/500。

磁极变形式传感器:原理为铁磁元件在被测物体重力下发生形变,产生应力引起导磁率的变化,随之,绕在铁磁元件两侧的次级线圈的感应电压也变化。这样测出电压的变化量便可求出加到磁极上的力,从而确定物体的质量。磁极变形式传感器的准确度不高,一般为1/100,称量范围为几十至几万千克。

振动式传感器弹性元件受力后,其固有振动频率与作用力的平方根成正比。测出固有频率的变化,即可求出被测物作用在弹性元件上的力,进而求出其质量。振动式传感器有振弦式和音叉式两种。

振弦式传感器的弹性元件是弦丝。当承重台上加有被测物时,V形弦丝的交点被拉向下,且左弦的拉力增大,右弦的拉力减小。两根弦的固有频率发生不同的变化。求出两根弦的频率之差,即可求出被测物的质量。振弦式传感器的准确度较高,可达1/1000~1/10000,称量范围为100克至几百千克,但结构复杂,加工难度大,造价高。

音叉式传感器的弹性元件是音叉。音叉端部固定有压电元件,它以音叉的固有频率振荡,并可测出振荡频率。当承重台上加有被测物时,音叉拉伸方向受力而固有频率增加,增加的程度与施加力的平方根成正比。测出固有频率的变化,即可求出重物施加于音叉上的力,进而求出重物质量。音叉式传感器耗电量小,计量准确度高达1/10000~1/200000,称量范围为500g~10kg。

陀螺仪式传感器,转子装在内框架中,以角速度ω绕X轴稳定旋转。内框架经轴承与外框架联接,并可绕水平轴Y倾斜转动。外框架经万向联轴节与机座联接,并可绕垂直轴Z旋转。转子轴(X轴)在未受外力作用时保持水平状态。转子轴的一端在受到外力(P/2)作用时,产生倾斜而绕垂直轴Z 转动(进动)。进动角速度ω与外力P/2成正比,通过检测频率的方法测出ω,即可求出外力大小,进而求出产生此外力的被测物的质量。陀螺仪式传感器响应时间快(5秒),无滞后现象,温度特性好(3ppm),振动影响小,频率测量准确精度高,故可得到高的分辨率(1/100000)和高的计量准确度(1/30000~1/60000)。

电阻应变式传感器利用电阻应变片变形时其电阻也随之改变的原理工作。主要由弹性元件、电阻应变片、测量电路和传输电缆4部分组成。电阻应变片贴在弹性元件上,弹性元件受力变形时,其上的应变片随之变形,并导致电阻改变。测量电路测出应变片电阻的变化并变换为与外力大小成比例的电信号输出。电信号经处理后以数字形式显示出被测物的质量。电阻应变式传感器的称量范围为300g至数千Kg,计量准确度达1/1000~1/10000,结构较简单,可靠性较好,大部分电子衡器均使用此传感器。2.称重传感器的选择

传感器种类繁多,分类方式也千差万别,它们都有各自的特点,但在设计电子秤时,选择一种合适的传感器非常重要,传感器的性能在很大程度上决定了电子秤的精确度和稳定性。称重传感器的选择主要从以下几个方面考虑。(1)对传感器数量和量程的选择

传感器数量的选择是根据电子秤的用途、秤体需要支撑的点数(支撑点数应根据使秤体几何重心和实际重心重合的原则而确定)而定。一般来说,秤体有几个支撑点就选用几只传感器,但是对于一些特殊的秤体,如电子吊秤,就只能采用一个传感器,一些机电结合秤就应根据实际情况来确定选用传感器的个数。传感器的量程选择可依据秤的最大称量值、选用传感器的个数、秤体自重、可产生的最大偏载及动载因素综合评价来决定。一般来讲,传感器的量程越接近分配到每个传感器的载荷,其称量的准确度就越高。但是在实际的使用当中,由于加在传感器上的载荷除被称物体外,还存在秤体自重、皮重、偏载及振动冲击等载荷,因此选用传感器时,要考虑诸多方面的因素,保证传感器的安全和寿命。公式2-1给出了传感器量程选择的计算公式。

K0K1K2K3WmaxWC

N(2-1)

式中C—单个传感器的额定量程;W—秤体自重;Wmax一被称物体净重的最大值;N—秤体所采用支撑点的数量;K0—保险系数,一般取1.2~1.3之间;K1—冲击系数;K2—秤体的重心偏移系数;K3—风压系数(2)传感器准确度等级的选择

传感器的准确度等级概括了传感器的非线性、蠕变、蠕变恢复、滞后、重复性、灵敏度等技术指标。称重传感器已按准确度等级划分,且已考虑了0.7倍误差因子,非自动衡器称重传感器的准确度等级要选择与电子秤相对应的准确度等级。称重传感器按综合性能分为A、B、C、D四个准确度等级,分别对应于衡器Ⅰ、Ⅱ、Ⅲ、Ⅳ四个准确度等级。

(3)各种类型传感器的使用范围

称重传感器形式的选择主要取决于称重的类型和安装空间,保证安装合适,称重安全可靠;另一方面要考虑厂家的建议。对于传感器制造厂家来讲,它一般规定了传感器的受力情况、性能指标、安装形式、结构形式、弹性体的材质等。譬如铝合金悬臂梁传感器适合于电子计价秤、平台秤、案秤等;钢式悬臂梁传感器适用于电子皮带秤、分选秤等;钢质桥式传感器适用于轨道衡、汽车衡等;柱式传感器适用于汽车衡、动态轨道衡、大吨位料斗秤等。(4)使用环境

称重传感器实际上是一种将质量信号转换成可测量的电信号输出装置。用传感器首先要考虑传感器所处的实际工作环境,这点对于正确选用传感器至关重要,它关系到传感器能否正常工作以及它的安全和使用寿命,乃至整个衡器的可靠性和安全性。一般情况下,高温环境对传感器造成涂覆材料融化、焊点开化、弹性体内应力发生结构变化等问题;粉尘、潮湿对传感器造成短路的影响;在腐蚀性较高的环境下会造成传感器弹性体受损或产生短路现象;电磁场对传感器输出会产生干扰。相应的环境因素下我们必须选择对应的称重传感器才能满足必要的称重要求。3.电阻应变式称重传感器

按照称重传感器选择的指标要求,以及对各种传感器的比较,本设计选定电阻应变片式传感器,下面对此类传感器做详细介绍。

电阻应变式称重传感器是把电阻应变计粘贴在弹性敏感元件上,弹性体(弹性元件,敏感梁)在外力作用下产生弹性变形,使粘贴在他表面的电阻应变片(转换元件)也随同产生变形,电阻应变片变形后,它的阻值将发生变化(增大或减小),再经相应的测量电路把这一电阻变化转换为电信号(电压或电流),从而完成了将外力变换为电信号的过程。

电阻应变式称重传感器包括两个主要部分,一个是弹性敏感元件:利用它将被测的重量转换为弹性体的应变值;另一个是电阻应变计:它作为传感元件将弹性体的应变,同步地转换为电阻值的变化。电阻应变片所感受的机械应变量一般为10-6~10-2,随之而产生的电阻变化率也大约在10-6~10-2数量级之间。这样小的电阻变化用一般测量电阻的仪表很难测出,必须采用一定形式的测量电路将微小的电阻变化率转变成电压或电流的变化,才能用二次仪表显示出来。在电阻应变式称重传感器中通过桥式电路将电阻的变化转换为电压变化。当传感器不受载荷时,弹性敏感元件不产生应变,粘贴在其上的应变片不发生变形,阻值不变,电桥平衡,输出电压为零;当传感器受力时,即弹性敏感元件受载荷P时,应变片就会发生变形,阻值发生变化,电桥失去平衡,有输出电压。图2-2为电阻应变式称重传感器桥式测量电路。

图2-2 电阻应变式称重传感器桥式测量电路

R1、R2、R3、R4为4个应变片电阻,组成了桥式测量电路,Rm为温度补偿电阻,e为激励电压,V为输出电压。若不考虑Rm,在应变片电阻变化以前,电桥的输出电压为:

R4R1Ve

R1R2R3R4(2-2)

由于桥臂的起始电阻全等,即R1=R2=R3=R4=R,所以V=0。当应变片的电阻R1、R2、R3、R4变成R+△R1、R+△R2、R+△R3、R+△R4时,电桥的输出电压变为: RR1RR4Ve

RR1RR2RR3RR4(2-3)

通过化简,上式则变为: VeR1R2R3R4

4RRRR(2-4)

也就是说,电桥输出电压的变化与各桥臂电阻变化率的代数和成正比。如果四个桥臂应R变片的灵敏系数相同,且=Kε,则上式又可写成:

R

VeK1234 4(2-5)

式中K为应变片灵敏系数,ε为应变量。式2-5表明,电桥的输出电压和四个轿臂的应变片所感受的应变量的代数和成正比。在电阻应变式称重传感器中,4个应变片分别贴在弹性梁的4个敏感部位,传感器受力作用后发生变形。在力的作用下,R1、R3被拉伸,阻值增大,△R1、△R3正值,R2、R4被压缩,阻值减小,△R2、△R4为负值。再加之应变片阻值变化的绝对值相同,即

因此

VeK4eK 4R1R3R或13 R2R4-R或24

(2-6)(2-7)

(2-8)

若考虑Rm,则电桥的输出电压变成: 令Su V,则 eSuRK

R2RmRRRRRRVeKe 2RR2RmR2Rm2R(2-9)

(2-10)

Su称为传感器系数或传感器输出灵敏度。

对于一个高精度的应变传感器来说,仅仅靠4个应变片组成桥式测量电路还是远远不够的。由于弹性梁材料金相组织的不均匀性及热处理工艺、应变片性能及粘贴工艺、温度变化等因素的影响,传感器势必产生一定的误差。为了减少传感器随温度变化产生的误差,提高其精度和稳定性,需要在桥路两端和桥臂中串入一些补偿元件。如:初始不平衡值的补偿、零载输出温度补偿、输出灵敏度温度补偿等。

2.3.3 A/D转换器的选定

在实际的测量和控制系统中检测到的常是时间、数值都连续变化的模拟量,模拟量要输入到单片机中进行处理,首先要经过模拟量到数字量的转换,单片机才能接收、处理。目前有多种类型的A/D转换器,其类型有积分型、逐次逼近型、并行比较型、Σ-

Δ调制型、压频变换型等。多种类型的ADC各有其优缺点,并能满足不同的具体要求。1.A/D转换器的分类:(1)积分型

积分型ADC工作原理是将输入电压转换成时间(脉冲宽度信号)或频率(脉冲频率),然后由定时器/计数器获得数字值。其优点是用简单电路就能获得高分辨率,但缺点是由于转换精度依赖于积分时间,因此转换速率极低。初期的单片AD转换器大多采用积分型,现在逐次比较型已逐步成为主流。(2)逐次逼近型

逐次逼近型ADC由一个比较器和D/A转换器通过逐次比较逻辑构成,从MSB开始,顺序地对每一位将输入电压与内置D/A转换器输出进行比较,经n次比较而输出数字值。其电路规模属于中等。其优点是速度较高、功耗低,在低分辩率(<12位)时价格便宜,但高精度(>12位)时价格很高。(3)并行比较型/串并行比较型

并行比较型ADC采用多个比较器,仅作一次比较而实行转换,又称Flash(快速)型。由于转换速率极高,n位的转换需要2n-1个比较器,因此电路规模也极大,价格也高,只适用于视频AD转换器等速度特别高的领域。串并行比较型AD结构上介于并行型和逐次比较型之间,最典型的是由2个n/2位的并行型AD转换器配合DA转换器组成,用两次比较实行转换,所以称为 Half flash(半快速)型。还有分成三步或多步实现AD转换的叫做分级型ADC,而从转换时序角度又可称为流水线型ADC,现代的分级型AD中还加入了对多次转换结果作数字运算而修正特性等功能。这类AD速度比逐次比较型高,电路规模比并行型小。(4)Σ-Δ调制型

Σ-Δ型AD由积分器、比较器、1位DA转换器和数字滤波器等组成。原理上近似于积分型,将输入电压转换成时间(脉冲宽度)信号,用数字滤波器处理后得到数字值。电路的数字部分基本上容易单片化,因此容易做到高分辨率。主要用于音频和测量。(5)压频变换型

压频变换型是通过间接转换方式实现模数转换的。其原理是首先将输入的模拟信号转换成频率,然后用计数器将频率转换成数字量。从理论上讲这种AD的分辨率几乎可

以无限增加,只要采样的时间能够满足输出频率分辨率要求的累积脉冲个数的宽度。其优点是分辩率高、功耗低、价格低,但是需要外部计数电路共同完成AD转换。2.A/D转换器选用的原则:

(1)A/D转换器的位数。A/D转换器决定分辨率的高低,在系统中,A/D转换器的分辨率应比系统允许引用误差高一倍以上。

(2)A/D转换器的转换速率。不同类型的A/D转换器的转换速率大不相同。积分型的转换速率低,转换时间从几豪秒到几十毫秒,只能构成低速A/D转换器,一般用于压力、温度及流量等缓慢变化的参数测试。逐次逼近型属于中速A/D转换器,转换时间为纳秒级,用于个通道过程控制和声频数字转换系统。

(3)是否加采样/保持器。

(4)A/D转换器的有关量程引脚。有的A/D转换器提供两个输入引脚,不同量程范围内的模拟量可从不同引脚输入。

(5)A/D转换器的启动转换和转换结束。一般A/D转换器可由外部控制信号启动转换,这一启动信号可由CPU提供。转换结束后A/D转换器内部转换结束信号触发器置位,并输出转换结束标志电平,通知微处理器读取转换结果。

(6)A/D转换器的晶闸管现象。其现象是在正常使用时,A/D转换器芯片电流骤增,时间一长就会烧坏芯片。

2.3.4 单片机型号的选定

1.单片机选定准则

市场上的单片机型号很多,功能也有差异,在选择单片机型号的时候主要应该注意以下几个方面:(1)市场货源

系统设计者只能在市场上能够提供的单片机中选择,特别是作为产品大批量生产的应用系统,所选的单片机型号必须有稳定、充足的货源。(2)单片机性能

应根据系统的功能要求和各种单片机的性能,选择最容易实现系统技术指标的型号,而且能达到较高的性能价格比。单片机性能包括片内硬件资源、运行速度、可靠性、指令系统功能、体积和封装形式等方面。影响性能价格比的因素除单片机的性能价格外,还包括硬件和软件设计的容易程度、相应的工作量大小,以及开发工具的性能价格比。(3)研制周期

在研制任务重、时间紧的情况下,还要考虑所选的单片机型号是否熟悉,是否能马上着手进行系统的设计。与研制周期有关的另一个重要因素是开发工具,性能优良的开发工具能加快系统地研制进程。2.AT89S51单片机介绍

根据以上对单片机选型知识的介绍,本设计选用AT89S51单片机,下面对此型号单片机进行简介。

AT89S51是美国ATMEL公司生产的低电压、高性能CMOS 8位单片机。AT89S51是一种带4K字节闪烁可编程可擦除只读存储器的单片机,其指令集和传统的51单片机指令集是一样的。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89S51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

AT89S51具有如下特点:40个引脚,4k Bytes Flash片内程序存储器,128 bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。

此外,AT89S51设计和配置了振荡频率可为0Hz并可通过软件设置省电模式。空闲模式下,CPU暂停工作,而RAM定时计数器,串行口,外中断系统可继续工作,掉电模式冻结振荡器而保存RAM的数据,停止芯片其它功能直至外中断激活或硬件复位。硬件设计

3.1 系统硬件结构图

图3-1为系统总体硬件结构方框图,系统共分为三大部分:数据采集模块、单片机控制模块以及键盘和显示模块。各模块所采用的主要芯片型号已于图中有所标示。

AD转换ADC0832AT89S51单片机最小系统超重报警模块4*4矩阵键盘LM4229液晶显示

图3-1 系统总体硬件设计方框图

3.2 单片机主控单元的设计

3.2.1 单片机引脚说明

AT89S51单片机芯片为40个引脚,图3-2为单片机AT89S51引脚图。下面简单叙述各引脚的功能。

VCC/GND:电源/接地引脚;

P0口:P0是一个8位漏极开路型双向I/O端口,端口置1(对端口写1)时作高阻抗输入端;P0还可以用作总线方式下的地址数据复用管脚,用来操作外部存储器。在这种工作模式下,P0口具有内部上拉作用。对内部Flash程序存储器编程时,接收指令字节、校验程序、输出指令字节时,要求外接上拉电阻;

P1口:P1是一个带有内部上拉电阻的8位双向I/0端口,输出时可驱动4个TTL。端口置1时,内部上拉电阻将端口拉到高电平,作输入用; 另外,P1.0、P1.1可以分别被用作定时器/计数器2的外部计数输入(P1.0/T2)和触发输入(P1.1/T2EX);对内部Flash程序存储器编程时,接收低8位地址信息;

P2口:P2是一个带有内部上拉电阻的8位双向I/0端口;输出时可驱动4个TTL。端口置1时,内部上拉电阻将端口拉到高电平,作输入用; P2口在存取外部存储器时,可作为高位地址输出;内部Flash程序存储器编程时,接收高8位地址和控制信息;

P3口:P3是一个带有内部上拉电阻的8位双向I/0端口,输出时可驱动4个TTL。端口置1时,内部上拉电阻将端口拉到高电平,作输入用。P3引脚功能复用见表3-1所示:

表3-1 P3口引脚功能复用

P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7

串行通讯输入(RXD)串行通讯输出(TXD)外部中断0(INT0)外部中断1(INT1)定时器0输入(T0)定时器1输入(T1)外部数据存储器写选通WR 外部数据存储器写选通RD

RST:在振荡器运行时,有两个机器周期(24个振荡周期)以上的高电平出现在此管脚时,将使单片机复位。只要这个管脚保持高电平,51芯片便循环复位。复位后P0—P3口均置1,管脚表现为高电平,程序计数器和特殊功能寄存器SFR全部清零。当复位脚由高电平变为低电平时,芯片为ROM的00H处开始运行程序;

XTAL1、XTAL2:XTAL1是片内振荡器的反相放大器输入端,XTAL2则是输出端,使用外部振荡器时,外部振荡信号应直接加到XTAL1,而XTAL2悬空。内部方式时,时钟发生器对振荡脉冲二分频,如晶振为12MHz,时钟频率就为6MHz。晶振的频率可以在1MHz至24MHz内选择,电容取30PF左右。

ALE/PROG:访问外部存储器时,ALE(地址锁存允许)的输出用于锁存地址的低位字节,即使不访问外部存储器,ALE端仍以不变的频率输出脉冲信号(此频率是振荡器频率的1/6),在访问外部数据存储器时,出现一个ALE脉冲;

PSEN:外部程序存储器的选通信号输出端。当AT89S51由外部程序存储器取指令或常数时,每个机器周期输出2个脉冲,即两次有效。但访问外部数据存储器时,将不

会有脉冲输出;

EA/Vpp:外部访问允许端。当该引脚访问外部程序存储器时,应输入低电平。要使AT89S51只访问外部程序存储器(地址为0000H-FFFFH),这时该引脚必须保持低电平。

图3-2单片机AT89S51引脚图

3.2.2 AT89S51最小系统设计

单片机最小系统,或者称为最小应用系统,是指用最少的元件组成的单片机可以工作的系统。对51系列单片机来说,最小系统包括:单片机、晶振电路、复位电路。其中复位电路采用上电复位。其最小系统电路图见图3-3所示:

图3-3 单片机最小系统图

对于AT89S51单片机,其最小系统只需要电源、复位电路、时钟电路就能工作。由于我们的程序存储器(ROM)采用内部Flash存储单元,所以单片机上的EA接高。

微处理器系统在开始工作时必须对微处理器内部的寄存器等进行复位,使各个寄存器的值设为预定状态才能顺利开始工作。复位电路的好坏决定着单片机能否正常工作。复位电路基本功能是在系统上电时提供复位信号,直至系统电源稳定后,撤销复位信号。复位电路可以使用专用复位芯片,也可以用电阻电容搭建。本文从可靠性和成本考虑最终选用电阻电容来搭建复位电路。对于51内核的单片机,RST是复位信号输入端,高电平有效。当此输入端保持两个机器周期(24个时钟振荡周期)的高电平时,可以完成复位操作。

3.3 数据采集模块设计

3.3.1 传感器单元设计

根据第二章对各种类型传感器特性的介绍,本设计决定采用L-psⅢ型称重传感器,该传感器为双孔平衡梁形式,是制作电子计价秤的专用产品,也可用于制造由单只传感器构成的电子案秤、台秤及专用衡器等。其主要技术指如表3-2所示:

表3-2 L-psⅢ型称重传感器技术指标

额定载荷 灵敏度 准确度等级 最大分度数 最小检定分度值 综合误差 重复性 蠕变 最小静载荷 最大安全载荷 极限过载荷 输入电阻 输出电阻 温度补偿范围 使用温度范围 接线方式

Kg mV/V

%F.S.%F.S.%F.S./30min %Fmax %Fmax %Fmax

3,6,10,20,30,50 1.8±0.08 C3 3000 Fmax/10000

0.02 0.01 ±0.017 1 150 200 415~445 349~355-10~+50-20~+60

 ℃ ℃

输入(+):红,输入(-):白,输出(+):绿

输出(-):蓝,屏蔽:黄

3.3.2 A/D转换单元设计

根据对各种A/D转换器的介绍与分析,本设计选定ADC0832作为本设计的A/D转

换模块。下面对该芯片的情况进行简要的介绍。

ADC0832是美国国家半导体公司生产的一种8位分辨率、双通道A/D转换芯片。具有体积小,兼容性强,性价比高的特点,具体参数如下:  8位分辨率;  双通道A/D转换;

 输入输出电平与TTL/CMOS相兼容;  5V电源供电时输入电压在0~5V之间;  工作频率为250KHZ,转换时间为32uS;  一般功耗仅为15mW;

 8P、14P-DIP(双列直插)、PICC多种封装;

 商用级芯片温宽为0℃~70℃,工业级芯片温宽为-40℃~85℃;

1、下面对ADC0832的引脚进行说明,图3-4为该芯片的引脚图:

图3-4 ADC0832引脚图

 CS—:片选端,低电平芯片使能;

 CH0:模拟输入通道0,或作为IN+/-使用;  CH1:模拟输入通道1,或作为IN+/-使用;  GND:芯片参考零点位(地);  DI:数据信号输入,选择通道控制;  DO:数据信号输出,转换数据输出;  CLK:芯片时钟输入;

 Vcc/REF:电源输入及参考电压输入(复用)。

2、ADC0832的接口电路

正常情况下,ADC0832与单片机的接口应为4条数据线,分别是CS、CLK、DO、DI,但由于DO端与DI端在通信时并未同时有效并与单片机的接口是双向的,所以电路设计时可以将DO与DI并联在一根数据线上使用。单片机与ADC0832的接口电路如图3-5所示。

图3-5 单片机与ADC0832连接图

当ADC0832未工作时其CS输入端应为高电平,此时芯片禁用,CLK和DO/DI的电平可以任意,当要进行A/D转换时,须先将CS使能端置于低电平并保持低电平直到转换完全结束。此时芯片开始转换工作,同时由处理器向芯片时钟输入端CLK输入时钟脉冲,DO/DI端则使用DI端输入通道功能选择的数据信号。

3.4 键盘和显示电路单元设计

3.4.1 键盘电路设计

在本设计中,采用的是4×4的矩阵式键盘,将单片机的P1.0-P1.3作为键盘的行线接口,P1.4-P1.7作为列线接口,列线通过电阻接+5V。商品的单价已由程序设定好,并

号连接。3.4.2 显示电路设计

3.5 系统总体原理图 可由键盘选择各种商品的价格。

图3-6所示,为完善其功能,电路中添加了上拉电阻。

图3-6 液晶显示模块LM4229与单片机接线图 在系统各部分的设计完成后,把各模块根据其功能和信号处理的流程连接起来,便得到系统总体设计的原理图,如图3-7所示,为简洁起见,其中的接线部分采用网络标本设计中显示部分采用了当今常用的LM4229液晶显示模块。其与单片机的接线如

措施。3.6 硬件抗干扰设计

图3-7 系统总体原理图

方面,但更重要的方面是外界干扰和接地引起的异常。

度。就单片机测控系统来讲,其主要干扰是来自电源和信号传输通道的干扰。用到称重传感器,所采用的应变式传感器是高阻抗器件,其绝缘性能、机械结构的稳定性等,直接影响工作特性的稳定。因此,应变片传感器的绝缘材料必须有很高的绝缘性统的可靠性更倍受人们的关注,这是因为系统的可靠性决定了系统能否达到所需要的精能、足够的机械强度、高形状稳定性及良好的抗湿性能。下面重点介绍单片机的抗干扰随着科学技术的迅速发展,人们对单片机测控系统的各种性能要求越来越高。而系本电子称重器的核心部件是单片机,所以我们的抗干扰措施主要是针对单片机。还电子秤在使用中,常常会出现各种各样的异常现象,电子秤本身的质量问题是一个

1、电源的抗干扰措施

普通用电中含有多种高次谐波,它们很容易经电源进入单片机系统,还有一些射频发射、电磁波等也会由电源线感应反馈进入单片机系统造成干扰。因此,在电源电路中必需采取有效地滤波措施,来抑制这些高频干扰的侵入。电源滤波的一般方法是在电源变压器初、次级分别设置低通滤波器和线间电容滤波器,使50Hz市电基波通过,而抑制掉高频信号。此外在变压器的初、次级之间均采用屏蔽层隔离,其中初级屏蔽层接大地,次级屏蔽层接系统逻辑地,以减少其分布电容,提高抗共模干扰的能力。

2、信号传输通道的抗干扰措施

信号传输通道包括系统的前向通道和后向通道,其主要干扰有:杂散电磁场通过感应和辐射方式进入通道的干扰;由于地阻抗耦合、漏电流等因素产生的加性干扰;以及因传输线衰减、阻抗失配等因素引起的乘性干扰。对于这三类干扰,可以采用以下几种措施加以排除。(1)光电隔离技术

光电耦合器对干扰信号具有良好的隔离性能,一是它的输入阻抗很小,约为100fl-lldl,而干扰源内阻则很大,通常为105Q~108Q,因此能分压到光电耦合器输入端的噪声很小;二是光电耦合器输入部分的发光二极管是在电流状态下工作的,即使干扰噪声有较高的电压幅度,但由于能量小,不能提供足够的电流使发光二极管发光而被抑制掉;三是光电耦合器的输入回路与输出回路之间分布电容极小,绝缘电阻很大,回路一边的干扰很难通过光电耦合器馈送到另一边去。因此,采用光电耦合器可将单片机与前向通道、后向通道及其他部分从电气上隔离开来,能有效地防止干扰信号的侵入。(2)接地技术

本系统既有模拟电路又有数字电路,因此数字地与模拟地要分开,最后只在一点相连,如果两者不分,则会互相干扰。(3)输入输出信号线采用屏蔽双绞线

屏蔽双绞线对于静电干扰和电磁干扰有很好的抑制作用,有条件的话应尽量采用。但使用中应注意:

 线缆敷设时不要过分用力或使电缆打结、避免弯曲超过900、避免过紧地缠绕电缆,以保护双绞47线的扭绞状态;

 做线时,避免损坏线缆的外皮、不要切坏线缆内的导线;  接线时,双绞线的开绞长度尽量小,不要超过20mm;  双绞线的屏蔽层采用设备端单端接地方式。系统软件设计

本系统程序使用模块化的程序设计思想,主程序通过调用子程序以实现各部分功能。先进行软件的总体设计,然后进行各功能模块设计。

4.1 主程序设计

电子秤需要有数据采集、处理、存结果、送显示的运行过程。根据这一要求,电子秤的信息采集与处理分三个阶段:在微处理器的控制下,经传感器转换的电压信号通过输入电路送入A/D转换器处理,存入到数据存储器中;微处理器对采集的测量数据进行必要的数据处理,把数据信号处理为显示所要求的信号格式,通过输出接口电路输出并显示。主流程图见图4-1所示:

开始单片机初始化、LM4229进入欢迎界面、ADC0832初始化载物台是否有重物Y单片机存储ADC0832采样值N是否输入商品代码按键Y单片机执行计算并将结果送LM4229显示N测量结束键是否按下Y结束N

图4-1 主程序流程图

4.2 LM4229液晶显示驱动程序

开始写入控制字写入初始行Y是否换行?N全部数据已写完?Y结束N

图4-2 LM4229液晶显示驱动程序流程图

LM4229液晶能够显示比较复杂的汉字和图形,首先必须对其写入控制操作字,包括图形的显示方式,字体的模式。然后写入初始行地址,指针自动左移,直到写完全部数据为止。

write_data(place&0xff);//写入地址高位 write_data(place/256);//写入地址低位 write_com(0x24);//地址设置 write_com(0xb0);//设置数据自动写

write_data(ASC_MSK[(c1-0x20)*16+k]);/*---例如:0的ASCII码为0x30, 在ASC_MSK中的位置为0x10*16---16字节字码依次写入LCD---*/ write_com(0xb2);//自动复位 place=place+30;

4.3 ADC0832采样程序

开始拉低CS、拉高CLKDATA右移八位?Y拉高CS、拉低CLK,返回数据N结束

图4-3 ADC0823采样程序流程图

单片机通过拉低CS、拉高CLK来启动ADC0832进行外部压力传感转换后的电压信号进行采样,每产生8个CLK脉冲,DATA获得一位完整的8bit数据,此时MCU发送中断请求,拉高CS,拉低CLK,并将数据DAT返回。

4.4 键盘程序

本设计中采用了4×4矩阵式键盘,单片机定时进行查询。首先单片机发送行扫描代码,然后进行列扫描,当发现某一列出现了低电平时,即返回相应的键盘值。若没有发现则说明当前行没有键按下,行扫描右移一位,继续执行列扫描。

开始发送行扫描码发送列扫描码右移一位右移一位列扫描完毕?NYN行扫描完毕?Y返回键值结束图4-4 键盘程序流程图

系统仿真

在系统硬件与软件全部设计完成的情况下,将系统在protues7.5环境下进行了软件仿真,以确保本设计方案的可行性与准确性。因为在仿真时不能实际的把物体放到称重台上,所以在仿真时采用直接输入模拟电压信号的方法,来代替信号的采集。

5.1 欢迎界面的仿真

开始仿真时,先将用C语言编写的程序用Keil软件进行编译,生成可执行程序,然后装入单片机中进行仿真,按开始按钮,单片机及其他各部分电路开始工作,单片机调用内部存储数据对各部分接口电路初始化。200ms后LM4229进入欢迎界面,如图5-1所示。

图5-1 电子秤欢迎界面仿真

5.2 无重物情况仿真

欢迎界面过后,电子秤进入称重界面。此时,ADC0832不断对外部数据进行采样交给单片机进行处理,一旦有物品放入载物台,ADC0832立即发送中断请求,并将本次采集数据交给单片机进行处理。调节压力传感模拟电路电压,将电压设为0.00表示此时载物台上没有物体。此时LM4229显示指示“实用电子秤,名称······单价:0.000元/千克,总重量:0.000千克,总价:00.000元”。如图5-2所示。

图5-2 无重物称重界面仿真

5.3 称量物体仿真

上调压力传感电压,表示已有商品放在载物台上,ADC0832立即发送中断请求,并将本次采集的数据交给单片机进行处理,之后送入LM4229显示相应数据量。在此过程中,键盘不断进行扫描,一旦有键按下,单片机便对其数据进行相应处理,然后将对LM4229进行写操作。此时,按下键盘,选择相应的商品。如按下3号键,选择草莓,此时LM4229上显示“名称:草莓,单价:3.6元/千克,总重量:2.499千克,总价:“8.999元”(实际3.6×2.499=8.999元)。达到基本要求。如图5-3所示。当要称量下一种不同商品的时候,只需按下0键,选择商品代码,再按下相应商品键。

图5-3 称重情况仿真

5.4 最大量程仿真

将称重传感器调节到最大,显示最大称量,其结果如图5-4所示。由于元件及系统的误差,使得最大量程不能达到预定的5Kg,而是4.980Kg,这是在误差允许范围内的,符合要求。因为本设计添加了超重报警模块,所以在称量的过程中,一旦物体自身的重量超出电子秤的称量范围,蜂鸣器立即会发出“滴滴····”,警报声告诉工作人员,所称量物品超重。

图5-4 最大量程仿真

5.5 仿真总结与问题补充

5.5.1 仿真总结

以上,我们进行了几种基本情况的仿真,总结仿真的过程,我们可以得出以下结论:

1、该电子秤设计简单,操作方便,可以很容易的进行称量;

2、由于元件设置的原因,使电子秤的量程未达到预设的范围;

3、各商品的价格已在程序中设定好,既给称量带来了方便,也带来了麻烦,使得称量其他物品时需要修改程序。

5.5.2 问题补充

因为本设计采用软件仿真的方法,而不能进行实际的称量,所以采用了直接输入电压信号的方式代替了传感器采集的信号。但是经传感器采集的信号通常很小,需要通过前端信号处理电路进行准确的线性放大。放大后的模拟电压信号经过滤波电路和A/D转换电路转换成数字信号才被送入到主控电路的单片机中进行处理。在实际称量中,可以加入放大滤波电路如图5-5所示。

图5-5 放大滤波电路

图5-5为放大滤波电路的设计。放大器采用放大芯片AD620电容C1、C3用来滤除

采样信号电压中的低频噪声,选用22uF的普通独石电容;电容C2、C4用来滤除采样信号电压中的高频噪声,选用0.1uF的普通独石电容。因为采样信号电压值只有毫伏级,所以电阻R1、R2选用较小的阻值,否则导致放大器由于输入电流太小而放大效果不明显。微弱信号Vi1和Vi2被分别放大后从AD620的第6脚输出。

总结与展望

电子称重器是贸易市场中的常见的称重计量仪器。本文先说明了称重器的设计思路,并介绍了几种设计方案,选择了其中一种简单可行的方案。然后从电子秤的核心部件称重传感器的介绍开始,逐个进行各个模块器件的论证与选择。后面详细介绍了电子秤的硬件以及软件设计。

本设计为小量程(0~5Kg)称量器件,可以广泛应用于商店、菜市场等场合。在硬件部分设计过程中选用了A/D转换芯片ADC0832和LM4229液晶显示,大大简化了硬件电路及软件编程,并提高了系统的准确性和稳定性。人机界面部分由液晶显示与4×4位矩阵键盘组成,可以由键盘控制显示商品名称、重量和价格等信息,操作简单方便。软件设计中使用了C语言编程,便于修改和应用。

本次设计的电子称重器还存在一些缺点与不足,主要以下这两点:一是量程仅是5Kg,从而限制了该电子秤的使用范围。可采用大量程的称重传感器,但同时需要提高A/D转换芯片的位数,以保持精度。二是商品的种类与价格已编入程序,给称量其它的商品带来不便。三是本次设计没有完成实物的制作,从而不能预见商业产品开发中的所有问题,需要进一步研究。

通过这次电子秤的设计,我对所学的专业课知识有了更深的理解,尤其是单片机方面。在设计过程中,查阅了大量的中外文资料,解决了不少难题。另外本次设计提升了我分析问题解决问题的能力,增强了对学习的信心,相信这对我以后的工作和学习有重要的帮助。

附录程序

#include #include #include #include #include #define uchar unsigned char #define uint

unsigned int sbit ADCS =P3^5;sbit ADDI =P3^7;

sbit ADDO =P3^7;

sbit ADCLK =P3^6;

uint x1,y1,z1=0,w1;uchar ad_data,k,n,m,e,num,s;

//采样值存储 uint temp1;sbit beep =P3^0;

char press_data;

//标度变换存储单元 float press;unsigned char ad_alarm,temp;

//报警值存储单元unsigned char abc[5]={48,46,48,48,48};unsigned char price_all[6]={48,48,46,48,48,48};float price_unit[10]={5.5,2.8,3.6,4.5,2.4,4.2,3.8,6.0,1.5,0};

//商品初始单价 uchar price_danjia[5]={48,46,48,48,48};float price;uint price_temp1,price_temp2;

//商品总价 uchar Adc0832(unsigned char channel);

void alarm(void);void data_pro(void);void delay(uint k);void keyscan();

void disp_init();void price_jisuan();/************ 主函数

************/ void main(void){

delay(500);

//系统延时500ms启动

//ad_data=0;

//采样值存储单元初始化为0

lcd_init();

//显示初始化

disp_init();

//开始进入欢迎界面

delay(1000);

//延时进入称量画面

clear_lcd(0,4,40);

clear_lcd(16,0,100);

clear_lcd(28,0,40);

clear_lcd(44,0,100);

clear_lcd(56,0,40);

clear_lcd(72,0,100);

clear_lcd(84,0,40);

clear_lcd(100,0,100);

clear_lcd(112,0,40);

write_lcd(0,8,“实用电子秤”);

while(1)

{

ad_data =Adc0832(0);

//采样值存储单元初始化为0

alarm();

data_pro();//读取重量

keyscan();//查询商品种类

write_lcd(40,0,“------------------------------”);

write_lcd(56,0,“单 价:”);

write_lcd(56,11,price_danjia);

write_lcd(56,20,“元/千克”);

write_lcd(72,0,“总重量:”);

write_lcd(72,11,abc);

write_lcd(72,20,“千克”);

write_lcd(88,0,“总 价:”);

price_jisuan();

//计算出价格

write_lcd(88,10,price_all);

write_lcd(88,20,“元”);

write_lcd(112,0,“设计学生:1210401038 谢玉夏”);} } /************ 读ADC0832函数 ************/

//采集并返回

uchar Adc0832(unsigned char channel)

//AD转换,返回结果 {

uchar i=0;

uchar j;

uint dat=0;

uchar ndat=0;

if(channel==0)channel=2;

if(channel==1)channel=3;

ADDI=1;

_nop_();

_nop_();

ADCS=0;//拉低CS端

_nop_();

_nop_();

ADCLK=1;//拉高CLK端

_nop_();

_nop_();

ADCLK=0;//拉低CLK端,形成下降沿1

_nop_();

_nop_();

ADCLK=1;//拉高CLK端

ADDI=channel&0x1;

_nop_();

_nop_();

ADCLK=0;//拉低CLK端,形成下降沿2

_nop_();

_nop_();

ADCLK=1;//拉高CLK端

ADDI=(channel>>1)&0x1;

_nop_();

_nop_();

ADCLK=0;//拉低CLK端,形成下降沿3

ADDI=1;//控制命令结束

_nop_();

_nop_();

dat=0;

for(i=0;i<8;i++)

{

dat|=ADDO;//收数据

ADCLK=1;

_nop_();

_nop_();

ADCLK=0;//形成一次时钟脉冲

_nop_();

_nop_();

dat<<=1;

if(i==7)dat|=ADDO;

}

for(i=0;i<8;i++)

{

j=0;

j=j|ADDO;//收数据

ADCLK=1;

_nop_();

_nop_();

ADCLK=0;//形成一次时钟脉冲

_nop_();

_nop_();

j=j<<7;

ndat=ndat|j;

if(i<7)ndat>>=1;

}

ADCS=1;//拉搞CS端

ADCLK=0;//拉低CLK端

ADDO=1;//拉高数据端,回到初始状态

dat<<=8;

dat|=ndat;

return(dat);

//return ad k

}

void data_pro(void){

unsigned int;

if(0

{

int vary=ad_data;

press=(0.019531*vary);

temp1=(int)(press*1000);

//放大1000倍,便于后面的计算

abc[0]=temp1/1000+48;

//取压力值百位

abc[1]=46;

abc[2]=(temp1%1000)/100+48;

//取压力值十位

abc[3]=((temp1%1000)%100)/10+48;

//取压力值个位

abc[4]=((temp1%1000)%100)%10+48;//取压力值十分位

}

} /*****************报警子函数*******************/

void alarm(void){

if(ad_data>=256)

beep=0;

//则启动报警

else

beep=1;

}

void delay(uint k){

uint i,j;

for(i=0;i

for(j=0;j<100;j++);}

//开机欢迎界面 void disp_init(){

write_lcd(0,8,“欢迎使用电子秤”);

write_lcd(16,0,“------------------------------”);

write_lcd(28,0,“设计学生:谢玉夏”);

write_lcd(44,0,“------------------------------”);

write_lcd(56,0,“班级学号:1210401038”);

write_lcd(72,0,“------------------------------”);

write_lcd(84,0,“指导老师:刘志芳”);

write_lcd(100,0,“------------------------------”);

write_lcd(112,0,“设计日期:2014年12月”);

}

//键盘服务程序 void keyscan(){

P1=0xfe;

temp=P1;

temp=temp&0xf0;

while(temp!=0xf0)

{

delay(5);

temp=P1;

temp=temp&0xf0;

while(temp!=0xf0)

{

temp=P1;

switch(temp)

{

case 0xee:num=1,price=price_unit[0], write_lcd(24,0,“名

break;case 0xde:num=2,price=price_unit[1],write_lcd(24,0,”名

break;case 0xbe:num=3,price=price_unit[2],write_lcd(24,0,“名

break;case 0x7e:num=4,price=price_unit[3],write_lcd(24,0,”名

break;

}

while(temp!=0xf0)

{

称:

杏称:

李 称:

草 称:

仁“);子”);莓“);萄”);

temp=P1;

temp=temp&0xf0;

}

}

}

P1=0xfd;

temp=P1;

temp=temp&0xf0;

while(temp!=0xf0)

{

delay(5);

temp=P1;

temp=temp&0xf0;

while(temp!=0xf0)

{

temp=P1;

switch(temp)

{ case 0xed:num=5,price=price_unit[4],write_lcd(24,0,“名

break;case 0xdd:num=6,price=price_unit[5],write_lcd(24,0,”名

break;case 0xbd:num=7,price=price_unit[6],write_lcd(24,0,“名

break;case 0x7d:num=8,price=price_unit[7],write_lcd(24,0,”名

break;

}

while(temp!=0xf0)

{

temp=P1;

temp=temp&0xf0;

}

}

}

P1=0xfb;

temp=P1;

temp=temp&0xf0;

称:

西称:

苹称:

雪称:

注:本文为网友上传,旨在传播知识,不代表本站观点,与本站立场无关。若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:iwenmi@163.com

上一篇:公务员面试十大禁忌下一篇:实训报告参考样例

付费复制
文书易10年专业运营,值得您的信赖

限时特价:7.9元/篇

原价:20元
微信支付
已付款请点这里联系客服
欢迎使用微信支付
扫一扫微信支付
微信支付:
支付成功
已获得文章复制权限
确定
常见问题