ImageVerifierCode 换一换
格式:DOCX , 页数:12 ,大小:163.82KB ,
资源ID:20182092      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/20182092.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(实验八 智能仪器文档格式.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

实验八 智能仪器文档格式.docx

1、该系统具体功能为,仪器上电后自动进入测控状态,显示器显示实时采样值,同时D1和D2实时切换报警状态。若0#键按下,进入参数设置状态(测控转入后台运行),显示器显示工作参数L及其当前值;若2#或3#键按下,可对当前参数值进行加10或减10计算并更新显示;若按压1#键可以确认修改结果(下次再进入参数设置状态时可以以此结果作为新的当前值,否则修改后的参数值不被保存),并转入下一个参数H的设置过程(同理不再赘述)。再次按压0#键或1#键均可退出参数设置状态,返回测控状态。软件编程原理:软件系统采用一个由多功能模块构成的程序,模块之间相互依赖,它们之间关系如图2所示。 控制 (control.c) 菜单

2、(menu.c) 按键检测 (keyboard.c) A/D转换 (ad.c) LED显示 (led.c) 串口输出 (serial.asm)图 2 软件系统结构组成程序由两个主要的功能模块组成一一控制模块和菜单模块,两个模块能够同时运行(指用户在进行菜单操作时,程序需还能实时采集数据并进行控制)而“控制”和“菜单”这两个主要模块都是建立在其他小模块的基础上的,比如控制模块建立在A/D转换和LED显示的基础上,菜单建立在按键检测和LED现实的基础上的,而按键检测又建立在串口输出的基础上。表1列出了各个模块的主要函数。表1 各个模块的主要函数和功能模 块 主要函数和功能 控制模块void con

3、trol_thread(void); 菜单模块void menu_thread(void); A/D转换模块char ad(void);/进行A/D转换,结果通过返回值输出void print(char name,unsigned int value);/输出名称和数值 void serial(char byte);/将字节byte串口输出unsigned char get_key(void);/检测并返回按下的键值实验内容:(1)熟悉单片机应用系统的设计要领;(2)按图1中元器件及参数在ISIS中完成电路原理图的绘制;(3)在uVision3中,按图2及表1建立7个程序文件;(4)在ISIS

4、中运行,实现一路电压信号输入和两路报警开关量输出控制功能。软件编程: 该项目由7个程序文件组成,其中6个为C语言文件,一个为汇编语言文件(串口输出功能采用汇编语言与C51语言混合编程),程序如下:(1)main.c文件void ad_init();void control_thread();void menu_thread();void main() ad_init(); while (1) menu_thread(); control_thread();(2)control.c文件#includesbit P16=P16;sbit P17=P17;unsigned char ad();ext

5、ern unsigned char param_value2;extern char menu_status;void control_thread() unsigned char value=ad(); /A/D转换 if(valueparam_value1) /根据采样值控制LED灯 P16=0; P17=1; else if(value=param_value0) P17=0; else P16=1; if (menu_status=1) /如果菜单是关闭的,显示采集到的数值 print( ,value);(3)menu.c文件#define MENU_ON 0#define MENU_

6、OFF 1#define MENU_NUM 2#define MENU_MAX 999#define MENU_MIN 0unsigned char param_value=100,150;unsigned char menu_status=MENU_OFF;char _menu_name=L,H; /参数名的符号unsigned char _menu_value=0,0; /供显示用的参数数组unsigned char _menu_idx=0; /参数序号char get_key();void menu_thread(void) char i=0; char key=get_key(); i

7、f(menu_status=MENU_OFF) /当前菜单为关闭状态时 if(key=0) /若0#键已被按下 menu_status=MENU_ON; /置当前菜单为打开状态 _menu_idx=0; /设置参数序号0 for(i=0;iMENU_MAX) _menu_value_menu_idx=MENU_MAX; else if (key=3) /若按键3#按下,则参数值减10 _menu_value_menu_idx-=10; if (_menu_value_menu_idxMENU_MIN) _menu_value_menu_idx=MENU_MIN; if(menu_status=

8、MENU_ON) /若菜单状态为开时,显示参数值 print(_menu_name_menu_idx,_menu_value_menu_idx);(4)keyboard.c文件#define CHECK_KEY_DOWN 0 /处在检测按键压下阶段标志#define CHECK_KEY_UP 1 /处在检测按键抬起阶段标志#define KEY_UP 0 /按键抬起标志#define KEY_DOWN 1 /按键压下标志sbit _p33=P33;sbit _p34=P34;sbit _p35=P35;sbit _p36=P36;char _key_status=CHECK_KEY_DOWN;

9、 /按键检测状态(初值为检测压下阶段)char _key_idx=0; /按键序号char _check_key(unsigned char _key_idx) /检查按键状态 serial(0x01_key_idx); /将待查按键键码转换成扫描码后输出 if (_p36=0) /根据P3.6状态决定返回值 return KEY_DOWN; return KEY_UP;char get_key(void) char result=-1; /无键按下时键值为-1 if(_key_status=CHECK_KEY_DOWN)/如果当前处于检查压下阶段,进行以下操作 if(_check_key(_

10、key_idx)=KEY_DOWN)/判断当前扫描键的状态,若为压下 _key_status=CHECK_KEY_UP; 标志,则将检查阶段标志设置为抬起 else _key_status=CHECK_KEY_DOWN; /否则,将检查阶段标志设置为压下 if (+_key_idx=4) /判断4个按键是否已经轮流扫描一遍 _key_idx=0; /是则将待扫描按键号设置为0 else if(_key_status=CHECK_KEY_UP) /如果当前处于检查抬起阶段,进行以下操作 if(_check_key(_key_idx)=KEY_UP) /判断当前扫描键的状态,若为抬起标志则键值输出

11、 result=_key_idx; _key_status=CHECK_KEY_DOWN; /案件检查阶段标志改为压下 if (+_key_idx=4) /判断4个按键是否已经轮流扫描一遍 _key_idx=0; /是,则将带扫描按键号设为0 return result;(5)led.c文件#include =c) return map1c-; return 0;void _delay() /软件延时函数 int i=0,j=0; for (i=0;10;i+) for (j=0;j1;i-) bufi=+value%10; value/=10; if(value=0)break; i-; f

12、or(;=1;i-)bufi=; buf0=name;6;i+) P1&=0xC0; P1|=(1i); P0=_convert(bufi); delay();(6)ad.c文件sbit P32=P32;sbit P33=P33;sbit P34=P34;sbit P35=P35;unsigned char ad() /A/D转换函数 P33=0; P33=1; while (!P34); /查询法等待转换结束 P35=1; /OE置位 return P2; /输出转换结果 void ad_init() /A/D转换的初始化 TMOD=0x02; /定时器0方式2 TH0=0; TL0=0;

13、ET0=1; TR0=1; EA=1;void _ad_clock(void) interrupt 1 /中断服务函数 P32=P32;(7)serial.asm文件 PUBLIC _SERIAL ;混合编程文件的标准前缀 DE SEGMENT CODE RSEG DE_SERIAL:MOV SCON,#0 ;串口方式0 MOV SBUF,R7 ;输出数据送入缓冲区 JNB TI,$ ;等待移位结束 CLR TI ;清理标志位 RET END 仿真效果:实验小结:经过这次上机,我了解了单片机应用系统的研制过程包括总体设计、硬件设计、软件设计及仿真调试等几个阶段,通过基于单片机系统的智能仪器的设计,进一步学习领会单片机的工作原理及单片机应用系统的开发方法和技巧。总之,这次上机使我受益匪浅。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1