设计报告书小组_仿电梯控制_第1页
设计报告书小组_仿电梯控制_第2页
设计报告书小组_仿电梯控制_第3页
设计报告书小组_仿电梯控制_第4页
设计报告书小组_仿电梯控制_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

1、湖南大学电气与信息工程学院本科生课程设计题目: 仿电梯控制课程: 单片机课程设计专业: 电气工程及其自动化班级: 电自0903学号:姓名: 指导老师: 罗德荣 设计时间: 2012年6月 一、 任务及设计要求(1)、利用4*4键盘矩阵,模拟电梯运行过程(2)、要求1)按下对应楼层按键,显示数字将从当前位置向上或向下平滑滚动显示到指定楼层位置2)系统可以同时识别依次按下的多个按键,在到达指定位置后,蜂鸣器发出短暂的声音代表该楼层到,并停顿片刻且数字闪烁,代表上下人,然后数字继续滚动显示。3)如果在同时按下的多个数字中,有的在当前运行方向的反方向,则数字先按当前方向运行完毕后,再依次按顺序前往反方

2、向的数字位置4)可按键选择方向,上或者下,并在LED或LCD上显示当前运行方向5)可按键统计进入的人数,超过人数即蜂鸣器报警6)有紧急按键,发生紧急事件时可按键报警,蜂鸣器报警7)显示北京时间,可调整二、 硬件原理图(1) 板上资源板上资源如图所示1、2、3:单片机P0、P2、P3口引出接口(有限流保护电阻); 4:上排图形点阵LCD12864的接口、下排LCD1602的接口; 5、6:两路16位ADC输入、可作差分输入; 7、8:12位DAC输出、对DAC输出进行比例放大或者跟随的运放; 9:单片机AduC848; 10:无源蜂鸣器、由单片机PWM模块输出信号控制; 11:8位数码管; 12

3、:SPI接口; 13:RS232串口(通过串口在线下载、单步、断点、运行到某一行等方式调试程序); 14:步进电机(5V、70欧姆、6线4相)接口; 15:8路LED,从左至右为LED70,分别被P0.7P0.0控制; 16:复位按键和下载按键; 17、18:IIC总线上的EEPROM AT24C08和RTC DS1307; 19:IIC接口; 20:PS/2接口; 21:红外接收头; 22:功能选择和配置插针; 23:4X4矩阵式键盘或4个独立按键; 24:直流电源输入; 此外还有红外二极管(由单片机PWM模块输出信号控制)、USB电源输入接口。(2) 硬件模块接线图1、ADUC848引脚图

4、Pin14:(P1.0P1.3)作为矩阵式键盘或独立按键的输入,P1口只能用于输入,默认用于模拟输入,作为数字输入使用时应先往P1口相应引脚写0,这里可以用P0&=0xf0。若P2、P3、P0口要作为输入,则应往相应引脚写1。Pin5、6:AVDD、AGND,模拟电源输入。Pin7、8:外部参考电压接入,Pin7接AGND。片内DAC有2.5V内部参考,ADC有1.25V内部参考。Pin9、10:(P1.4、P1.5)两路AD输入,可做差分输入,需要设置ADC的寄存器。Pin11、12:(P1.6、P1.7)各200uA激励电流源,可配合RTD等做应用。Pin13:两路AD输入做普通输入时的电

5、压参考端,AD输入电压不能低于此引脚电压。Pin14:片内DAC输出。Pin15:复位引脚。Pin16、17:单片机RS232接口的RXD(P3.0) TXD(P3.1)。Pin18:(P3.2) 外部中断0,用于红外接收和PS/2接口。Pin19:(P3.3)LCD1602,LCD12864A的EN引脚,控制第一位数码管。Pin20、21:DVDD、DGND数字电源输入。Pin22:(P3.4)PS/2接口的data信号。Pin23:(P3.5)LCD1602和LCD12864A的RW。Pin24:(P3.6)LCD1602和LCD12864A的RS。Pin25:LCD12864A的CS1。

6、Pin26:IIC接口时钟信号。Pin27:IIC接口data信号。Pin28:(P2.0)SPI接口时钟信号。Pin29:(P2.1)SPI接口MOSI信号、控制第6位数码管的位码。Pin30:(P2.2)SPI接口MISO信号、控制第7位数码管的位码。Pin31:(P2.3)SPI接口SS信号、控制第8位数码管的位码;P2.03也作为4X4矩阵式键盘的扫描输出信号、步进电机的控制信号、数码管第数码管第6、7、8位位码。但是SPI、4X4矩阵式键盘、步进电机、数码管第6、7、8位功能不能同时实现。Pin32、Pin33:接外部32.768KHz晶振。Pin34、Pin35:DVDD、DGND

7、。Pin36:(P2.4)LCD12864A的CS2。Pin37:(P2.5)内部PWM模块输出,控制红外LED。Pin38:(P2.6)内部PWM模块输出,控制蜂鸣器。Pin39:(P2.7)内部PWM模块的外部时钟输入(也可以用内部时钟)。Pin40:EA,低电平有效,正常使用时拉低。Pin41:PSEN,在此引脚电平为低时按复位键进入debug模式,可以下载和调试程序。Pin42:ALE。Pin47、Pin48:DGND、DVDD。Pin43、44、45、46、49、50、51、52:P0口、LCD1602和LCD12864的数据总线,数码管的段码。2、电源模块本组采用5V电源适配器供电

8、,开关往上拨、插针1下面两脚接跳线帽。将开关sw4第2、3脚接通(开关往上拨),电源网络DVDD连接到插针1第2脚的输出,将插针1的第1、2脚(插针1下面两脚)接跳线帽,DVDD直接连接到电源适配器输入端,即为5V电源适配器供电模式。3、显示模块我组选用的是LCD1602显示, LCD信号连接如下图示,我组LCD用来显示所需到达楼层、当前电梯所在楼层、电梯运行方向和时间。关键网络名和引脚名解释: (1)DISCTRL02:显示控制信号。(2)D0D7:数据总线。(3)E:LCD使能信号。(4)RS:数据、指令选择信号。(5)RW:读、写选择信号。(6)CS1、CS2:LCD12864由两部分组

9、成,CS1和CS2为选择信号。板上接口4的下排位LCD1602的接口,排针和排母左对齐插入。切勿插错。4、键盘模块该模块原理如图所示。由于P1口(用于行扫描)内部无上拉电阻,为使无键按下时行信号为高电平,故将行信号接上拉电阻,电阻大小10K即可。引脚复用:P2.0P2.3为4X4矩阵式键盘列扫描信号,又复用作步进电机控制信号,SPI信号、P2.1P2.3还复用为数码管第5、6、7位位码控制信号。参与复用的一项功能使用时,其他参与复用的功能则不能使用。插针配置: 插针10上面两脚接跳线帽,4X4矩阵式键盘输入,行扫描信号为P1.0P1.3,列扫描信号为P2.02.3。5、蜂鸣器该模块原理图如图所

10、示。本设计中采用无源电磁式蜂鸣器,蜂鸣器由PWM1(P2.6)控制。PWM1和PWM0均为片内PWM模块的输出。蜂鸣器的驱动均采用普通NPN三极管。插针配置:要使用蜂鸣器,可以接通插针3,为减少功耗,不用请断开。6、复位与下载复位与下载电路如图所示。进入下载或调试模式的步骤为: (1)按住BTN1(down or debug按键)不要放开; (2)按下BTN2(reset按键),然后放开BTN2(reset按键);(3)放开BTN1(down or debug按键)。这样单片机就进入了调试模式,可以下载或调试程序。三、 程序(1)系统状态转换图主程序的实现采用的是模拟EDA状态法,将系统运行过

11、程分为5个状态,即:初始方向、楼层确定状态s0,楼层选择、运行状态s1,紧急状态s2,统计人数状态s3和时间设置状态s4。状态间的转换主要由按键和运行过程决定。S0S1S3S4S2(2)源程序1、参数定义部分#include#define Write_Data 1#define Write_Command 0sbit buzzer=P26;sbit E = P33; /液晶使能端(E)sbit RW = P35; /液晶读写选择端(RW)sbit RS = P36; /液晶数据指令选择端(RS)unsigned int InterruputCounter=0;unsigned char SEC

12、OND=0, MINUTE=0, HOUR1=12;unsigned char dat6;floor_flag=1,direction=0x7e,key_temp=0xff; unsigned char floor30=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0;unsigned char s=0,s_temp=0,st=0,count_num,count2;unsigned char num;unsigned char m,n,i,j,hs,hg,ms,mg,s_s,sg,del,ys;unsigned char t

13、able19=00:00:00;unsigned char table_sheet10=;2、子程序部分:延时函数void Delay(unsigned long int N) unsigned int i=0;for(i=0;iN;i+); 矩阵式键盘识别,返回值为015unsigned char key_process() unsigned char temp;P1&=0xf0; /P1口低四位作为数字输入时应往相应引脚写0P2&=0xf0; /置列扫描信号为0temp=P1&0x0f; if(temp!=0x0f) /P1口低四位不全为1,则有键被按下 Delay(100); /延时消抖

14、 if(temp=(P1&0x0f) /消抖后再判断键值 P2|=0x07; /P2.3为0switch(P1&0x0f)case 0x0e:key_temp = 0;while(temp!=0x0f) temp=P1&0x0f; Delay(1000); break;case 0x0d:key_temp = 4;while(temp!=0x0f) temp=P1&0x0f; Delay(1000); break;case 0x0b:key_temp = 8;while(temp!=0x0f) temp=P1&0x0f; Delay(1000); break;case 0x07:key_tem

15、p = 12;while(temp!=0x0f) temp=P1&0x0f; Delay(1000); break;case 0x0f:break;default:key_temp = 0xff;break;P2&=0xf0; P2|=0x0b; /P2.2为0switch(P1&0x0f)case 0x0e:key_temp = 1; while(temp!=0x0f) temp=P1&0x0f; Delay(1000); break;case 0x0d:key_temp = 5; while(temp!=0x0f) temp=P1&0x0f; Delay(1000); break;case

16、 0x0b:key_temp = 9; while(temp!=0x0f) temp=P1&0x0f; Delay(1000); break;case 0x07:key_temp = 13; while(temp!=0x0f) temp=P1&0x0f; Delay(1000); break;case 0x0f:break;default:key_temp = 0xff;break; P2&=0xf0; P2|=0x0d; /P2.1为0switch(P1&0x0f)case 0x0e:key_temp = 2;while(temp!=0x0f) temp=P1&0x0f; Delay(100

17、00); break;case 0x0d:key_temp = 6;while(temp!=0x0f) temp=P1&0x0f; Delay(10000); break;case 0x0b:key_temp = 10;while(temp!=0x0f) temp=P1&0x0f; Delay(10000); break;case 0x07:key_temp = 14;while(temp!=0x0f) temp=P1&0x0f; Delay(10000); break;case 0x0f:break;default:key_temp = 0xff;break; P2&=0xf0; P2|=0

18、x0e; /P2.0为0switch(P1&0x0f)case 0x0e:key_temp = 3;while(temp!=0x0f) temp=P1&0x0f; Delay(10000); break;case 0x0d:key_temp = 7;while(temp!=0x0f) temp=P1&0x0f; Delay(10000); break;case 0x0b:key_temp = 11;while(temp!=0x0f) temp=P1&0x0f; Delay(10000); break;case 0x07:key_temp = 15;while(temp!=0x0f) temp=

19、P1&0x0f; Delay(10000); break;case 0x0f:break;default:key_temp = 0xff;break;return key_temp;/键盘返回码转数字unsigned char switchcode(unsigned char k)if(k=1) num=1;if(k=2) num=2;if(k=3) num=3;if(k=5) num=4;if(k=6) num=5;if(k=7) num=6;if(k=9) num=7;if(k=10) num=8;if(k=11) num=9;if(k=14) num=0;return num; /LCD

20、模块void Check_Busy(void)/LCD检测忙P0 = 0xff; /P0口作为输入Delay(50);RS = 0;RW = 1;E = 1;Delay(50);while(P0&0X80);E = 0;RW = 0;P0 = 0X00;void Write_Lcd(bit Com_Data,unsigned char Dat)/LCD写Check_Busy();if(Com_Data)/若为写数据指令RS = 1;elseRS = 0;RW = 0;P0 = Dat;Delay(50);E = 1;Delay(50);E = 0;void Init_Lcd(void)/LCD

21、初始化E = 0;RW = 0;RS = 0;Write_Lcd(Write_Command,0x38); /设置16x2显示,5x7点阵,8位数据接口Write_Lcd(Write_Command,0x0c); /开显示,不显示光标Write_Lcd(Write_Command,0x06); /地址指针加1,且光标加1,整屏显示不移动Write_Lcd(Write_Command,0x01); /清屏/LCD显示void show_floor() Write_Lcd(Write_Command,0x82); /显示所需到达楼层for(i = 0;i 9;i+)Write_Lcd(Write_

22、Data,tablei); void show_flag() Write_Lcd(Write_Command,0x8c); / 显示到达楼层Write_Lcd(Write_Data,table9); void show_dir() Write_Lcd(Write_Command,0x8e); / 显示方向Write_Lcd(Write_Data,table10); void show_time() Write_Lcd(Write_Command,0x80+0x40+0x04); / 显示时间for(i = 11;i 19;i+)Write_Lcd(Write_Data,tablei); voi

23、d beep()/蜂鸣器 unsigned int i; for(i=0;i500;i+) buzzer=buzzer; Delay(100); 3、主程序部分主程序的实现采用的是模拟EDA状态法,将系统运行过程分为5个状态,即:初始方向、楼层确定状态s0,楼层选择、运行状态s1,紧急状态s2,统计人数状态s3和时间设置状态s4。状态间的转换主要由按键和运行过程决定。状态间转换前图所示。void main()table0=table_sheetfloor11;table1=table_sheetfloor12;table2=table_sheetfloor13;table3=table_she

24、etfloor14;table4=table_sheetfloor15;table5=table_sheetfloor16;table6=table_sheetfloor17;table7=table_sheetfloor18;table8=table_sheetfloor19;table9=table_sheetfloor_flag;table10=direction;table11=table_sheetHOUR1/10;table12=table_sheetHOUR1%10;table13=0x3a;table14=table_sheetMINUTE/10;table15=table_s

25、heetMINUTE%10;table16=0x3a;table17=table_sheetSECOND/10;table18=table_sheetSECOND%10;PLLCON&=0xf8; /设置频率为12.58MHzTMOD=0x01;/置T0定时工作方式1EA=1;/开总中断ET0=1;/开T0中断TH0=0x00;TL0=0x00;TR0=1;/开启T0Init_Lcd();while(1) table11=table_sheetHOUR1/10; table12=table_sheetHOUR1%10; table14=table_sheetMINUTE/10; table15

26、=table_sheetMINUTE%10; table17=table_sheetSECOND/10; table18=table_sheetSECOND%10; show_time();key_temp=key_process() ; switch(s) case 0:/方向选择,起始楼层选择if(key_temp=1|key_temp=2|key_temp=3|key_temp=5|key_temp=6|key_temp=7|key_temp=9|key_temp=10| key_temp=11) floor_flag=switchcode(key_temp); table9=table

27、_sheetfloor_flag;show_flag();if(key_temp=13) direction=0x7f;/下行 table10=direction; show_dir();if(key_temp=15) direction=0x7e;/上行 table10=direction; show_dir(); if(key_temp=12) s_temp=s;s=2;/紧急状态if(key_temp=8) s=1;/运行if(key_temp=0)s_temp=s;s=4;/设置时间break;case 1:/楼层选择,正常运行 if(key_temp=1|key_temp=2|key

28、_temp=3|key_temp=5|key_temp=6|key_temp=7|key_temp=9|key_temp=10| key_temp=11) floorswitchcode(key_temp)+10=switchcode(key_temp);/楼层输入 tableswitchcode(key_temp)-1=table_sheetswitchcode(key_temp);key_temp=0xff; show_floor(); if(key_temp=12) s_temp=s;s=2; /紧急状态if(key_temp=0)s_temp=s;s=4; /设置时间if(direct

29、ion=0x7e)/上行 for(n=floor_flag+10;n=19;n+) if(floorn!=0) m=floor_flag+10; while(floor_flag!=floorm) for(ys=0;ys10;ys+) for(i=0;i255;i+)/键盘扫描用来延时 for(del=0;del=1;n-) if(floorn!=0) direction=0x7f; table10=direction;show_dir(); if( direction=0x7f)/下行 for(n=floor_flag+10;n=11;n-) if(floorn!=0) m=floor_fl

30、ag+10; while(floor_flag!=floorm) for(ys=0;ys10;ys+) for(i=0;i255;i+)/键盘扫描用来延时 for(del=0;del255;del+) key_temp=key_process(); if(key_temp=1|key_temp=2|key_temp=3|key_temp=5|key_temp=6|key_temp=7|key_temp=9|key_temp=10| key_temp=11) floorswitchcode(key_temp)+10=switchcode(key_temp); tableswitchcode(ke

31、y_temp)-1=table_sheetswitchcode(key_temp);key_temp=0xff; show_floor(); floor_flag-; table9=table_sheetfloor_flag; show_flag(); m-; floorm=0; table0=table_sheetfloor11; table1=table_sheetfloor12; table2=table_sheetfloor13; table3=table_sheetfloor14; table4=table_sheetfloor15; table5=table_sheetfloor1

32、6; table6=table_sheetfloor17; table7=table_sheetfloor18; table8=table_sheetfloor19; show_floor(); beep(); s=3;break;/到达楼层,转统计人数 if(floorfloor_flag+10=0&floorfloor_flag+9=0&floorfloor_flag+8=0&floorfloor_flag+7=0&floorfloor_flag+6=0&floorfloor_flag+5=0&floorfloor_flag+4=0&floorfloor_flag+3=0&floorflo

33、or_flag+2=0) for(n=floor_flag+11;n7)beep(); break; /人数不超过7人if (key_temp=4) s=1; /转运行状态if(key_temp=12) s_temp=s;s=2;/转紧急状态if(key_temp=0)s_temp=s;s=4;/时间设置break;case 4:/ 时间设置状态TR0=0;hs=HOUR1/10;hg=HOUR1%10; ms=MINUTE/10;mg=MINUTE%10; s_s=SECOND/10;sg=SECOND%10;if(key_process()=1) /设置小时 hs+;key_temp =

34、0xff; if(hs2)hs=0; Delay(50000);if(key_process()=5) hg+;key_temp = 0xff; if(hs9)hg=0; if(hs=2) if(hg3)hg=0; if(key_process()=2) / 设置分钟 ms+;key_temp = 0xff; if(ms5)ms=0;if(key_process()=6) mg+; key_temp = 0xff; if(mg9) mg=0;if(key_process()=3) /设置秒钟 s_s+; key_temp = 0xff; if(s_s5)s_s=0;if(key_process

35、()=7) sg+; key_temp = 0xff; if(sg9)sg=0; HOUR1=10*hs+hg;MINUTE=10*ms+mg;SECOND=10*s_s+sg; table11=table_sheetHOUR1/10; table12=table_sheetHOUR1%10; table14=table_sheetMINUTE/10; table15=table_sheetMINUTE%10; table17=table_sheetSECOND/10; table18=table_sheetSECOND%10; show_time();if(key_temp=12) s_te

36、mp=s;s=2; break; /紧急状态if(key_temp=4)TR0=1;s=s_temp;break;default: s=0;s_temp=0;floor0=0;floor1=0;floor2=0;floor3=0;floor4=0;floor5=0;floor6=0;floor7=0;floor8=0;floor9=0;HOUR1=0;MINUTE=0;SECOND=0;direction=0x7e;dat0=0;dat1=0;dat2=0;dat3=0; dat4=0;dat5=0;floor_flag=0; break;show_floor();show_flag();show_dir();show_time();4、中断函数部分void TimerInterrupt() interrupt 1 uns

温馨提示

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

评论

0/150

提交评论