《智能仪器》课程设计报告_第1页
《智能仪器》课程设计报告_第2页
《智能仪器》课程设计报告_第3页
《智能仪器》课程设计报告_第4页
《智能仪器》课程设计报告_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、智能仪器课程设计报告姓名学号:梁 倩41253027匙沛华41253026胡智凯41253023张爽41253012刘文平41253035专业:测控技术与仪器班级:测控1201、1202北京科技大学自动化学院o一六年一月目录一,课程设计内容简述3二,电路原理图及说明31. 总电路图42. 电位器43. ad转换44. 8051单片机55. 继电器56. 步进电机57. 键盘以及显示6&地址译码插孔6三,程序71. 程序框图及说明72. 程序源程序及注释113. 运行结果(拍图)17四,调试过程遇到的问题及解决方法19五,参考文献20六,教师评语及成绩21智能仪器课程设计报告一,课程设计

2、内容简述设计要求:基于单片机的压力控制系统设计a:由电位器信号模拟压力信号,在led上进行显示;由按键设定压力上、下 限,当压力高于上限时,打开继电器(放气);当压力低于下限时,启动步进电 机(充气)。设计分工:学号姓名分工41253026匙沛华程序设计以及功能调试41253035刘文平程序设计以及文档撰写41253023胡智凯程序设计以及资料查找41253012张爽硬件设计以及原理图绘制41253027梁倩功能调试以及原理图绘制软件接口要求:连线连接孔1连接孔21key/led_cscso2ad_cscs138255_cscs24pao步进电机a项5pai步进电机b项6pa2步进电机c项7p

3、a3步进电机d项8pio继电器输入95v继电器常闭输入10l0继电器屮间输入11ino电位器输出二,电路原理图及说明1. 总电路图tu1壬£ 本压力显示和充放气系统用电位器输出值(0-5v)来模拟(-20-99kpa)压 力值,将电位器的输出值送到模数转换模块进行ad转换,并将转换后的值送到 8051单片机进行计算,转化为相应的压力值,送到led数码管上(前三位)显 示。按键设定压力的上下限,可以在led数码管后三位显示。ad转换后的压力 值与设定的压力上下限值相比较,当压力低于设定的下限值时,启动步进电机模 拟充气过程。当模拟压力高于上限时,打开继电器模拟放气过程。2. 电位器电位

4、器用来产生可变的模拟量(0-5v),进而转化为-20到99kpa的模拟压力值。3. ad转换$b2-8gh&4ef(-) ref(*)add-aadd-badocaleenablestar1?cc"r2 /i e,亠2 “a 1va4.7kcr3 weu3a 74l >02clocltlock'mk s02d u3b80c196片内集成了一个八通道的a/d转换系统。包括模拟多路开关、采样和保持电路以10位逐次逼近的a/d转换器。a/d转换的结果送到数码管显示。4. 8051单片机p1bct? p1b1t<2x p1b2- - pisa- p1b4* pis

5、sicer pisatno pibsa- rst p sbc joo p3b12dl ?a52i2c£ 73b3ix71 ?2b4t(r passu* u1psb-tin xtal2 xtal1 5xd 7cc wbcade pt'bladl nb2ad: pcb3jld3 kb4ad4 pcb5ad5 ptbad poaiair ei22i xleprqg pr kbais p2bu14 sb5a13 f»u12 p»3a11 raa.10t2sxai ?»0a58051单片机作为控制中心,是程序的载体,并根据程序控制各部分各功能 的正常运行。

6、5.继电器5v通过单片机的端口 p1.0输出电平来控制继电器吸合和断开,从而模拟压力 高于上限时,打开继电器放气过程。继电器其控制电压是5v,控制端为高电平 时,继电器工作常开触点吸合,连触点的led灯被点亮。当控制端为低电平时, 继屯器不工作。执行时,对应的led将随继电器的开关而亮灭。6. 步进电机单片机通过8255扩展端口控制步进电机。当压力值低于下限时,输出脉冲序列到8255的pa m,控制步进电机正传、反转、加速、减速。木实验步进电机工作于单四拍(a-bc-df a)方式,模拟充气过程。7. 键盘以及显示47wh【丨 iiiiiiiiiiiiiii5 riotxn ee ext! 1

7、t33 in画2 sim 1x44如-4 31ti4 31t3t 3xt34 lm1t4j g4 2jlxmv74367n u15键盘实现压力上下限的输入设定功能。键盘首先向列扫描码地址逐列输出低 电平,然后从行码地址读冋该行值,若无键按下,行码为高,同理得到列码值。由得到的行列值计算键码。在数码管上进行显示。前三位显示测得的压力值,后 三位显示输入的上下限值。8. 地址译码插孔u274hc138d 2v 地址译码,连接cpu和各个外围部件的地址。片选号地址范围片选号地址范围cso08000ii 08fffiics4ocooohocfffhcs109000h09fffhcs5odooohodf

8、ffhcs2oaooohoafffhcs6oeooohoefffhcs3obooohobfffhcs7ofooohoffffh三,程序1. 程序框图及说明总程序框图:主程序框图图1总程序框图说明:主程序的主要思路为读压力值,显示压力值,查询键盘按键输入,记 录按键输入结果并进行显示,的上下限值,用读得的压力与之比较,压力大于上 限值则打开继电器,压力小于下限值则打开步进电机。键盘上ab键分别代表对 上下限进行设定,cd键分别代表显示上下限。数码显示子程序框图:图2数码显示子程序框图说明:定吋对各显示器进行扫描,各器件分时轮流工作,每次只一位数码管 显示。由于人眼视觉暂留现象,看似器件同时显示。

9、木程序中由xkm()函数实现 多次扫描。每秒扫描50次,即每20ms刷新一次。读键值输入子程序框图:图3 读键值输入子程序框图说明:检测到有键按下后,向列扫描码地址0x8002逐列输岀低电平,从行 码地址0x8001读回该行值,若无键按下,行码为高,则返回零,若有键按下, 则根据行列值计算键码,同时要判断键是否已释放,并消除抖动,最后返冋键值。ad转换子程序流程图:图4 ad转换子程序流程图说明:实验用的adc0809是逐次逼近、八位a/d转换器。每采集一次一般 需loouso本程序是用延吋查询方式读入a/d转换结果。主程序中调用读a/d 转换子程序,子程序功能为启动a/d转换,延时,读转换结

10、果,并将结果返回。 再根据公式 curp = (pressure»4) * (high? - lowp) / 256 + lowp 计算岀相 应压力值。步进电机子程序流程图:图5 步进电机子程序流程图说明:电机驱动方式可以采用双四拍(ab-bc-cd-daf ab)方式,也可 以采用单四拍(a-b-c-d-a)方式,或单、双八拍(a-ab-b-bc-c-cd d-da-a)方式。此次采用单四拍方式。8255的工作方式定义为方式0, pa, pc输出,pb输入。2. 程序源程序及注释# include<reg51 .h>#define ledlen 6#define up

11、0x0a /a 为上限#define down oxob/ b 为下限#define xianup 0x0c/显示上限#define xiandown oxod 显示下限#define fu oxof/负号a/d对应0/ a/d 对应 255定义ad片选地址位控制口地址/段控制口地址#define lowp (-20) #define highp (99)xdata unsigned char adport _at_ 0x9000; xdata unsigned char outbit _at_ 0x8002;xdata unsigned char outseg _at_ 0x8004;xda

12、ta unsigned char inat_ 0x8001;键盘读入口signed inicurp;定义压力显示全局变量signed intresult;定义键盘显示全局变量code unsigned char ledmap = 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,0x7f, 0x6f, oxr, 0x7c, 0x39, 0x5e, 0x79, 0x71;/八段数码管显示码unsigned char keytablef = ox 16, 0x15, ox 14, oxff,0x13, 0x12, oxll, 0x10,oxod, 0x0

13、c, oxob, 0x0a,oxoe, 0x03, 0x06, 0x09,oxof, 0x02, 0x05, 0x08,0x00, 0x01,0x04, 0x07;/按键码void delay(unsigned char cnt) /数码管显示时用到的延时程序unsigned char i;doi= 100;dowhile(i); while (-cnt);void displayled()unsigned char i;unsigned char pos;数码管位选变量unsigned char led;数码管段选变量pos = 0x20;初始位置为左边for (i = 0; i <

14、ledlen; i+)outbit = 0;/关闭所显示位led = ledbuflij; 取出该位所显示的数据outseg = led; /在段控制口地址输岀该位段码outbit = pos; /在位控制口地址输出位选通信号,选择一位led点亮delay ;pos »= 1;/移位,选择下一位led准备点亮outbit = 0;unsigned char testkeyo/判断是否有键按下outbit = 0;return (in & oxof);因按键只有4行,所以将高四位屏蔽掉,若无键按下返回零unsigned char getkeyo/读键值unsigned char

15、 pos; unsigned char i; unsigned char k;i = 6;pos = 0x20;do outbit =pos;pos »= 1; k = in & oxof;向列扫描码地址逐列输出低电平从行码地址读冋该行值,若无键按下,行码为高,则k为零 while (i != 0) && (k =0); 若列没扫描完一遍且没有键按下,则继续扫描if(k !=0) 根据行列值计算键码i *= 4;if (k & 2)i+= 1;else if (k & 4)i+= 2;else if (k & 8)i+=3;outbit

16、 = 0;do delay(10); while (testkeyo); 判断键是否已释放,并消除抖动retum(keytablei); else return(oxff);返回键码/没有键按下则返回零void displayresultl()i将ledbuf数组屮数据填好isigned int p;定义要显示的压力变量p = curp;if (p< 0)如果数据小于0,显示号ledbuf0 = 0x40;p=p;else ledbufo = 0;ledbufl = ledmapp/10; 显示压力十位数ledbufl2 = ledmapp%10j; 显示压力个位数 void displ

17、ayresult2()signed int k; k = result;定义要显示的上下值变量if (k >=0)ledbuf3 = 0;/数值大于0不显示负号else/在符号位显示'jledbufl3 = 0x40;k = k;ledbuf4二ledmapk / 10; /显示上下限值十位数ledbuf5 = ledmapk % 10; 显示上下限值个位数 unsigned char readad()读ad转换结果unsigned char i;adport = 0;for (i=0; i<20; i+); return(oxff adport);1/启动a/d/ 延时l

18、oous/读入结果void readpressure()将读入的数字量转换为相应的压力值unsigned char i; unsigned long pressure; pressure = 0;for (i=0; i<16; i+)pressure += readad();采样读到的16次ad数字量值之和,下面用于除以16取平均值curp = (pressure»4) * (highp lowp) / 256 + lowp; / 转换公式,用平均值当做这一时间段内的压力测量值#define mode8255 0x82将8255的工作方式定义为方式0, pa, pc输出,pb输

19、入xdata unsigned char control _at_ 0xa003;/8255 控制寄存器地址为 0xa003xdata unsigned char ctl _at_ oxaooo;/8255 a 口 地址为 xaooo#define astep 0x01#define bstep 0x02#define cstep 0x04#define dstep 0x088255 输出口 pa0=l8255 输出口 pa1 = 18255 输出口 pa2=18255 输出口 pa3=1static flag = 0; /设置电机标志静态变暈void bjdj()control = mode

20、8255;将8255工作方式控制字送控制寄存器ctl = 0;pa 端 口清零单四拍工作方式if(flag = 1)ctl=astep;/pal 输出脉冲else if(flag = 2)ctl=bstep; /pa2 输出脉冲else if(flag = 3)ctl= cstep ; /pa3 输出脉冲else if(flag = 4)ctl=dstep; /pa4 输出脉冲flag = 0;flag +;sbit output = pl a0;定义继电器由p10 口控制void xian()unsigned char dt; for(dt= 10;dt>o;dt)人眼视觉暂留现象,看

21、似器件同吋显示displayresult 1(); 数码管显示 displayled();/主函数void main()signed int pupfdown; unsigned char key,flag=0;output=0;pup=80;pdown=-10;result = 0;定义键盘输入上下限变量定义键值及数字键输入次数变暈初始关闭继电器初始设上限为80/初始设下限为10while (1)xian();数码管显示readpressure(); 读压力if( testkeyo) key = getkeyo;/读取键码if (key >= 0) && (key &l

22、t;= 9)/若是数字键计算输入数值记录上限值记录下限制result = result* 10 + key;displayresult2();/数值送显示缓冲else if ( (key二二up) | (key=down) | (key二=xianup) | (key=xiandown)| (key=fu) /若是功能键,判断是哪个键按下了switch (key)case up:pup = result; displayresult2(); displayled(); result = 0; break;case down: pdown = result; displayresult2();displayled();显示上限制显示下限制result = 0; break;case xianup: result = pup; displayresult2(); displayled(); result = 0; break;case xiandown:result = pdown;displayresult2();dispkiyled();result = 0;break;case fu:输入负值result

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论