智能仪器单片机实验设计_第1页
智能仪器单片机实验设计_第2页
智能仪器单片机实验设计_第3页
智能仪器单片机实验设计_第4页
智能仪器单片机实验设计_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

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

文档简介

1、智能仪器设计报告班级:计算机1202班 学号:2120122349姓名:郑雅雯 一设计内容介绍智能仪器是一种依靠嵌入式计算机技术发展的新型电子测控单元,其基本功能是根据传感器的实时信号和仪器设定的目标参数进行测量和控制。本设计可实现电压输入采样和两路报警功能。当输入电压信号变化时,显示器会实时采集数据。当采样值大于上限值(H)时,LED1发光;当采样值低于下限值(L)时,LED2发光。同时,按键0按下,进入参数设置状态;按键1按下可确认修改结果;按键2、3按下可实现参数加10或减10。二电路原理1.实验器材80C51、74LS164、ADC0808、74LS245、7SEG-MPX4-CC、L

2、ED等。2.主要芯片介绍(1)、80C5180C51单片机是把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的计算机系统。80C51的内部资源包括:-8位中央处理器(cpu)-片内振荡器和时钟电路-片内128B的数据存储器(RAM)-片内4KB的程序存储器(rom)-程序存储器的寻址空间为64KB-片外数据存储器的寻址空间为64KB-4个8位的I/O并行接口:P0、P1、P2、P3-两个16位定时、计数器-一个全双工的

3、串行I/O接口,可多机通信-5个中断源单片机内部资源中最核心的部分是CPU,它产生各种控制信号,控制存储器、输入输出端口的数据传送、数据运算、逻辑运算等处理。(2)、7LS16474LS164是串行输入并行输出的移位寄存器,每接一片74LS164可扩展一个8位并行输出口数据。通过两个输入端(DSA 或 DSB)之一串行输入;任一输入端可以用作高电平使能端,控制另一输入端的数据输入。时钟 (CP) 每次由低变高时,数据右移一位,输入到 Q0, Q0 是两个数据输入端(DSA和 DSB)的逻辑与,它将上升时钟沿之前保持一个建立时间的长度。主复位 (MR) 输入端上的一个低电平将使其它所有输入端都无

4、效,非同步地清除寄存器,强制所有的输出为低电平。74LS164引脚图及功能:符号引脚说明DSA1数据输入DSB2数据输入Q0Q336输出GND7地 (0 V)CP8时钟输入(低电平到高电平边沿触发)/M/R9中央复位输入(低电平有效)Q4Q71013输出VCC14正电源(3)、ADC0808ADC0808是采样分辨率为8位的、以逐次逼近原理进行模/数转换的器件。其内部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选通8路模拟输入信号中的一个进行A/D转换。1)IN0IN78路模拟输入,通过3根地址译码线ADDA、ADDB、ADDC来选通一路。 2)D7D0A/D转换后的数

5、据输出端,为三态可控输出,故可直接和微处理器数据线连接。8位排列顺序是D7为最高位,D0为最低位。 3)ADDA、ADDB、ADDC模拟通道选择地址信号,ADDA为低位,ADDC为高位。地址信号与选中通道对应关系如表11.3所示。 4)VR(+)、VR(-)正、负参考电压输入端,用于提供片内DAC电阻网络的基准电压。5)ALE地址锁存允许信号,高电平有效。 6)STARTA/D转换启动信号,正脉冲有效。7)EOC转换结束信号,高电平有效。8)OE输出允许信号,高电平有效。3.电路分析由ADC0808的通道0接入100m的正弦波作为输入信号,以通用I/O口方式与单片

6、机连接,数据并行输出至单片机的P1口,4个控制端口CLOCK、START、EOC、OE分别接入P2.4-P2.7,采用查询方式等待转换结束,转换始终利用定时器中断产生。4个控制按键通过74LS164与单片机连接。74LS254一端与单片机P0口连接,另一端与7SEG-MPX4-CC连接显示输出。4.程序设计(1)、整体思想程序主要由3个模块组成:控制模块:进行监控采样 菜单模块:进行参数设置按键检测模块:检测按键状态在3个主模块的基础上又由其他部分同时完成:(2)、主函数main.c在主函数main.c中循环交替调用menu_thread和control_thread,他们分别对应菜单模块和控

7、制模块。(3)、控制模块控制模块主要负责监控和采集数值,进行A/D转换并输出显示。当模块调用时,A/D采样并刷新显示器上的内容,控制报警动作。(4)、菜单模块菜单模块主要实现参数的设置,通过menu_status表示菜单的开关状态,menu_idx表示当前打开的是第几个菜单。只有菜单模块调用时,菜单里的参数才会仔显示器上刷新,用户通过键盘的操作才能够被响应。(5)、按键检测模块按键检测模块主要实现按键状态的检测,一次按下抬起才算完成一次触键操作。用户只有通过按键模块才能实现对参数的调整,实现报警功能。三电路仿真结果(1)、检测数据并输出(2)、按下按键0进入参数设置(3)、按下按键2参数加10

8、,按下按键3参数减10(4)、按下按键1保存并进入H值设置(5)、警告灯部分四设计心得通过一学期的学习,我对单片机有了一定的了解。随着课程的进展,我一步步的跟着做实验,实验由浅入深,从简单到复杂,从分散到整体,在实验中,老师又会穿插理论教学,从单片机的原理结构到单片机的各个模块功能,从汇编语言的讲解到Keil-C的编程,我们都跟着老师认真的学习了一遍。在实验的过程中遇到了很多问题,老师都会耐心解答,在一次次发现问题和解决问题的过程中,让我对于课程的掌握也一步步加深。这次的课程设计结合了单片机的原理知识和其他芯片的用法,也让我对于智能仪器的开发过程有更加清楚的了解。设计完成后,看着自己的作品有了

9、成果也感到十分激动。在这次设计中我深深地感受到了单片机功能的强大,也感受到了学习的乐趣,感到获益匪浅。五程序附录1Control.c#include<reg51.h>sbit P36 =P36;sbit P37 =P37;unsigned char ad();void print(char name,unsigned int value);extern unsigned char param_value2;extern char menu_status;void control_thread()/第一步:A/D转换 unsigned char value=ad(); /根据采样值控

10、制LED灯 if (value > param_value1) P36=0; P37=1; else if(value<=param_value1&&value >=param_value0) P36=0; P37=0; else P36=1; P37=0; /如果菜单是关闭的,显示采集到的值 if(menu_status = 1) print('h',value);2.ad.c#include<reg51.h> sbit P24=P24; sbit P25=P25; sbit P26=P26; sbit P27=P27; unsi

11、gned char ad() P25=0;P25=1;P25=0;while(!P26); P27=1;return P1;void ad_init() TMOD=0x02;TH0=0;TL0=0;ET0=1;TR0=1;EA=1;void_ad_clock(void) interrupt 1 P24=P24;3.keyboard.c#include<reg51.h>#define CHECK_KEY_DOWN 0/键按下阶段标志#define CHECK_KEY_UP 1 /键抬起阶段标志#define KEY_UP 0 /键按下标志#define KEY_DOWN 1/键抬起标

12、志sbit _P32 = P32;char _key_status =CHECK_KEY_DOWN;/按键检测状态(初值为压下)char _key_idx=0; /按键序号void serial(char byte);char _check_key(unsigned char _key_idx) /检查按键状态 serial(0x01<<_key_idx);/将待检查的键码转化为扫描码输出 if(_P32 = 0) /根据P3.2状态决定返回值 return KEY_DOWN;else return KEY_UP;char get_key(void) char result =-1

13、;/若键盘按下时键值为-1 if(_key_status = CHECK_KEY_DOWN) /当键盘压下时 if(_check_key(_key_idx) = KEY_DOWN)/当键盘处于按下阶段时 _key_status=CHECK_KEY_UP; /检查是否抬起 else if(+_key_idx = 4)/判断是否4个键都已经轮流扫描一遍 _key_idx=0; /是,则待扫描按键号为0 else if(_key_status = CHECK_KEY_UP) /当键盘抬起时 if(_check_key(_key_idx)=KEY_UP) /检测抬起状态 result=_key_idx

14、; /键值输出 _key_status=CHECK_KEY_DOWN; /按键阶段改为压下 if(+_key_idx=4) _key_idx=0; return result; 4.led.c#include<reg51.h>char code map1=0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7f,0x6F;/'0''9'char code map2=0x00,0x76,0x38;/'','H','L'char _convert(char c)/将待显示字符

15、转化为显示字符 if(c=' ') return map20;else if(c='H') return map21;else if(c='L') return map22;else if(c>='0'&&c<='9') return map1c-'0' return 0;void _delay() /延时 int i=0,j=0;for(i=0;i<10;i+) for(j=0;j<10;j+) void print(char name,unsigned i

16、nt value) /数码管显示 char buf4=" " char i,pos=0xf7; for(i=3;i>1;i-) bufi='0'+value%10; value/=10; if(value=0) break; buf0=name; for(i=0;i<4;i+) P2=P2|0x0f; P2=P2&pos; P0=_convert(buf3-i); pos=(pos>>1)|0x80; /更新导通位码 delay(); 5.main.cvoid ad_init();void control_thread();v

17、oid menu_thread();void main() ad_init();while (1) menu_thread();control_thread();6.menu.c#define MENU_ON 0#define MENU_OFF 1#define MENU_NUM 2#define MENU_MAX 240#define MENU_MIN 10unsigned char param_value=100,150;unsigned char menu_status=MENU_OFF;char _menu_name ='L','H' /参数名的符号un

18、signed 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_valuei=param_valuei; else /若当前菜单为打开 if(key = 0) /若按键0 按下,则不保存键值,仅切换到下一个参数 if(+_menu_idx = MENU_NUM) /判断是否所有参数都循环到了 menu_status = MENU_OFF; /若循环已完

温馨提示

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

评论

0/150

提交评论