毕业论文-基于单片机的身高体重测量仪设计内容摘要:
void main(void) { lcdreset()。 //初始化液晶屏 system_init()。 //初始化串口 定时器 clrscreen()。 //清屏 while(1) //循环 { switch(pattern) //状态查询 { //正常测量模式 case 1: if(Key_Scan(2)||weight4000)//人体秤校准 Correct_w++。 if(Key_Scan(3)) Correct_w。 if(Key_Scan(1)) //发送键按下 { beep=0。 //开蜂鸣器提示 Number++。 //编号加 1 for(i=0。 i4。 i++) //发送数据到上位 机 { SBUF=Number_data[i]。 while(!TI)。 TI=0。 } beep=1。 //关蜂鸣器提示音 } if(Key_Scan(4)) //”保持“按键按下 pattern=2。 //状态变量变为保持状态 weight = Read_Count()。 //读取体重值 hzkdis(p)。 //显示体重值 height = sonic()。 //读取身高值 hzkdis(p)。 //显示身高值 break。 case 2: //保持状态 if(Key_Scan(4)) //“保持”键按下 pattern=1。 //状态变量变为正常 状态 break。 default: break。 } } } 郑州铁路职业技术学院 2020 届自考本科生毕 业论文(设计) 13 系统初始化函数的编写 本设计中因为超声波模块需要用定时器来测量超声波脉冲的传播时间,另外系统工作时需要向上位机发送数据,所以在程序开始时需先初始化单片机定时器和串行端口相应的寄存器 [12]。 系统的初始化程序如下: void system_init(void) { SM0=0。 //设置串口工作模式 SM1=1。 TMOD = 0x21。 //设置定时器工作模式 TH1=0xfd。 //设置波特率为 9600 TR1=1。 //开定时器 1 } HX711 AD 转换器通信函数的编写 HX711 AD 转换芯片的串行通讯线由管脚 SCK 和 DT 组成, DT 为数据线, SCK 用于时钟信号的输入和选择输入通道和增益的大小。 当 HX711 芯片数据输出管脚 DT输出高电平时,表示 AD 转换器还没有准备好输出数据,此时时钟输入信号 SCK 应为低电平。 当 DT 变为低电平后,表示 AD 转换器准备好输出数据,这时 SCK 应输入 25 到 27 个不等的时钟脉冲。 第一个时钟脉冲的上升沿后可读取输出 24 位数据的最高位,直至第 24 个时钟脉 冲完成,24 位输出数据从最高位至最低位逐位输出完成。 第 25 到 27个时钟脉冲用来选择下一次转换的输入通道和增益。 本设计使用 AD 转换器的 A 通道,增益为 128,所以输入 25 个时钟脉冲 [11]。 HX711 AD 转换器芯片的读写时序如图 43所示。 图 43 HX711 读写时序 郑州铁路职业技术学院 2020 届自考本科生毕 业论文(设计) 14 HX711 AD 转换芯片通信函数: unsigned long Read_Count(void) { unsigned long Count。 unsigned char i。 ADSK=0。 //先将 时钟线拉低 Count=0。 //将存储转换值的中间变量清零 while(ADDO)。 //等待 HX711 准备好输出数据 for(i=0。 i24。 i++) //逐位读取 24 位 AD 转换器转换好的值 { ADSK=1。 //时钟线拉高 Count=Count1。 //变量左移一位 ADSK=0。 //信号线拉低 if(ADDO) //数据输入为高电平 { Count++。 //最低位置一 } } ADSK=1。 //时钟线拉高 Count=Count^0x800000。 //最高位取反 ADSK=0。 //信号线拉低 Count=Count*。 //转为实际的重量值 Count=Correct_wCount。 //调零 return(Count)。 //重量值返回 } 按键检测函数的编写 在本文 节可知,按键的检测主要是检测单片机 IO 是否出现低电平。 本设计中将所 有按键的检测写在了一个函数中,函数的参数为要检测的按键的编号,返回值为真( 1)时说明相应的按键按下,返回值为假( 0)时则说明按键没有按下。 在理想情况下若单片机的 IO 口出现低电平即可认为是对应的按键按下,但在实际情况下由于按键在闭合和断开的瞬间触点会存在抖动现象,所以按键所连接的 IO 口上就会出现一些杂波信号造成单片机的检测错误,如图 44 所示。 另外主程序中对按键的检测是循环进行的,若按键按下的时间较长会造成单片机多次检测到按键按下的情况从而造成程序的混乱 [13]。 本设计在按键按下后以及松手后的瞬间加入了一个 短时间的延时函数来滤除这段时间内的杂波信号,该滤波程序对高频杂波信号的滤除具有很好的效果,另外通过在程序中加入松手检测有效的避免了单片机多次检测的情况。 郑州铁路职业技术学院 2020 届自考本科生毕 业论文(设计) 15 图 44 按键的抖动 按键检测函数: unsigned char Key_Scan(unsigned char key_num) { switch(key_num) //key_num 为选择要检测的按键 { case 1: //第一个按键 if(key1==0) //第一个按键按下 { delay_ms(5)。 //延时滤波 if(key1==0) //滤波后再次检测 { while(!key1)。 //松手检测 return 1。 //认为按键按下 返回值为真 1 } else { return 0。 //若滤波后检测没有按下判断为杂波 返回 0 } } else { return 0。 //若第一个按键没有按下 返回 0 } break。 default: break。 } } 郑州铁路职业技术学院 2020 届自考本科生毕 业论文(设计) 16 超声波模块函数的编写 超声波模块的控制端口 Trig 产生一个 10us以上的高电平该模块内部将自动发出 8 个周期频率为 40KHz 的超声波脉冲信号。 信号发出后超声波模块将自动检测超声波回波信号,若检测到超声波回波信号超声波模块的 Echo 引脚变为低电平。 若在超声波脉冲发射后打开单片机的定时器开始计时收到超声波回波信号后关闭定时器那么定时间即为超声波脉冲在空气中的传播时间,通过公式:测量距离 =(传播时间 *声速 (340m/s))/2 即可算出传播距离。 如图 45 为 超声波模 块时序 图。 图 45 超声波模块时序 图 读取距离的函数: int sonic(void) { unsigned int n。 RX=1。 //将 RX(接收引脚 )置为高电平 TR0=0。 //定时器 0 关闭 TH0=TL0=0。 //定时器清零 Pulse()。 //发射超神波脉冲信号 TR0=1。 //定时器开始计时 TF0=0。 //定时器溢出标志位置零 for(n=0。 n70。 n++)。 //延时 while( RX ==1 amp。 amp。 TF0 == 0 )。 //等待收到回波信号或定时器溢出 TR0=0。 //关定时器停止计时 if(TFO) //定时器溢出则判断为无信号返回 n=999。 //无信号返回时把距离值赋为 999cm else //定时器没有溢出 计算传播距离 { 郑州铁路职业技术学院 2020 届自考本科生毕 业论文(设计) 17 n=(TH08)+TL0。 //整合定时时间 n=(unsigned int)( n*)。 //换算为实际距离 n=n3。 //减去承重板到地面距离 } return n。 //返回高度值 } 液晶屏驱动函数的编写 单片机与液晶间的通信 主要有三种情况即写数据、写命令、读状态。 写数据的作用是将想要显示的字符、汉字写入液晶进行显示。 写命令的作用是向液晶屏幕发送各种指令如设置显示坐标、清屏、设置游标等。 读状态操作的作用是查看液晶的状态,液晶屏幕在接受指令前,单片机需要先确认液晶屏幕内部处于非忙碌状态,即读取 BF 标志时 BF需为 0,方可接受新的指令。 液晶的这三种操作是由 RS 和 RW 引脚决定的。 液晶的读写时序如图461和 462 所示。 写数据:输入: RS=H,RW=L,D0D7=数据 ,E=H 输出:无 写命令:输入: RS=L,RW=L,D0D7=数据 ,E=H 输出:无 图 461 液晶的写操作 void write_(unsigned char cmdcode) { chk_busy()。 //检查是否可以接收指令 RS=0。 //RS 为指令 /数据选择信号,写命令 RS=0 RW=0。 //RW 为读写选择信号 写命令 RW=0 E=1。 //液晶使能 Lcd_Bus=cmdcode。 //将命令送到数据总线 delay(5)。 //在数据写入的时候加入适当的延时 E=0。 //禁止使能 delay(5)。 //延时 } 郑州铁路职业技术学院 2020 届自考本科生毕 业论文(设计) 18 void write_data(unsigned char Dispdata) //写数据到 LCD { chk_busy()。 //检查是否可以接收指令 RS=1。 //RS 为指令 /数据选择信号 写数据 RS=1 RW=0。 //RW 为读写选择信号 写数据 RW=0 E=1。 //液晶 使能 Lcd_Bus=Dispdata。 //将数据送到数据总线 delay(5)。 //在数据写入的时候加入适当的延时 E=0。 //禁止使能 delay(5)。 //延时 } 读状态:输入: RS=L,RW=H,E=H 输出: DOD7=状态字 图 462 液晶的读操作 忙位检查函数: void chk_busy(void) { RS=0。毕业论文-基于单片机的身高体重测量仪设计
相关推荐
SspI, StuI, StyI and XbaI)消化双亲型 LDN(DIC6B) 和 LDN 的基因,并用 Southern 印迹映射组成 DNA 的RFLP。 比较绘图 使用下面的方法,鉴定了来自 64kb 共线性水稻序列的水稻基因和他们的小麦纯合子,预测开放阅读框 (ORFs),从 TIGR automatic annotation ( 和 Gramene ( //内含子界限。
Java 作为编写程序的一部分。 另外,为了推广此技术, Google 和其它几十个手机公司建立了开放手机联盟。 Android 在未公开之前常被传闻为 Google 电话或 gPhone。 大多传闻认为 Google 开发的是自己的手机电话产品,而不是一套软件平台。 到了 2020 年 1 月, Google开始发表自家品牌手机电话的 Nexus One。 目前最新 SDK 版本为
cutoff or cut off the input power. G、 Overtemperature protection Switching regulator and the high level of integration of lightweight small volume, with its unit volume greatly increased the power
办公室助理实习报告 2020年 7 月 13日,我正式加入社会大家庭,于谷林电器(深圳)有限公司担任其一部门的课长助理。 作为课长助理,我主要负责的职务是 公文的写作、接受、传达、对一些相关客诉的安排处理及课长指示的传达。 公司名义上报下发的有关文件、来往函信件等,把工作做的更加系统、全面并对过程给予详细记载,在方便回查的同时更避免了错误的发生。 有时候,对于客户电话投诉的一些简单问题的解答
m 6X4NGpP$vSTTamp。 ksv*3tnGK8! z89Am YWv*3tnGK8! z89Am YWpazadNuKNamp。 MuWFA5uxY7JnD6YWRr Wwc^vR9CpbK!zn%Mz849Gx^Gj qv^$U*3tnGK8! z89Am YWpazadNuKNamp。 MuWFA5uxY7JnD6YWRr Wwc^vR9CpbK!zn%Mz849Gx^Gj
如有同学没有签订全国高校统一协议书,想把档案转寄某地,可以凭人事部门或人才服务中心的档案接受函可从学校转出。 —— 建议此处由人事局或省属企业填写,学生本人不需要在此处填写。 6.用人单位意见:用人单位人事主管意见,加盖单位公章 7.用人单位上级主管部门意见: “用人单位主管部门”是指省级单位、高等学校、中央在浙直属单位人事处,各市县人事局。 没有档案管理权限的用人单