《2015_工程测控设计报告_数字时钟_涡流称重》由会员分享,可在线阅读,更多相关《2015_工程测控设计报告_数字时钟_涡流称重(35页珍藏版)》请在金锄头文库上搜索。
1、下载可编辑工程测控设计报告班级:电子121班 姓名:马明杰学号:122121分组序号:A15 同组人:焦亚男 1221001、课程设计目的及要求(1)、课程设计的目的1、掌握元器件及芯片的焊接与调试;2、 了解基于51单片机的软件钟的工作原理;3、 会用C语言编写时钟函数,复习用switch语句和do-while语句、for语句实现循环的方法;4、 会使用MEDWIN编译调试程序,并生成HEX,通过数据线下载到电路板上;5、 根据自己焊接的板子在程序中设置按键控制时钟的调整。(2)、课程设计的要求软件时钟的设计要求:使用中需要对时钟进行调整。在调整的时候需要一个按键来进入调整状态。进入调整状态
2、以后需要一个按键来向左移动调整位置,一个按键来向右移动调整位置,一个按键来增加所选位置的数值,一个按键来减小所选位置的数值。调整完成以后还需要一个按键来 退出调整位置,恢复时钟的计数运转。以上所需按键可以根据需要合并。在调整中另外一个需要注意的问题是如何显示目前所选定调整的位置(如秒的个位或者十位,分的个位或者十位等)。可以采用是否显示数位右下的小数点或者所选需调整位是否闪烁来让操作者明确目前自己所选定的需要调整的数位。本小组最终实现用第一个按键进入调整状态,并进行循环左移,用第二个按键实现在软件时钟以及涡流称重计两种模式之间的切换,第三个按键实现时钟设置时加法,第四个按键退出调整状态,并采用
3、显示数位右下的小数点来显示当前要调整的位。涡流称重计的设计要求:使用时用2V的电压来表示200g的重量,使用通道O来输入模拟量。用按键2实现涡流称重计在两个不同函数之间的切换。光电转速计的设计要求:本实验要求编写程序实现当板子上的P3.5引脚接光电转速计时,在数码管上的后三位显示转速,单位为转/分,前三位显示脉冲频率,单位是脉冲/秒。2、硬件电路的原理框图(1)、软件时钟的硬件电路原理图显示电路电源及功能指示电路 单片机外围电路(复位电路、时钟电路) 按键控制电路 数码管驱动电路 4个按键的地址从左至右依次为:0xe0、0xd0、0xb0、0xff(2)、涡流称重计原理图3、软件设计(1)、软
4、件时钟的软件设计算法的原理概述所谓软件时钟就是利用51单片机制作一个电子时钟。其算法就是以单片机的时钟为基准,记录单片机时钟脉冲的数量,当数量足够多(如脉冲为每秒12Mhz,那么记录12M个脉冲所需时间即为1秒)就可以将显示部分的“秒”位加一。加到60以后进位为“分”,“秒”位清零以后继续记录。当“分”累加为60以后进位为“时”,“分”位清零以后继续记录,当“时”位为24以后,“时”位清零并继续记录。程序流程图见图3-1源程序见本报告最后附加页文档。(2)、涡流称重计的软件设计算法的原理概述本项设计中用电位器的中间抽头所输出的电压模拟采集的重量数据,单片机经ADC0832的通道0输入该电压信号
5、,并将其转换为数字信息送6位共阳8段LED显示。程序流程图见图3-2源程序见本报告最后附加页文档。(3)、光电转速计的软件设计算法的原理概述数字频率计是直接用十进制数字来显示被测信号频率的一种测量装置。它不仅可以测量正弦波,方波,三角波和尖脉冲信号的频率,而且还可以测量他们的周期。数字频率计在测量其他物理量如转速、振荡频率等方面获得广泛应用。所谓频率,就是周期性信号在单位时间(1s)里变化的次数。若在一定时间间隔T内测得的这个周期性信号的重复变化次数N,则其频率可表示为f =N/T,一般为简单起见我们通常选择测量间隔为1秒(即T1),这样1秒内信号重复变化的次数就是信号的频率1秒的计数周期要采
6、用单片机本身的时钟脉冲来计算,在1秒的时间内,记录的外部脉冲的数量就是外部信号的频率。所以一共需要2个计数过程,一个是记录单片机本身时钟脉冲的个数以准确划定1秒的时间,一个是记录外部脉冲的个数,以准确记录外部信号的频率。因为显示的数码管数量有限,所以在编写程序时要注意采用小数点所在的位置来表示频率单位程序流程图见图3-3源程序见本报告最后附加页文档。图3-3图3-2图3-14、检测装置的使用方法(1)、软件时钟按按键1进入设置状态并进行移位,按键2减,按键3加,按键4退出,调整时间为23:59:57,若三秒后变为00:00:00,则装置没有问题。(2)、涡流称重计按按键2切换测量函数,测量值与
7、相应函数线的理论值进行比较,若误差在允许范围内,则装置没有问题。(3)、光电转速计将单片机P3.5脚接频率发生器正极,40脚接负极,调整频率发生器为方波,频率150HZ,幅值4V,看数码管显示值是否正确。然后将其接入光脉冲上并用数字示波器对脉冲频率进行测量,调整转速在1000以内,查看数码管值转速值是否正确,并与数字示波器的频率值进行比较,查看大小是否相同,若均相同,则装置没有问题。5、测试结果分析(1)、软件时钟本实验共设置了5个按钮,按键1设置小数点到达哪位数码管的值,按键2减小设置位的值,按键3增加设置位的值,到达23:59:59后数据清零为00:00:00,按键1按下后进入设置状态,按
8、键5是复位按键。(2) 、涡流称重计通过从电位器中调出一部分电压,并将其进行A/D转换,将模拟量转换为数字量,显示高三位数码管,测量值显示在低三位数码管,我们组测的最高值为1.96v 199g,超过此数,后三位数码管显示“EOR”。测试数据表格:测试值函数1测试结果函数2测试结果0.50.49 0000.49 0001.00.98 0670.98 0991.51.49 1331.49 1672.01.96 1991.96 1992.52.49 3492.49 349(3)、光电转速计STC89C52芯片的P3.5引脚实现的是计数功能,将P3.5引脚转速测量仪的正极接,芯片的40引脚与转速测量仪
9、的负极接,板子通电后,即为显示的频率值。6、遇到的问题与解决办法。(1) 遇到的问题:焊接完成后连接电源,状态指示灯不亮; 解决办法:利用万用表测试焊接板的各点,检测电路的问题。经查状态指示灯所用二极管损坏,更换后,状态指示灯正常工作。(2)遇到的问题:下载电路测试程序(数码管显示程序)后,按下按键K1第一位数码管不亮; 解决办法:经检查使用数码管应为共阴数码管,而实际使用的数码管为共阳数码管,更换数码管之后问题解决。(3) 遇到的问题:涡流称重中单片机测量的电压,始终是万用表测量值的1/2; 解决办法:认真检查AD转换中数字量读取的程序,并和所给ADC0832时序图相比较,发现在读取数据时少
10、读了一位数据,因此造成所得数字量向左少移一位,更改程序后问题解决。(4) 遇到的问题:在涡流称重状态下,数码管显示不稳定,尤其是电压和重量的最低位跳变迅速引起串红,读数困难。 解决办法:经老师指导,将显示缓存的赋值改为每0.5秒一次,这样数码管的显示至少需要0.5秒才会改变一次,从而消除了跳变太快导致的读数困难。1. 焊接、设计、调试心得体会。通过此次课程设计再次熟悉并提高了自己的焊接技术,巩固并加强了51单片机C语言程序设计能力,深切体会到了51单片机在开发过程中利用keil编辑软件调试程序的重要性,开发过程要一步步进行,完成一部分功能之后再进行下一功能的开发,最后将程序整合到一起实现所有功
11、能,否则排查错误会十分困难。焊接要按一定的步骤进行,焊接之前先要对元件进行检查,元件能否正常工作、焊接位置是否对应等。然后将焊接模块和独立元件顺序排好依次焊接,例如首先焊接布局紧密部分中的小部件,然后再焊接较大的元件。焊接要完成一个功能模块的焊接,再焊接下一个功能模块,这样也有助于加强对电路的认识。在进行软件开发时,编写流程图有助于结构化编程,使得编程思路更加清晰。编程要化整为零,将一个大功能分解成诸多子功能、子函数,这样有利于提高代码的可读性和重用性。在开发调试过程中,要分别对每个函数进行调试和验证,例如显示子函数、按键子函数、时间调整子函数等,各各功能完成之后再将他们组合,这有利于细化步骤
12、和检查错误。通过此次完整的课程设计,对系统的开发流程,软件的开发步骤等有了清晰的认识,锻炼了动手能力。但这过程中依然暴露出许多问题,例如编程还不十分规范、排查问题的能力还有待提高等。发现自己的不足就要及时的进行补强,在进行理论学习的同时要多多动手实践,要学以致用。在理论学习过程中不忘实践,在实践过程中深化对理论的理解,这样才能达到学习的真是目的和效果。附加内容1:软件时钟/*注:按键抬手时瞬间显示*/#include /定义8052的特殊功能寄存器、中断#include /绝对地址函数#include /字符串函数#include /标准i/o函数#include /内部函数#include
13、/数学函数#define uint unsigned int /定义uint代替unsigned int #define uchar unsigned char /定义uchar代替unsigned char#define ulong unsigned long /定义ulong 代替 unsigned long /void display(void); /六位数码管显示程序void initsiu(void); /初始化单片机void delay(void); /延时程序void delay1ms(unsigned int i);void delay500us();uchar inkey(v
14、oid); /键盘输入程序void timeset();void DisplaySecond(unsigned char s);void DisplayMinute(unsigned char m);void DisplayHour(unsigned char h);uchar code seg=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f; /显示缓存数码管 / 0 1 2 3 4 5 6 7 8 9 uchar int_time ; /中断次数计数变量char second; /秒计数变量char minute; /分钟计数变量char hour; /小时计数变量uchar keyscan;char set=0;/ timesetchar add=0;/ timesetchar swee=0;sbit