下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、智能装置课程设计报告一、设计题目 空调控制系统二、设计目的1. 深入了解 PIC16F877 单片机的工作原理, 熟练掌握汇编语言程序设计方法, 熟 练使用 MPLAB-ICD 仿真器及 MPLAB-IDE 仿真调试软件。2. 通过该课程设计使学生初步掌握以单片机为核心的智能装置设计的简单原则、 步骤和方法。3. 熟悉智能装置设计中有关的硬件设计调试,如人机界面等。4. 熟悉智能装置设计中相关软件的设计、编程和调试。三、设计内容1. 以 16F877 单片机为核心,结合给出的其他原器件和智能装置实验系统原有的 内容设计空调遥控系统硬件电路。2. 利用实验系统提供的电机模拟空调的压缩机,按键及
2、LED 显示模拟遥控器, 可调电阻模拟温度传感器(可调电阻输出电压1-3V代表10-30 C)。3. 编制软件实现设置温度、起停空调、温度控制、风速控制等功能。4. 利用MAX515实现低、中、高3档风速调整。5. 实现空调温度自动控制, 温度高于设定温度 2度启动低风,高于 4度启动中风,4 度以上启动高风。 (选做)四、设计要求1. 根据实验指导书的设计内容及所给出的元件,设计空调系统硬件原理图。2. 按照设计好的硬件原理图在实验板上用导线搭建硬件电路。3. 用万用表检查硬件电路连接是否正确,检查无误后上电并编制简单的测试程 序分步调试各部分功能。4. 在各部分功能实现后,编制完整的空调系
3、统软件,并进行软硬件联调,直到达 到设计要求。5. 按照设计内容要求测试仪表误差并做分析,给出仪表精度,完成后由教师进行 验收检查。五、实验设备1. MPLAB-ICD 模块和仿真头2. 智能装置实验系统3. 安装了 MPLAB-IDE 开发软件的计算机4. 数字万用表5. 导线若干六、实验项目1. 设计空调系统硬件电路 采用16F877单片机,利用实验板上提供的电机、MAX515构成空调系统,禾U用按键及LED构成控制器,可调电阻模拟温度(可调电阻输出电压1-3V代表10-30 C)。(2) 将设置的温度值、空调工作状态通过LED显示(3) 利用MAX515输出调整电压,控制转速。2. 硬件
4、电路连接和检查将设计好的电路由指导老师检查完毕后,在实验系统上用导线将实际的电路连接 出来。接线完成后对照原理图用万用表逐根连线检查电路连接是否正确,特别是电源VCC和VDD有无短路。检查无误后连接仿真头后通电。3.编制软件对硬件电路分步调试0x09/译码控制寄存器0x0A 亮度控制寄存器0x0B /扫描界限寄存器0x0C /关断模式寄存器测试控制寄存器#defi ne DIG00x02 /DIG0(1)对数码管显示电路进行调试,编制简单程序实现将数据在数码管上显示#i nclude #i nclude temperature_header_file.h#defi ne DECODE_MODE
5、#defi ne INTENSITY #defi ne SCAN_LIMIT#defi ne SHUT_DOWN#define DISPLAY TEST 0x0F void max7219_write( un sig ned char address, un sig ned char dat);void max7219_i nit(void);void delay1();void delay();void in it();int get_ad();unsigned char a=0;void max7219_write(unsigned char address,unsigned char d
6、at) unsigned char i;MAX7219_LOAD=0;/发送地址for (i=0;i8;i+)MAX7219_CLK=0;if(address&(17-i)MAX7219_DIN=1;elseMAX7219_DIN=0;MAX7219_CLK=1;/发送数据for (i=0;i8;i+)MAX7219_CLK=0;if(dat&(10;i-);void init()TRISA=0x01;/A 口 RA0 输入TRISC=0x00;PORTA=0x00;PORTC=0x00;ADCON0=0x41;/0100 00018 倍 fosc 0 通道 开 adADCON1=0x0e;/
7、0000 1110adfm=0 直接读低 8 位 1110 选择 RA0delay();int get_ad() int adval; ADGO=1;while(ADGO); adval=ADRESH;return adval;void delay()for(int i=500;i0;i-);( 2)编制 MAX515 程序,驱动电机旋转。#include #include temperature_header_file.hvoid max515_write(unsigned char data)unsigned char i;MAX515_CS=0; /拉低片选线,选中器件 /发送地址for
8、 (i=0;i8;i+)/ 移位循环 8 次,最高频率为 10MHzMAX515_SCLK=0;if(data&(111-i)MAX515_DIN=1;elseMAX515_DIN=0;MAX515_SCLK=1;MAX515_CS=1;void max515_init(void)TRISD=0x00;PORTD=0x00;MAX515_CS=1;MAX515_SCLK=0;void main(void)max515_init();while(1)max515_write(0x00AF);/清零时钟总线/每次取高字节/时钟上升沿,发送地址/发送结束,上升沿锁存数据/MAX515 初始化/0x0
9、0FF-4.69V,0x00CF-2.53V,0x00AF-1.27V,0x00-0V (3)编制按键程序,控制显示和电机的起停。#include #include temperature_header_file.hint ONOFF=0;/0-off,1-onint MANAUTO=0;/0-manual,1-autoint SPEEDCTRL=0;int TEMPCTRL=20;void key_init();void key_onoff();void key_ctrl();void key_manauto();void delay();void main(void)while(1);vo
10、id key_onoff()if(RC3=1 & ONOFF=0) / 按下开delay(); if(RC3=1) ONOFF=1;if(RC3=1 & ONOFF=1)delay(); if(RC3=1) ONOFF=0;void key_manauto()if(ONOFF=1)/再按下关if(RC2=0 & MANAUTO=0)delay();if(RC2=0)MANAUTO=1;if(RC2=0 & MANAUTO=1)/手动切自动/自动切手动 delay(); if(RC2=0) MANAUTO=0;void key_ctrl()if(ONOFF=1 & MANAUTO=0)/开且为手
11、动,上下键调整风速if(RC0=0 & SPEEDCTRL=0) delay();if(RC0=0)SPEEDCTRL=SPEEDCTRL-1;if(RC1=0 & SPEEDCTRL=10)delay();if(RC0=0) TEMPCTRL=TEMPCTRL-1;if(RC1=0 & SPEEDCTRL0;i-); 每部分编制结束并调试通过后,和前面的程序依次连接成大程序并调试出结果,最 终完成整个程序的编制和调试。该部分程序将在第九部分程序清单中呈现。4. 仪表软硬件联调实现要求的功能我们编写程序的顺序和上述步骤不完全相同。首先,我们实现了四个按键的所有逻辑功能,并在按键子程序中提供了其
12、他模块接入的接口。再按照先调试输入部分、后调试输出部分的顺序进行程序的编写, 第二步实现了电压信号的 A/D转换并将数字信号输入 PIC单片机, 接下来实现了按键通过 MAX515芯片及驱动电路对电机的转速有级调节,最后实现了将温度 LED数码管显示的功能。功能完成后用万用表对可调电阻输出和温度显示对应取若干个点记录实验结果。温度/C11121314151617181920电压N1.1061.2061.3071.4031.5051.6051.7051.8021.9082.003温度/C21222324252627282930电压N2.1062.2032.3062.4132.5052.6062.
13、7052.8052.9032.996T*| | temperature (T?)LfnearFit of Sheet 1 EHemperartuevoftage (V)利用MATLAB对以上数据进行分析,可以看出电压和温度采集的A/D信号呈线性关系。编制使用说明我组设计的温度自动控制空调装置由以下几部分组成:温度传感器(用电压信号模拟)、温度显示、空调压缩机(用电机模拟)、遥控器(用按键模拟)等几部分组成。下面简要介绍遥控器(按键)部分的使用方法,并简要说明数码管显示功能。按键共有四个,分别为开关键、自动/手动切换键、加温度键(自动模式)/加风速键(手 动模式)、减温度键(自动模式)/减网速键
14、(手动模式)。初始状态空调为关,电机停转。按下开关键一次,空调处于 ON状态,再按开关键一次,空调处于OFF状态。在空调处于ON状态时,默认空调处于手动模式,且风速为最小。风速分为0、1、2、3四个控制档,0为停止,3为最大。当空调处于手动模式时,每按下一次加风速键,风速增大一档,达到3以后再按下该键,风速不再增大;每按下一次减风速键,风速减小一档,达到 0以后再按下该键,风速不再减小。若在手动模式时按下自动/手动切换键,则空调进入自动温控工作模再增加;每按下一次减速温度键,设定温度减小一度,达到10度后不再减小。自动温控的方式为:当环境温度低于设定温度时, 风速置为0档;当环境温度高于设定温
15、度 2度以内时, 风速置为1档;当环境温度高于设定温度 2度至4度时,风速置为2档;当环境温度高于设 定温度4度以上时,风速置为 3档。当空调处于 ON状态时,不论处于哪种工作状态,一旦 按下开关键,系统停止运行,并且所有状态恢复初始值。数码管显示部分:左边的两个数码管不论空调处于开/关状态,始终显示环境温度(10度30度),起到温度计的作用。右边的两个数码管当处于手动模式时,左侧的数码管将显 示风速档位,右侧的始终显示0;当处于自动模式时,显示设定温度。误差分析本套智能空调设置我们采用05V电压信号作为模拟输入信号,经PIC单片机的片内集成A/D转换后变为8位的数字信号,相当于0V对应数字量
16、0x00, 5V对应数字量OxFF。我 们将数字量信号除以 5,使得数字量变为 050( 51只对应0xFF 一个数字量,故忽略),正 好对应0C至50C温度,即0V对应0C, 5V对应5C, A/D转换是线性变换,故取一部分转换结果,其对应关系也为线性,即1V对应10C, 3V对应30C,即符合设计要求。最大测量误差为: 七、调试的步骤 和解决的方法误差分析:由于对数字信号除5取整,故显示的温度值为向下取整,损失了部分精度。100% = 2%及调试过程中出现的问题50-0调试步骤已经在上一部分进行过介绍,故不赘述。下面说明在调试过程中出现的问题和解决的方法。这一次课程设计遇到的最大问题就是M
17、AX7219的写入问题。7219的写入顺序为:先拉低CS片选信号,在每个时钟信号上升沿发送一位数据,并将数据移位,循环16次。为使程序清晰易读,对输出端口采用宏定义方式,然而在调试中我们发现PICC编译器无法识别该宏定义,导致 MAX7219的控制时序逻辑错误,浪费了我们很多的时间。将宏定义去掉,改用实际端口表示后,该问题解决。八、软件设计流程图及带注释的全部程序的清单开始/temperature_header_file.h/ #include /Define MAX7219 #define MAX7219_DIN RD2#define MAX7219_LOAD RD0#define MAX7
18、219_CLK RD1 /Define MAX515#define MAX515_DIN RD5 #define MAX515_SCLK RD4 #define MAX515_CS RD3 /Define Analog Input#define AINPUT RA0 /ad.c/ #include #include temperature_header_file.h char get_ad()char adval;ADGO=1; while(ADGO) ; adval=ADRESH; return adval;/delay.c/ void delay_short(int x)int i; fo
19、r(;x0;x-) for(i=100;i0;i-);void delay_long(int x)int i; for(;x0;x-) for(i=1000;i0;i-);/init.c/#include #include temperature_header_file.hvoid init()/AD 输入、按键输入、 LED 显示输出 初始化TRISA=0x01; /RA0 作为模拟量输入接口PORTA=0x00;TRISC=0x0F; /RC0RC3 为四个按键输入, RC4RC7 为四个 LED 灯显示 PORTC=0x00;ADCON0=0x41;/0100 00018 倍 fosc
20、0 通道 开 adADCON1=0x0e;/0000 1110 adfm=0 直接读低 8 位 1110 选择 RA0/MAX515,MAX7219TRISD=0x00;PORTD=0x1B;接口初始化/RD0RD2 为 MAX7219 接口, RD3RD5 为 MAX515 接口 /0b xx 011 011/要检查 !/key.c/ #include /0-off,1-on/0-manual,1-auto/ 风速控制,初始值为 0 档(停转) / 设定温度值,初始值为 20 度#include temperature_header_file.hextern char ONOFF; exte
21、rn char MANAUTO; extern char SPEEDCTRL; extern char TEMPCTRL; extern char BTEMP; void delay_short(int x); void delay_long(int x); /*void main(void) while(1) ;*/void key_onoff()if(RC3=0 & ONOFF=0) delay_short(2); if(RC3=0 & ONOFF=0) ONOFF=1; delay_long(20); if(RC3=0 & ONOFF=1) /按下开/会不会延时太长?/再按下关delay
22、_short(2);if(RC3=0 & ONOFF=1)ONOFF=0; delay_long(20);void key_manauto()if(ONOFF=1)if(RC2=0 & MANAUTO=0) /手动切自动delay_short(2);if(RC2=0 & MANAUTO=0)MANAUTO=1; delay_long(20);if(RC2=0 & MANAUTO=1) /自动切手动delay_short(2);if(RC2=0 & MANAUTO=1)MANAUTO=0; delay_long(20);void key_ctrl()if(ONOFF=1 & MANAUTO=0)
23、/ 开且为手动,上下键调整风速if(RC0=0 & SPEEDCTRL0) /原来为大于等于 0,貌似不对,因为等于 0 时不能再减 1 了delay_short(2);if(RC0=0 & SPEEDCTRL0)SPEEDCTRL=SPEEDCTRL-1;delay_long(20);if(RC1=0 & SPEEDCTRL3) /原来为小于等于 3,貌似不对,因为等于 3 时不能再加 1 了delay_short(2);if(RC1=0 & SPEEDCTRL10) /判断条件改动同上delay_short(2);if(RC0=0 & TEMPCTRL10) TEMPCTRL=TEMPCT
24、RL-1; delay_long(20);if(RC1=0 & TEMPCTRL30) /判断条件改动同上 delay_short(2);if(RC1=0 & TEMPCTRL30)TEMPCTRL=TEMPCTRL+1; delay_long(20);/max515.c/#include #include temperature_header_file.hvoid max515_write(unsigned char data)unsigned char i;MAX515_CS=0; /拉低片选线,选中器件/发送地址for (i=0;i8;i+)/ 移位循环 8 次,最高频率为 10MHzM
25、AX515_SCLK=0;if(data&(111-i)MAX515_DIN=1;elseMAX515_DIN=0;MAX515_SCLK=1;MAX515_CS=1;/max7219.c/清零时钟总线/每次取高字节/时钟上升沿,发送地址/发送结束,上升沿锁存数据#define DECODE_MODE#define INTENSITY#define SCAN_LIMIT#define SHUT_DOWNunsigned char i;RD0=0;/发送地址for (i=0;i8;i+)RD1=0;if(address&(17-i)RD2=1;elseRD2=0;RD1=1;/发送数据for (
26、i=0;i8;i+)RD1=0;if(dat&(17-i)RD2=1;elseRD2=0;RD1=1;RD0=1;/MAX7219 初始化#include #include temperature_header_file.h0x09 / 译码控制寄存器0x0A /亮度控制寄存器0x0B / 扫描界限寄存器0x0C / 关断模式寄存器#define DISPLAY_TEST 0x0F/测试控制寄存器void max7219_write(unsigned char address,unsigned char dat)/拉低片选线,选中器件/移位循环 8 次,最高频率为 10MHz/清零时钟总线/(
27、bit)(data&0x80); /每次取高字节 ?/时钟上升沿,发送地址/(bit)(data&0x80);/每次取高字节 ?/时钟上升沿,发送数据/发送结束,上升沿锁存数据void max7219_init()max7219_write(SHUT_DOWN,0x01); max7219_write(DISPLAY_TEST,0x00); max7219_write(DECODE_MODE,0xFF); max7219_write(SCAN_LIMIT,0x03); max7219_write(INTENSITY ,0x04); max7219_write(0x04,0xF8);max721
28、9_write(0x03,0xF8);max7219_write(0x02,0xF8);max7219_write(0x01,0xF8);/main.c/#include #include temperature_header_file.hvoid init();void max7219_init();void delay_long(int x);void delay_short();void key_onoff();void key_manauto();void key_ctrl();void max515_write(unsigned char data);/开启正常工作模式( 0xX1
29、)/选择工作模式( 0xX0 )/选用全译码模式/只用前 4 只 LED ;这里没问题 /设置初始亮度void max7219_write(unsigned char address,unsigned char dat);char get_ad();/这里的静态变量定义有些问题!待解决!char ONOFF=0;char MANAUTO=0;char SPEEDCTRL=0;char TEMPCTRL=20;char TEMPOBSV=20;char oa=0;char ob=0;char ca=0;char cb=0;void main()init(); max7219_init(); wh
30、ile(1)/0-off,1-on/0-manual,1-auto/风速控制,初始值为 0 档(停转) /设定温度值,初始值为 20 度(实际温度) /实际检测温度,在 ad.c 中引用 /存放环境温度十位/存放环境温度个位/存放设定温度十位/存放设定温度个位key_onoff(); key_manauto(); key_ctrl();/ 温度检测及显示转换 TEMPOBSV=get_ad(); TEMPOBSV=TEMPOBSV/5; if(TEMPOBSV 0x1D) TEMPOBSV=30; if(TEMPOBSV 0x0A) TEMPOBSV=10; oa=TEMPOBSV/10; o
31、b=TEMPOBSV%10; ca=TEMPCTRL/10; cb=TEMPCTRL%10;/ 手动模式控制风速 if(ONOFF=0) max515_write(0x0000); max7219_write(0x04,0x0F); max7219_write(0x03,0x0F); max7219_write(0x02,0x0F); max7219_write(0x01,0x0F); MANAUTO=0; SPEEDCTRL=0; if(ONOFF=1 & MANAUTO=0) if(SPEEDCTRL=0) max515_write(0x0000); max7219_write(0x02,
32、0x00); max7219_write(0x01,0x00); if(SPEEDCTRL=1) /测量环境温度/ 使环境温度测量范围为 10 度至 30 度/取环境温度十位/取环境温度个位/取设定温度十位/取设定温度个位/写入 DIG1/写入 DIG0max515_write(0x00AF);max7219_write(0x02,0x01);/写入 DIG1max7219_write(0x01,0x00);/写入 DIG0if(SPEEDCTRL=2)max515_write(0x00CF);max7219_write(0x02,0x02);/写入 DIG1max7219_write(0x0
33、1,0x00);/写入 DIG0if(SPEEDCTRL=3)max515_write(0x00FF);max7219_write(0x02,0x03);/写入 DIG1max7219_write(0x01,0x00);/写入 DIG0/ 自动模式控制温度if(ONOFF=1 & MANAUTO=1) if(TEMPOBSV-TEMPCTRL = 0) max515_write(0x0000); else if(TEMPOBSV-TEMPCTRL 2) max515_write(0x00AF); else if(TEMPOBSV-TEMPCTRL 4) max515_write(0x00CF)
34、; else max515_write(0x00FF); max7219_write(0x02,ca); / 写入 DIG1 max7219_write(0x01,cb); / 写入 DIG0max7219_write(0x04,oa); /写入 DIG3 max7219_write(0x03,ob); /写入 DIG2 /if(TEMPOBSV=30)RC5=0;RC7=0;RC4=1;RC6=1; delay_long(10); RC5=1;RC7=1; RC4=0;RC6=0; delay_long(10);if(TEMPOBSV30)RC4=0;RC5=0;RC6=0;RC7=0;AHiOUiOffU?CRBOIXTRBIRB3PGMRB4RB5 RB6PGCRB7PGDRCGTIOSOTICKIRC1T1OS1CC72 RC2CCP1 RC3SCKSCLRC4SDISDARC5SDO RC6TXCKRC7KXDTRAO ANORDaPSPORAI AN1RD1PSP1RA2AN2
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 企业法律顾问合同
- 期货投资合同
- 业务出兑合同
- 振华股份合同
- 门面房租房合同
- 2026届山东省济南市平阴县九上物理期中学业质量监测模拟试题含解析
- 坟墓优化协议书
- 个人股份认购协议书
- 车辆过户协议书怎么写
- 机房撤除协议书
- 肿瘤的放射治疗及护理
- 柑橘嫁接技术课件
- 五年级道德与法治上册全册知识点考点归纳及期末
- 无人机吊运合同协议书
- GB/T 45644-2025热塑性塑料检查井抗地面和交通负荷性能试验方法
- 2025年高速印刷润版液项目可行性研究报告
- app开发外包合同协议
- 埋地钢质管道直流干扰防护技术标准
- 2023年江苏省苏州市六区七年级阳光学业水平调研测试语文试题及答案
- 《半导体物理学》【ch08】半导体表面与MIS-结构-教学课件
- 教辅资料征订方案
评论
0/150
提交评论