单片机课程设计-智能仪器.doc

  1. 1、本文档共25页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
单片机课程设计-智能仪器 单片机课程设计-智能仪器 PAGE / NUMPAGES 单片机课程设计-智能仪器 2012-2013 学年 第一学期 论文题目:单片机系统设计开发应用—智能仪器 学 院:计算机科学与信息工程 专 业:软件工程 学 号: 姓 名:高红斌 日期:2013年 12月 1日 单片机系统设计开发应用—智能仪器 一、 设计要求及目的 本实验通过一个单通道通用型智能仪器的软硬件系统设计,将这学期学过的单片机原理加以综合运用,以此掌握单片机应用系统的设计要领,本次试验设计的总体目标是一路电压信号输 入和两路报警开关量输出控制功能,其中信号电压范围 0— 5VDC,AD采样分辨率 8bit ,数码管显示信息为: 以为参数字符 和三位十进制采样值,控制参数有两个,即下限报警值 L 和上 线报警值 H,当采样值大于 H 时,高位报警继电器接通 (用 LED 状态灯 D1 亮表示);当采样值小于 L 时,下位报警继电器接通(用 D2 表示);当采样值介于 L 和 H之间时,两路报警器功能均被解除( D1和 D2均熄灭表示) 二、 实验环境 微型计算机一台, proteus 软件 ,keilC 编译器。 三、 元器件列表, 图表 1 四、 实验原理 本实验选用了一只六联共阴极数码管显示器,按照动态显示原 理接线,其中段码通过锁存器 74LS245驱动后接于 P0 口,位码则有反相器 74LS04驱动后接于。 A/D 转换器采用逐次逼近方式的芯片 ADC0809,其并行数据输出端直接连接于 P2 口, 4 个控制端 CLOCK,START,EOC,和 OE分别接于,采用查询法等待转换 结束,转换时钟利用定时器中断产生。四个面板按键通过 8 位 串行输入并行输出移位寄存器 74LS164与单片机接口,其移位时终端与单片机的 TXD引脚相连,串行数据端( 1 和 2 脚)与单片机的 RXD引脚相连,串口输出功能采用汇编语言与 C51 语言混合编程实现。 软件系统采用一个有多个功能模块构成的程序,模块之间相互依赖,他们之间的关系如图,程序有主要的两个功能模块组成——控制模块和菜单模块。这两个模块能够同时运行。这里,“同时”的意思是指用户进行菜单操作的时候,程序还能采集数据并进行控制。 图表 2 软件系统结构组成 “控制”和“菜单”这两个主要的模块都是建立在其他小模块 的基础上的,比如控制模块建立在 A/D 转换和 LED 显示的基础 上,菜单建立在按键检测和 LED显示的基础上,而按键检测又建立在串口输出的基础上。下表列出了各个模块的主要函数。 图表 3 各个模块的主要函数和功能 五、 程序源代码 // void ad_init(); void control_thread(); void menu_thread(); void main() { ad_init(); while (1) { menu_thread(); control_thread(); } } // #define MENU_ON 0 #define MENU_OFF 1 #define MENU_NUM 2 #define MENU_MAX 999 #define MENU_MIN 0 unsigned 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 print(char name, unsigned int value); void menu_thread(void) { char i = 0; char key = get_key(); if (menu_status == MENU_OFF) { // 当前菜单为关闭状态时 if (key == 0) { // 若按键 0 已被按下 menu_status = MENU_ON; // 置当前菜单为打开状态 _menu_idx = 0; // 设置参数序号 0 将所有参数当前值取出,送入供显示的参数数组中 for (i = 0 ; i MENU_NUM ; i++) { _menu_value[i] = param_value[i]; } } } else{ 如果当前菜单为打开状态,则进行以下操作: if (key == 0) { 若按键 0 按下,则不保存键值,仅切换到下一个参数 if (++_menu_idx == M

文档评论(0)

150****7287 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档