基于51单片机压力检测系统设计 - 图文(6)

2019-08-30 21:37

xx本科生毕业设计(论文)

的一点就是效率优化的可操作性。由于C语言在编译器的支持下编译链接生成汇编文件,所以在性能优化方面完全受制于编译器,从C语言层面上几乎无法做任何优化。而直接使用汇编语言编写程序,在汇编级别上,具体执行哪条汇编指令,具体使用哪个寄存器完全是透明的,所以在性能要求特别高的场合下,如果有丰富的汇编经验,一般都是使用汇编语言编写单片机程序。

为了克服C语言编程及汇编语言编程各自的缺点,混合编程方式完美的结合了两者的优点,做到了优势互补。通常单片机很合编程技术是,程序的框架或主体部分用C语言编写,对于那些使用频率高、要求执行效率高、延时精确的部分用汇编语言编写[9],这样既保证了整个程序的可读性,又保证了单片机应用系统的性能。

由于本系统对于性能的要求一般,所以采用C语言方式编写单片机程序。通过对编译选项的设置,Keil软件可以在编译链接后自动生成HEX16进制文件,方便单片机程序的直接烧写。 4.2 I/O端口分配

STC89C51RC共有40只引脚,P0~P3四个引脚组各有8只引脚。对于本系统而言,引脚数量还是够用的[10]。引脚功能分配如下:

? P20~P27和P16、P17接于LCD中液晶与单片机的控制端口和字库与单片机的控制

端口。 ? P34~P37和P13是用于4*3矩阵键盘按键。包括功能选择按键,参数设置按键和工

作启停等功能控制。 ? P14,P15 用于接A/D转换芯片HX711数据采集端口,是串行工作方式,所以节省

了很多的IO口的使用。 还有一些单独的接口,比如振荡电路接口,声光报警电路接口和单片机自带的烧录程序串口通讯接口TXD、RXD等。

程序中所有端口定义及功能如下:

sbit A/DDO = P1^5; //串行数据输出端口

sbit A/DSK = P1^4; //断电控制(高电平有效)和串口时钟输入端口 sbit lcd_sclk=P2^3; sbit lcd_sid=P2^4; sbit lcd_reset=P2^ sbit lcd_cs1=P2^ ;

//LCD的sclk接口 //LCD的sid接口 //LCD的reset接口 //LCD的cs1接口

sbit lcd_rs=P2^5; //LCD的rs接口

sbit Rom_IN=P1^7; //字库IC的SI接口 sbit Rom_OUT=P1^6; //字库IC的SO接口 sbit Rom_SCK=P2^0; sbit Rom_CS=P2^1;

//字库IC的SCK接口 /字库IC的CS接口 第 21 页 共 61 页

xx本科生毕业设计(论文)

sbit LedA = P2^2; sbit beep = P1^0; sbit alert = P1^1; sbit ROW1=P3^3; sbit ROW2=P3^2; sbit ROW3=P1^3;

//LCD液晶背光电源接口 //报警电路蜂鸣器接口 //LED发光二极管接口 //矩阵键盘第一行接口 //矩阵键盘第二行接口 //矩阵键盘第三行接口

sbit COL1=P3^4; //矩阵键盘第一列接口 sbit COL2=P3^5; //矩阵键盘第二列接口 sbit COL3=P3^6; //矩阵键盘第三列接口 sbit COL4=P3^7; //矩阵键盘第四列接口 4.3 软件主程序构架

本系统的设计主要由五大模块构成,软件程序主要是实现对这些功能模块的控制,以及最终对数据进行分析计算得出性能测量结果。程序执行时,首先对整个系统进行初始化,这部分包括参数初始化、IO初始化和器件初始化三个操作。参数初始化时对一些全局系统参数进行初始化,保证程序执行的可靠性;IO初始化是将所有IO的电平和功能设置为关闭状态,防止发生误操作;器件初始化是对外围的A/D芯片、模拟开关、LCD进行初始化,保证器件能够正常运行。如果在此过程中发生错误,即调用报警电路进行报警。程序流程图如图4.2所示。

第 22 页 共 61 页

xx本科生毕业设计(论文)

开始LCD初始化开中断定时器初始化压力检测模块调零显示功能界面读取,解析键码执行功能阈值重设读取AD采样模块手动存储数据统计分析历史数据查询更新数据及显示

图4.2 系统主程序构架框图

初始化完毕后,延时等待所有模块准备好,向液晶显示器发送数据,显示初始的人机界面。此时,整个系统可以开始进行数据采集工作,但参数均处于默认状态,如果需要调整,则可以实时通过键盘控制,系统根据读取的键盘键值执行相应的操作,分别是执行修改阈值参数、读取A/D采样值、压力测量、手动存储、超重预警、发出报警信号、查阅历史,数据统计分析等。

等待这部分操作完成后,系统屏幕根据需要实时刷新显示一些数据和状态,显示新的参数或采样信息。 4.4 主要功能子程序的设计

先进行系统的初始化,初始化模块主要对单片机的堆栈指针,中断寄存器,全局变量定义,赋初值和定时器的初始化。定时器主要作为A/D转换时间的设定。然后进行模

第 23 页 共 61 页

xx本科生毕业设计(论文)

数转换,判断是否超过设定阈值,转换压力字符通过液晶显示。参数设定完毕,系统启动数据采集和控制程序,实现压力的实时检测。 4.4.1 A/D子程序设计

通过压力传感器输出后的数据经过信号放大器的处理后,由A/D转换芯片转换为数字信号。其中模拟信号的放大倍数由放大电路控制。在软件方面,单片机通过发送时序命令的方式对A/D芯片进行控制,由于选型的A/D芯片不需要启动命令,即可自动转换。所以在每次采集之前,程序通过延时等待转换完成,然后发送低电平片选信号,将数据读取功能使能,在数据读取的整个过程中保持不变。然后再发送一个时钟读取采样值,并将数据保存到存储器的设定空间,再将存储空间的指针移位。此时,将片选信号置高,等待读取下一组数据,完成其他程序功能。A/D采集部分流程图如图4.3所示:

开始片选输出为低时钟输出置高延时等待时钟输出置低读取数据保存到存储器,数据指针移位片选输出为高结束

图4.3 A/D转换流程图

第 24 页 共 61 页

xx本科生毕业设计(论文)

4.4.2 中断子程序设计

系统的称重间隔为0.5S,每0.5S置标志位,累加器计数满400次则延时时间为0.5S,置称重标志位。中断子程序流程图如下图4.4所示。

时钟中断入口Counter累加≥400Y置称重位N返回

图4.4 中断流程图

4.4.3 查询历史数据子程序设计

预先手动存储八个以内的压力值(超过阈值亦可),当存储第九个数据时,存储的历史数据会自动将第一位存储的数据挤掉,后面存储的数据均依次向前移一位。按上下键进行选择,光标停在查询历史数据功能菜单之前,按确认键确定。调用该子程序,判断是否为0,若不是显示“无历史”;若是则读取显示存储的压力值,并按顺序依次为NO.1~8显示输出。查询历史数据流程图如下图4.5所示。

第 25 页 共 61 页


基于51单片机压力检测系统设计 - 图文(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:廉洁文化进校园活动总结

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: