空调遥控报告_第1页
空调遥控报告_第2页
空调遥控报告_第3页
空调遥控报告_第4页
空调遥控报告_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

1、设计题目:空调遥控器可以用来庙宇空调机的控制温度(室内温度)、工作状态(常态、除湿、通风)、风扇风速(强、弱、中)以及定时时间(空调工作多少小时自动开机或延时多少小时自动开机)。使用者在遥控器上庙宇预期的空调机工作状态、控制温度及延时时间后,这些参数即送至空调机,空调机按要求开始工作。该遥控器的要求如下:(1) 数字显示器:第一组显示时间,发送前指示设定的延时时间:09 h,发送后指示剩余的延时时间;第二组显示控制温度1535。(2) 工作状态指示器3组:第一组指示设定的工作状态:常态、除湿、通风;第二组指示延时开机、延时停机、取消等三种延时要求;第三组指示空调机的三种工作速度:慢速、中速、高

2、速。(3)红外发射管,发射的调制频率是45 KHz。(4)3节5号电供电。(5)面板示意图见图。设计以AT89C51为核心的遥控器电路,并编写相关的系统软件(汇编、C51程序均可)。设计思路: 数字显示器使用LCD1602显示时间和温度值,其中时间的切换利用AT89C51内部自带的定时器0,定时初值为3cb0,定时器工作模式为0116位定时器,工作状态利用LED灯的亮灭来指示,其中LED亮代表相对应的工作模式被选中,各种工作状态的切换使用8个独立按键来实现,分别位工作状态设定键、延时状态设定键、风速选定键、温度+键、温度-键、延时时间位选定键、延时时间设置键、发送键;按下发送键后信息的发送使用

3、串行口的方式发送给上位机并显现出来,当延时时间到启动空调。具体实现:经分析将该设计划分为如下4个模块:按键模块,LED状态显示模块,LCD1602显示模块,双机串口通信模块按键模块:仿真原理图: 详细描述:8个按键的功能如下表:按键功能K1工作状态设定键(常态、除湿、通风)K2延时状态设定键(延时开、延时关、取消)K3风速选定键(慢、中、快)K4温度设定键(增加+)K5温度设定键(减少-)K6延时时间位选定键(XXXXXX)K7延时时间设置键(默认为循环增加)K8发送键当K1按下时,保持P0高5位状态,按下第一次最后一位置0,倒数第二、三位置1按下第二次时到数第二位置0,倒数第一、三位置1,按

4、下第三次时倒数第三位置0,倒数第一、二位置1,依次循环,代码实现:P0=(states1i&(P0|0x07);当K2按下时,保持P0倒数第1、2、3位和正数第1、2、3状态按下第一次时倒数第一位亮表示延时开,按下第二次时倒数第五位亮表示延时关,按下第三次时倒数第3、4位皆灭表示取消延时,依次循环,代码实现:P0=(states2j&(P0|0x18);当K3按下时,保持P0低5位不变,按下最高两位置1,第三位置0,表示慢速,按下第二次时第二位置0,第一、三位置1,表示中速,按下第三次时第一位置0,第一、二位置1,依次循环,代码实现:P0=(states3k&(P0|0

5、xe0);LED状态显示模块:仿真原理图:详细描述:8个按键的功能如下表:LED状态指示D1正常D2除湿D3通风D4延时开(如果D4/D5两灯全灭则取消延时)D5延时关D6慢D7中D8高LCD1602显示模块:仿真原理图:详细描述:LCD1602一共可以显示16x2个字符,其中数据线为8位分别接AT89C51的P2端口的8个管脚,控制线为RS、RW、E分别接P3.3,P3.4,P3.5管脚,仿真电路中排阻是必要的它的功能是电阻作为有功原件串联在电路中能消除振荡,目的是得到更好的EMC性能。主要子函数包括:(详细代码见附录源程序LCD部分)void initLCM( void); /LCD初始化

6、子程序void DisplayListChar(unsigned char X,unsigned char Y, unsigned char *DData); /显示指定坐标的一串字符子函数void DisplayOneChar(uchar X,uchar Y,uchar DData);/显示单个字符双机串口通信功能:仿真原理图:详细描述:利用串口查询的方式实现两台单片机之间通信的功能:单片机1(模拟遥控器)作为发送机其P3.0/RXD、P3.1/TXD分别接从机(模拟空调)的P3.1/TXD、P3.0/RXD引脚。发送机和接收机串口采用方式1,8位UART,波特率可变,其中T1的采用方式3(

7、8位自填装模式),计数初值为f4f4,因此串口的波特率为2400bits主要实现代码如下:(详细代码见附录源代码部分:)主机发送:while(+counter<=8) SBUF=sendercounter-1;while(TI=0);TI=0;while(RI=0);RI=0;从机接收:counter+; RI=0; /接受中断标志清零,可以接收新的数据 receive=SBUF; /开始接收新的数据 ADDRRcounter-1=receive;/把接受的数据存入字符串数组ADDRR中 delay_LCM(100); delay_LCM(100); SBUF=ADDRRcounter-

8、1;/由单片机2向单片机1发送数据 while(TI=0); /循环等待直到发送数据完毕 TI=0;设计过程中遇到的问题及解决过程:问题1、LCD1602不能够显示最终解决方案:经查阅相关资料与书上LCD1602电路连线图相对照发现未接排阻。仿真电路中排阻是必要的它的功能是电阻作为有功原件串联在电路中能消除振荡,目的是得到更好的EMC性能。经加入排阻后能够正常显示。问题2、通过串口线两片单片机不能正常的通信最终解决方案:原因是在主机中由于我既用到了定时器来作为计时中断,有用到了定时器为串口提供波提率,我误把定时器0来为串口提供波特率,定时器1来为做计时时钟,后查阅书籍在单片机原理及控制技术P1

9、61、L17中提到方式1和方式3的波特率“与定时器T1的溢出率有关。”也就是说串口通信方式1的波特率不能由定时器0来提供后经改变两定时器的功能后串口通信正常。问题3、编译程序代码时总会出现“ERROR L107:ADDRESS SPACE OVERFLOW”.最终解决方案:AT89C51有三种存储器模式:“SMALL模式,COMPACT模式,LARGE模式。不同的存储模式对变量的默认的存储器类型不一样。”程序在编译时默认为小编译模式,此时数据的存储容量为128B当我定义的数据变量所占据的地址空间超过128B时,编译器就会报错。我首先尝试将编译器的模式设置为CMOPACT模式,但发现编译器虽无报

10、错但仿真的结果并不是我所期望的结果,最终我在SMALL模式下,将我所定义的数据变量尽量缩减,例如用10个字符“0123456789”来表示21个温度数据,这样的缺点是给软件的编写带来了较大的复杂度,优点是可以节省内存空间,最终将所用字节缩减至97远小于128B,编译无错误,且仿真成功。课程设计收获与心得:本次课程设计从审题、模块的划分、各个模块的实现和各个模块之间的连接均为自己独立完成,无抄袭借鉴他人的现象发生,通过本次课程设计自己几乎将单片机教材又细致的看了一遍尤其是中断一章看了不下3遍其中串口一节更是把每个字都仔细研究一番,最终完成了课程设计题目的要求。通过此次课程设计增强了我对学习单片机

11、的信心,也激发了我对单片机设计的热情。成为我大学生涯中的一次难忘的经历,我会在今后生活中更加深入学习单片机知识,争取设计出更多自己喜欢的又实用价值的作品。附录:软件仿真图:源代码:第一部分:LCD显示文件#include <reg51.h>#include <intrins.h>#include <string.h>#include <absacc.h>#define uchar unsigned char#define uint unsigned int#define BUSY 0x80 #define DATAPORT P2 sbit LCM

12、_RS=P33;sbit LCM_RW=P34;sbit LCM_EN=P35; void delay_LCM(uint); void lcd_wait(void); void WriteCommandLCM(uchar WCLCM,uchar BusyC); void WriteDataLCM(uchar WDLCM); void DisplayOneChar(uchar X,uchar Y,uchar DData); void initLCM( void); void DisplayListChar(uchar X,uchar Y, unsigned char *DData); void

13、delay_LCM(uint k) uint i,j; for(i=0;i<k;i+) for(j=0;j<60;j+) ; void WriteCommandLCM(uchar WCLCM,uchar BusyC) if(BusyC)lcd_wait(); DATAPORT=WCLCM;LCM_RS=0; LCM_RW=0; LCM_EN=1;_nop_();_nop_();_nop_(); LCM_EN=0;void WriteDataLCM(uchar WDLCM) lcd_wait( ); DATAPORT=WDLCM; LCM_RS=1; LCM_RW=0; LCM_EN

14、=1; _nop_();_nop_();_nop_(); LCM_EN=0;void lcd_wait(void) DATAPORT=0xff;LCM_EN=1; LCM_RS=0; LCM_RW=1; _nop_(); while(DATAPORT&BUSY) LCM_EN=0; _nop_(); _nop_(); LCM_EN=1; _nop_(); _nop_(); LCM_EN=0;void initLCM( )DATAPORT=0;delay_LCM(15);WriteCommandLCM(0x38,0); delay_LCM(5); WriteCommandLCM(0x38

15、,0); delay_LCM(5); WriteCommandLCM(0x38,0); delay_LCM(5); WriteCommandLCM(0x38,1); WriteCommandLCM(0x08,1); WriteCommandLCM(0x01,1); WriteCommandLCM(0x06,1); WriteCommandLCM(0x0c,1); void DisplayOneChar(uchar X,uchar Y,uchar DData)uchar mx,my;my=Y&1;mx=X&0xf; if(my>0)mx+=0x40; mx+=0x80; W

16、riteCommandLCM(mx,0); WriteDataLCM(DData);void DisplayListChar(uchar X,uchar Y, unsigned char *DData) uchar i=0,n; Y&=0x01; X&=0x0f;n=strlen(DData); while(i<n) DisplayOneChar(X,Y,DDatai); i+; X+; #include<reg51.h>#include<stdio.h>#define uchar unsigned charstates13=0xfe,0xfd,0

17、xfb;states23=0xf7,0xef,0xff;states33=0xdf,0xbf,0x7f;unsigned char inittempreture12="tempreture:"unsigned char inittime5="time:"unsigned char tempreture10="0123456789"sbit k1=P10;sbit k2=P11;sbit k3=P12;sbit k4=P13;sbit k5=P14;sbit k6=P15;sbit k7=P16;sbit k8=P17;#define

18、uint unsigned int#define uchar unsigned charuchar datasend=0;uchar keynum;uchar timenum;uchar n;uchar count;uchar counter=0;unsigned char time7="000000"unsigned char sender9="00000000"extern void initLCM( void); extern void DisplayListChar(unsigned char X,unsigned char Y, unsigne

19、d char *DData); extern void DisplayOneChar(uchar X,uchar Y,uchar DData);extern delay_LCM(unsigned int k);extern void WriteCommandLCM(uchar WCLCM,uchar BusyC); void delay(unsigned int i) unsigned int j; unsigned char k; for(j=i;j>0;j-) for(k=255;k>0;k-); void delay1ms()unsigned int i;for(i=5000

20、00;i>0;i-);Initial_time0com()TMOD=0X21;TL0=0Xb0;TH0=0X3c;IE=0x82;TR0=0; Initial_sconcom() TH1=0Xf4; TL1=0Xf4; PCON=0X00; TR1=1; SCON=0X50; void main()unsigned int i=0;unsigned int j=0;unsigned int k=0;unsigned char l=0;unsigned int m=0;unsigned int n=0;count=20;n=count; keynum=0;timenum=0;initLCM

21、();Initial_time0com();Initial_sconcom();delay_LCM(100);DisplayListChar(0,0,inittempreture);delay_LCM(100);DisplayListChar(0,1,inittime);delay_LCM(100);delay_LCM(100);delay_LCM(50);while(1) DisplayListChar(5,1,time); delay_LCM(100);if(k1=0)delay(255); P0=(states1i&(P0|0x07);datasend=(states1i&

22、;(datasend|0x07);delay(255);i+; if(i=3) i=0;if(k2=0)delay(255);P0=(states2j&(P0|0x18);datasend=(states2j&(datasend|0x18);delay(255);j+;if(j=3) j=0;if(k3=0)delay(255); P0=(states3k&(P0|0xe0);datasend=(states3k&(datasend|0xe0);delay(255);k+; if(k=3) k=0;if(k4=0)if(l!=21)l+; delay_LCM(1

23、00);if(l<=5)delay_LCM(1000);DisplayOneChar(11,0,tempreture1);delay_LCM(100); DisplayOneChar(12,0,tempreturel+4);if(l>5)&&(l<=15)delay_LCM(1000);DisplayOneChar(11,0,tempreture2);delay_LCM(100); DisplayOneChar(12,0,tempreturel-6);if(l>15)delay_LCM(1000);DisplayOneChar(11,0,tempretu

24、re3);delay_LCM(100); DisplayOneChar(12,0,tempreturel-16);if(k5=0)if(l>1)l-;if(l<=5)delay_LCM(1000);DisplayOneChar(11,0,tempreture1);delay_LCM(100); DisplayOneChar(12,0,tempreturel+4);if(l>5)&&(l<=15)delay_LCM(1000);DisplayOneChar(11,0,tempreture2);delay_LCM(100); DisplayOneChar(1

25、2,0,tempreturel-6);if(l>15)delay_LCM(1000);DisplayOneChar(11,0,tempreture3);delay_LCM(100); DisplayOneChar(12,0,tempreturel-16);if(k6=0) TR0=0; delay_LCM(100); if(k6=0) timenum+; delay_LCM(100); delay_LCM(100); if(k7=0)&&(TR0=0)delay_LCM(100);if(k7=0) delay_LCM(100); time(timenum-1)%6)+;

26、if(time(timenum-1)%6)>'9') time(timenum-1)%6)='0'if(k8=0) TR0=1; sender0=datasend; sender1=time0; sender2=time1; sender3=time2; sender4=time3; sender5=time4; sender6=time5; sender7=l; while(+counter<=8) SBUF=sendercounter-1;while(TI=0);TI=0;while(RI=0);RI=0;counter=0; void time

27、0_int(void) interrupt 1TL0=0xb0;TH0=0x3c;if(time0='0')&&(time1='0')&&(time2='0')&&(time3='0')&&(time4='0')&&(time5='0')TR0=0;delay_LCM(100); n-;if(n=0) if(time5='0') time5='9' if(time4='0'

28、) time4='5' if(time3='0') time3='9' if(time2='0') time2='5' if(time1=0) TR0=0; else time1-; else time2-; else time3-; else time4-; else time5-;n=count;#include<reg51.h>#define uchar unsigned charunsigned char inittempreture12="tempreture:"unsig

29、ned char inittime6="time:"uchar n;uchar count;unsigned char ADDRR9="00000000"extern void initLCM( void); extern void DisplayListChar(unsigned char X,unsigned char Y, unsigned char *DData); extern void DisplayOneChar(uchar X,uchar Y,uchar DData);extern delay_LCM(unsigned int k); I

30、nitial_time0com()TMOD=0X21;TL0=0Xb0;TH0=0X3c;IE=0x82;TR0=0; void main() uchar receive; uchar counter=0; count=20; n=count; initLCM(); Initial_time0com(); TH1=0xf4; TL1=0Xf4; PCON=0x00; TR1=1; SCON=0x50; P2=0XFF; DisplayListChar(0,0,inittempreture); delay_LCM(100); while(1) while(RI=1) counter+; RI=0; receive=SBUF; ADDRRcounter-1=receive; delay_LCM(100); delay_LCM(100); SBUF=ADDRRcounter-1; while(TI=0); TI=0; if(counter=8) if(ADDRR7<=5) DisplayOneChar(12,0,'1'); DisplayOneChar(13,0,ADDRR7+52); if(ADDRR7>5

温馨提示

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

最新文档

评论

0/150

提交评论