智能压力测量仪课程设计说明书(编辑修改稿)内容摘要:

X D11P 3 .2 /I NT 012P 3 .3 /I NT 113P 3 .4 /T 014P 3 .7 /R D17P 3 .6 /W R16P 3 .5 /T 115P 2 .7 /A 1 528P 2 .0 /A 821P 2 .1 /A 922P 2 .2 /A 1 023P 2 .3 /A 1 124P 2 .4 /A 1 225P 2 .5 /A 1 326P 2 .6 /A 1 427U1A T 8 9 C5 11 2U 2 :A7 4 HC 0 4CE7RD6C/D8VSS2VDD3CON4WR5D011FS119FG1D112D213D314D415D516D617D718RST10L C D 1P G 1 6 0 1 2 8 AWRRDCDWRRDCDCSVDDC12 0 p FC22 0 p FC31 0 u FX1R11 0 kCS1CH 02CH 13G ND4V C C8CL K7DI5DO6U4A DC 0 8 3 2CS1 8 9 .03 4 5 621M2M P X 4 2 5 0+ 5 .1 VC50 .0 1 uC61uC74 7 0 p+ 8 8 .8V o l t s有效范围 0 2 5 0 ,超过此范围时显示为 250 图 51 原理图的绘制 绘制完原理图之后,对原理图进行编译检测, ERC 检测结果。 在 PROTEL99SE 生成 PCB 图 在创建完原理图后,对各元器件的引脚进行封装,在原理图中创建网络表 (NET),然后再 PROTEL99S 中新建 PCB ,对于 生成的 PCB 图中各器件进行调整,并布线,最终生 成PCB 图。 结果如图 52 所示 14 图 52 生成 PCB 图 Keil 程序调试 程序调试结果 如下 所示: creating hex file from 压力检测系统 ... 压力检测系统 0 Error(s), 0 Warning(s). Proteus 仿真调试 在 Proteus 中建立仿真图。 按下开始仿真按钮,开始进行仿真实验,结果如图 54,图 55,图 56 所示: 15 图 54 Proteus 仿真图 16 图 55 Proteus 仿真图 17 图 56 Proteus 仿真图 仿真电路图中实现对压力检测的控制,输出到 PG160128A 显示。 结 论 通过 MPX4250 检测到 压力信号,转换为电压值,然后通过 ADC0832 转换后产生一个数字信号输入到 AT89C51 单片机中进行处理,再通过单片机驱动 PG160128A 显示压力的相关信息。 由于显示程序的复杂性,所以选用了 C 语言作为开放程序加快了开发进度。 本次设计由于时间较为仓促,难免考虑不周全,还有许多功能需要完善,这需要下来再去深究。 在本次课程设计里面,我把电路和单片机必备的一些基本操作技能再次熟悉了一遍。 18 对于压力检测,我只进行了最简单的程序编写和仿真,而往往在实际中是作 为一个系统中的很小子环节来进行应用的,所以还需要我进一步学习更多的单片机及相关测试传感器知识。 致谢 本课题在选题及进行过程中得到 宋 老师的悉心指导。 论文行文过程中, 宋 老师多次帮助我分析思路,开拓视角,在我遇到困难想放弃的时候给予我最大的支持和鼓励。 宋 老师严谨求实的治学态度,踏实坚韧的工作精神,将使我终生受益。 再多华丽的言语也 显得苍白。 在此,谨向 宋 老师致以诚挚的谢意和崇高的敬意。 参考文献 [ 1] 谭浩强 .C程序设计(第三版) [ M] .北京 .清华大学出版社 .2020( 2020重印) [ 2] 张毅刚,彭喜元等 . MCS51单片机应用设计(第 3版) [ M] .哈尔滨 .哈尔滨工业大学出版社 .2020. [ 3]徐琤颖 .Protel99SE EDA技术及应用 .[ M] .北京 .机械工业出版社 . [ 4]古辉,刘均等 .微型计算机接口及控制技术 .[ M] .北京 .机械工业出版社 . 附录一 程序源代码 //名称: 160128 液晶显示当前压力 19 include include include include include include include define HZ_CHR_HEIGHT 12 define HZ_CHR_WIDTH 12 include include define uchar unsigned char define uint unsigned int extern char fnLCMInit()。 //LCD 初始化 extern void fnSetPos(unsigned char urow,unsigned char ucol)。 //设置当前地址 extern uchar dprintf(uchar x,uchar y,char *fmt)。 //ASCII(8*16)及汉字( 16*16)显示函数 sbit CS=P3^4。 sbit CLK=P3^2。 sbit DI0=P3^3。 uint theLastTime。 //一次鸣响持续次数 unsigned char dsp[4]。 //作为压力存储传入函数显示 uchar Get_AD_Result() {uchar i,dat1=0,dat2=0。 CS = 0。 20 CLK=0。 //起始控制位 DI0 = 1。 _nop_()。 _nop_()。 CS = 0。 _nop_()。 _nop_()。 CLK = 1。 _nop_()。 _nop_()。 //第一个下降沿之前,设 DI = 1 / 0 //选择单端 /差分( SGL/DIF)模式中的单端输入模式 CLK = 0。 DI0 = 1。 _nop_()。 _nop_()。 CLK = 1。 _nop_()。 _nop_()。 //第二个下降沿之前,设 DI = 0 / 1,选择 CH0/CH1 CLK = 0。 DI0 = 0。 _nop_()。 _nop_()。 CLK = 1。 DI0 = 1。 _nop_()。 _nop_()。 //第三个下降沿之前,设 DI = 1 CLK = 0。 DI0 = 1。 _nop_()。 _nop_()。 //第 411 个下降沿读数据( MSBLSB) for(i=0。 i8。 i++) { CLK = 1。 _nop_()。 _nop_()。 CLK = 0。 _nop_()。 _nop_()。 dat1 = dat1 1 | DI0。 } for(i=0。 i8。 i++) {dat2 = dat2 | ((uchar)(DI0)i)。 CLK = 1。 _nop_()。 _nop_()。 CLK = 0。 _nop_()。 _nop_()。 } CS = 1。 return (dat1 == dat2) ? dat1:0。 } unsigned char dsp[4]。 //作为压力存储传入函数显示 void delay() //蜂鸣器鸣响间隔延时 { uint i, j = 200。 while(j) 21 {for (i = 0。 i = 500。 i++)。 } } void main() { uchar AD_Result。 //获取的 AD 值 float ad=0。 //当前压力值 float Y1,Y2,dY。 //限幅滤波 dY=2。 //定时器初始化 fnLCMInit()。 fnSetPos(0,0)。 dprintf(30,12,液晶屏显示当前压力 )。 dprintf(110,58,千帕 )。 AD_Result=Get_AD_Result()。 Y1=(AD_Result*)/。 while(1) { AD_Result=Get_AD_Result()。 Y1=(AD_Result*)/。 if(abs(Y2Y1)=dY)//变化不能太快,否则会失效 { ad=Y2。 Y1=Y2。 } else 22 { ad=Y1。 } sprintf(dsp,%,ad)。 dprintf(82,58,dsp)。 } } //LCD 显示控制程序 define ASC_CHR_WIDTH 8 define ASC_CHR_HEIGHT 12 //数字字符点阵库,粗体初号, 32*64 点阵, 32/8=4,每个数字需要 4*。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。