基于单片机的电梯仿真程序课程设计报告书_第1页
基于单片机的电梯仿真程序课程设计报告书_第2页
基于单片机的电梯仿真程序课程设计报告书_第3页
基于单片机的电梯仿真程序课程设计报告书_第4页
基于单片机的电梯仿真程序课程设计报告书_第5页
已阅读5页,还剩52页未读 继续免费阅读

下载本文档

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

文档简介

1、 PAGE57 / NUMPAGES57 目录前言1现代电梯概述3硬件部分设计6软件部分设计12电梯运行界面52设计总结与感悟56参考文献57电梯仿真程序一、前言: 本电梯仿真程序采用的是一个基于单片机与其相关外设,编程语言采用汇编与C语言结合的方式,通过矩阵键盘线反选法输入楼层,上、下行等控制信号,经IO口读入,进行相关实时控制,软硬件结合的仿真系统,输出设备包括由CD4511驱动显示楼层的7段数码管,显示实时信息的显示屏LCD12864,由PWM控制显示电梯门开关的舵机,以与由IO口间接控制的驱动电机正反转双桥驱动电路等几个部分组成。可以实现真实电梯中,任意层呼叫,目的层到达按要求顺序到达

2、,开关门,无输入自动回1层等一系列功能,并实时显示当前电梯运行状态,关于真实电梯门控光幕装置,电机自动抱闸平层等部分,由于知识不足,没有足一实现,但会在接下来的专业知识学习过程中不断完善,同时也希望得到程老师的指导。二、现代电梯概述:电梯是一种以电动机为动力的垂直升降机,装有箱状吊舱,用于多层建筑乘人或载运货物。也有台阶式,踏步板装在履带上连续运行,俗称自动电梯。 服务于规定楼层的固定式升降设备。它具有一个轿厢,运行在至少两列垂直的或倾斜角小于15的刚性导轨之间。轿厢尺寸与结构形式便于乘客出入或装卸货物,本次微机课程设计电梯仿真选用的是垂直升降梯。2.1、电梯功能 HYPERLINK :/ba

3、ike.so /doc/5336303.html 现代电梯主要由曳引机(绞车)、导轨、对重装置、安全装置(如限速器、安全钳和缓冲器等)、信号操纵系统、轿厢与厅门等组成。这些部分分别安装在建筑物的井道和机房中。通常采用 HYPERLINK :/baike.so /doc/5684170.html t :/baike.so /doc/_blank 钢丝绳摩擦传动,钢丝绳绕过曳引轮,两端分别连接轿厢和平衡重,电动机驱动曳引轮使轿厢升降。电梯要求安全可靠、输送效率高、平层准确和乘坐舒适等。电梯的基本参数主要有额定载重量、可乘人数、额定速度、轿厢外廓尺寸和井道型式等。简单使用方法(紧急情况下面有解决方法

4、)载人电梯都是微机控制的智能化、 HYPERLINK :/baike.so /doc/5575191.html t :/baike.so /doc/_blank 自动化设备,不需要专门的人员来操作 电梯电梯结构图 电梯部结构图驾驶,普通乘客只要按下列程序乘坐和操作电梯即可。2.2、运行过程:1、在乘梯楼层电梯入口处,根据自己上行或下行的需要,按上方向或下方向箭头按钮,只要按钮上的灯亮,就说明你的呼叫已被记录,只要等待电梯到来即可。2、电梯到达开门后,先让轿厢人员走出电梯,然后呼梯者再进入电梯轿厢。进入轿厢后,根据你需要到达的楼层,按下轿厢操纵盘上相应的数字按钮。同样,只要该按钮灯亮,则说明你的

5、选层已被记录;此时不用进行其他任何操作,只要等电梯到达你的目的层停靠即可。3、电梯行驶到你的目的层后会自动开门,此时按顺序走出电梯即结束了一个乘梯过程。三、硬件部分设计3.1、总电路图:3.2、单片机最小系统:单片机最小系统,或者称为最小应用系统,是指用最少的元件组成的单片机可以工作的系统.对51系列单片机来说,最小系统一般应该包括:单片机、晶振电路、复位电路.下面给出一个51单片机的最小系统电路图.3.3、矩阵键盘:在 HYPERLINK :/baike.baidu /view/7402.htm t :/baike.baidu /view/_blank 键盘中按键数量较多时,为了减少I/O口

6、的占用,通常将按键排列成 HYPERLINK :/baike.baidu /view/10337.htm t :/baike.baidu /view/_blank 矩阵形式。在 HYPERLINK :/baike.baidu /view/10337.htm t :/baike.baidu /view/_blank 矩阵式 HYPERLINK :/baike.baidu /view/7402.htm t :/baike.baidu /view/_blank 键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。这样,一个端口(如P1口)就可以构成4*4=16个按键,1键盘的工作

7、原理: 按键设置在行、列线交点上,行、列线分别连接到按键开关的 两端。行线通过上拉电阻接到+5V 电源上。无按键按下时,行线处 于高电平的状态, 而当有按键按下时, 行线电平与此行线相连的列 线电平决定。2行列扫描法原理:第一步, 使行线为 HYPERLINK :/baike.baidu /view/3281.htm t :/baike.baidu /view/_blank 编程的输入线,列线是输出线,拉低所有的列线, 判断行线的变化,如果有按键按下,按键按下的对应行线被拉低,否则 所有的行线都为高电平。第二步, 在第一步判断有键按下后, 延时 10ms 消除机械抖动,再次读取行值,如果此行线

8、还处于低电平状态则进入下 一步,否则返回第一步重新判断。第三步,开始扫描按键位置,采用逐 行扫描,每间隔 1ms 的时间,分别拉低第一列,第二列,第三列,第四 列,无论拉低哪一列其他三列都为高电平,读取行值找到按键的位置, 分别把行值和列值储存在 HYPERLINK :/baike.baidu /view/6159.htm t :/baike.baidu /view/_blank 寄存器里。3.4、CD4511当前楼层显示CD4511 是一片 CMOS BCD-锁存/7 段译码/驱动器,用于驱动共阴极 LED (数码管)显示器的 BCD 码-七段码译码器。它具有BCD转换、消隐和锁存控制、七段

9、译码与驱动功能的CMOS电路能提供较大的拉电流。可直接驱动共阴LED数码管。以下是CD4511数码管驱动原理电路图。是CD4511实现LED与单片机的并行接口方法。3.5、LCD12864不带中文字库的128X64 是一种 HYPERLINK :/baike.so /doc/6429114.html t :/baike.so /doc/_blank 具有4 位/8 位并行、2 线或3 线串行多种接口方式,部含有国标一级、二级简体 中文字库的点阵图形液晶显示 HYPERLINK :/baike.so /doc/6764099.html t :/baike.so /doc/_blank 模块;其显

10、示分辨率为12864, 置8192 个16*16 点汉字,和128 个16*8 点ASCII 字符 集.利用该模块 HYPERLINK :/baike.so /doc/5159871.html t :/baike.so /doc/_blank 灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。可以显示84 行1616 点 阵的汉字. 也可完成图形显示.低电压低功耗是其又一显著特点。由该模块构成的液晶显示方案与同类型的图形点阵液晶 显示模块相比,不论硬件电路结构或显示程序都要简洁得多,且该模块的价格也略低于一样点阵的图形液晶模块。3.6、电机双桥驱动系统一、H桥驱动 HYPER

11、LINK :/bbs.elecfans /zhuti_dianlu_1.html t :/bbs.elecfans /_blank 电路 图4.12中所示为一个典型的直流电机控制电路。电路得名于“H桥驱动电路”是因为它的形状酷似字母H。4个三极管组成H的4条垂直腿,而电机就是H中的横杠(注意:图4.12与随后的两个图都只是示意图,而不是完整的电路图,其中三极管的驱动电路没有画出来)。如图所示,H桥式电机驱动电路包括4个三极管和一个电机。要使电机运转,必须导通对角线上的一对三极管。根据不同三极管对的导通情况,电流可能会从左至右或从右至左流过电机,从而控制电机的转向。图4.12 H桥驱动电路 要使

12、电机运转,必须使对角线上的一对三极管导通。例如,如图4.13所示,当Q1管和Q4管导通时,电流就从 HYPERLINK :/bbs.elecfans /zhuti_power_1.html t :/bbs.elecfans /_blank 电源正极经Q1从左至右穿过电机,然后再经Q4回到电源负极。按图中电流箭头所示,该流向的电流将驱动电机顺时针转动。当三极管Q1和Q4导通时,电流将从左至右流过电机,从而驱动电机按特定方向转动(电机周围的箭头指示为顺时针方向)。图4.13 H桥电路驱动电机顺时针转动图4.14所示为另一对三极管Q2和Q3导通的情况,电流将从右至左流过电机。当三极管Q2和Q3导通时

13、,电流将从右至左流过电机,从而驱动电机沿另一方向转动(电机周围的箭头表示为逆时针方向)。图4.14 H桥驱动电机逆时针转动二、使能控制和方向逻辑 驱动电机时,保证H桥上两个同侧的三极管不会同时导通非常重要。如果三极管Q1和Q2同时导通,那么电流就会从正极穿过两个三极管直接回到负极。此时,电路中除了三极管外没有其他任何负载,因此电路上的电流就可能达到最大值(该电流仅受电源性能限制),甚至烧坏三极管。基于上述原因,在实际驱动电路常要用硬件电路方便地控制三极管的开关。 图4.155 所示就是基于这种考虑的改进电路,它在基本H桥电路的基础上增加了4个与门和2个非门。4个与门同一个“使能”导 HYPER

14、LINK :/bbs.elecfans /zhuti_wireless_1.html t :/bbs.elecfans /_blank 通信号相接,这样,用这一个信号就能控制整个电路的开关。而2个非门通过提供一种方向输人,可以保证任何时候在H桥的同侧腿上都只有一个三极管能导通。(与本节前面的示意图一样,图4.15所示也不是一个完整的电路图,特别是图中与门和三极管直接连接是不能正常工作的。)图4.15 具有使能控制和方向逻辑的H桥电路 采用以上方法,电机的运转就只需要用三个信号控制:两个方向信号和一个使能信号。如果DIRL信号为0,DIRR信号为1,并且使能信号是1,那么三极管Q1和Q4导通,电

15、流从左至右流经电机(如图4.16所示);如果DIRL信号变为1,而DIRR信号变为0,那么Q2和Q3将导通,电流则反向流过电机。四、软件部分设计:4.1、程序框图显示提示,开发者、版本信息硬件上电待命键盘输入目的楼层记录并该楼层标志位否结束键是否按下 是程序开始运行While(1). 运行至最后目 的楼层继续否键盘扫描电梯门,电机运行,延时lcd显示,7段数码管显示 若相等电机停转,电梯门开,延时lcd显示,7段数码管显示当前楼层标志位加一并与存储楼层对比电机运行,到达下一层否否是是结束待命4.2、C51单片机汇编、C语言混编程序:; 电梯。SRC generated from: 电梯.c;

16、COMPILER INVOKED BY:; C:KeilC51BINC51.EXE 电梯.c BROWSE DEBUG OBJECTEXTEND$NOMOD51NAME电梯P0DATA080HP1DATA090HP2DATA0A0HP3DATA0B0HT0BIT0B0H.4ACBIT0D0H.6T1BIT0B0H.5T2BIT090H.0EABIT0A8H.7IEDATA0A8HclockBIT0B0H.0EXF2BIT0C8H.6RDBIT0B0H.7ESBIT0A8H.4IPDATA0B8HRIBIT098H.0INT0BIT0B0H.2CYBIT0D0H.7TIBIT098H.1INT1

17、BIT0B0H.3RCAP2HDATA0CBHPSBIT0B8H.4SPDATA081HT2EXBIT090H.1OVBIT0D0H.2RCAP2LDATA0CAHC_T2BIT0C8H.1WRBIT0B0H.6RCLKBIT0C8H.5TCLKBIT0C8H.4SBUFDATA099HPCONDATA087HSCONDATA098HTMODDATA089HTCONDATA088HIE0BIT088H.1IE1BIT088H.3BDATA0F0HCP_RL2BIT0C8H.0ACCDATA0E0Hservo_doorBIT0B0H.7ET0BIT0A8H.1ET1BIT0A8H.3TF0BIT

18、088H.5ET2BIT0A8H.5TF1BIT088H.7TF2BIT0C8H.7RB8BIT098H.2TH0DATA08CHEX0BIT0A8H.0IT0BIT088H.0TH1DATA08DHTB8BIT098H.3EX1BIT0A8H.2IT1BIT088H.2TH2DATA0CDHPBIT0D0H.0SM0BIT098H.7TL0DATA08AHSM1BIT098H.6TL1DATA08BHSM2BIT098H.5TL2DATA0CCHPT0BIT0B8H.1PT1BIT0B8H.3RS0BIT0D0H.3PT2BIT0B8H.5TR0BIT088H.4RS1BIT0D0H.4TR

19、1BIT088H.6TR2BIT0C8H.2PX0BIT0B8H.0PX1BIT0B8H.2DPHDATA083HDPLDATA082HEXEN2BIT0C8H.3RENBIT098H.4T2CONDATA0C8HRXDBIT0B0H.0TXDBIT0B0H.1F0BIT0D0H.5PSWDATA0D0H?PR?_delay?SMARTCAR SEGMENT CODE ?PR?_ABS?SMARTCAR SEGMENT CODE ?PR?keysort?SMARTCAR SEGMENT CODE ?PR?keycheck?SMARTCAR SEGMENT CODE ?PR?sys_init?S

20、MARTCAR SEGMENT CODE ?PR?_BCD?SMARTCAR SEGMENT CODE ?PR?main?SMARTCAR SEGMENT CODE ?PR?TIME_BASE?SMARTCAR SEGMENT CODE ?C_INITSEG SEGMENT CODE ?BI?SMARTCAR SEGMENT BIT ?DT?SMARTCAR SEGMENT DATA EXTRNCODE (?C_STARTUP)PUBLICfloor_up_2PUBLICfloor_up_1PUBLICrankkeyPUBLICopendoorPUBLICiPUBLICup_flagPUBLI

21、CrowPUBLICfloor_down_5PUBLICfloor_down_4PUBLICfloor_down_3PUBLICfloor_down_2PUBLICpressflagPUBLICkeyPUBLICkey_flagPUBLICstop_flagPUBLICtempPUBLICdown_flagPUBLICfloor_flag_5PUBLICfloor_flag_4PUBLICfloor_flag_3PUBLICfloor_flag_2PUBLICfloor_flag_1PUBLICstartPUBLICclose_doorPUBLICrankPUBLICcountPUBLICro

22、wkeyPUBLICfloor_up_4PUBLICfloor_up_3PUBLICTIME_BASEPUBLICmainPUBLIC_BCDPUBLICsys_initPUBLICkeycheckPUBLICkeysortPUBLIC_ABSPUBLIC_delayRSEG ?BI?SMARTCAR floor_up_3: DBIT 1 floor_up_4: DBIT 1 close_door: DBIT 1 start: DBIT 1 floor_flag_1: DBIT 1 floor_flag_2: DBIT 1 floor_flag_3: DBIT 1 floor_flag_4:

23、DBIT 1 floor_flag_5: DBIT 1 down_flag: DBIT 1 stop_flag: DBIT 1 pressflag: DBIT 1 floor_down_2: DBIT 1 floor_down_3: DBIT 1 floor_down_4: DBIT 1 floor_down_5: DBIT 1 up_flag: DBIT 1 opendoor: DBIT 1 floor_up_1: DBIT 1 floor_up_2: DBIT 1RSEG ?DT?SMARTCAR rowkey: DS 1 count: DS 2 rank: DS 1 temp: DS 1

24、 key_flag: DS 16 key: DS 1 row: DS 1 i: DS 1 rankkey: DS 1RSEG ?C_INITSEGDB002HDBcountDW00000HDB010HDBkey_flagDB000HDB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000HDB 000H,000H,000H,000H,000HDB001HDBkeyDB000HDB001HDBiDB000HDB0C1H, pressflag + 000H; bit-initDB0C1H, up_flag + 000H; bit-initDB0C1H,

25、 down_flag + 000H; bit-initDB0C1H, stop_flag + 000H; bit-initDB001HDBrowkeyDB000HDB001HDBrankkeyDB000HDB001HDBtempDB000HDB001HDBrowDB000HDB001HDBrankDB000H DB0C1H, floor_flag_1 + 000H; bit-init DB0C1H, floor_flag_2 + 000H; bit-initDB0C1H, floor_flag_3 + 000H; bit-initDB0C1H, floor_flag_4 + 000H; bit

26、-initDB0C1H, floor_flag_5 + 000H; bit-initDB0C1H, floor_down_5 + 000H; bit-initDB0C1H, floor_up_4 + 000H; bit-initDB0C1H, floor_down_4 + 000H; bit-initDB0C1H, floor_up_3 + 000H; bit-initDB0C1H, floor_down_3 + 000H; bit-initDB0C1H, floor_up_2 + 000H; bit-initDB0C1H, floor_down_2 + 000H; bit-initDB0C1

27、H, floor_up_1 + 000H; bit-initDB0C1H, opendoor + 000H; bit-initDB0C1H, close_door + 000H; bit-initDB0C1H, start + 000H; bit-init; /晶振 12MHz 6T模式,总线频率2MHz 指令0.5us; #pragma src; #include /89C52的头文件; ; #define T0_HIGH 0 xff /T0计时器寄存器初值; #define T0_LOW 0 x9b /溢出计数80个,定时周期80*0.25us=20us; /为了保证主程序正常运行,定时器

28、计数最好不要小于80个; ; #define keynumber 16 16个按键标志; #define KEYIO P2 4*4键盘输入; #define output P1 lcd12864数据D0D7; #define nobcd P0 BCD端口输出; ; sbit clock=P30; lcd12864时钟输出端; sbit servo_door=P37; 舵机控制门输出端口; int count=0; ; char key_flagkeynumber=0; 按键标志位; ; char key=0; char i=0; ; bit pressflag=0; bit up_flag=0

29、; bit down_flag=0; 控制信号标志位; bit stop_flag=0; ; ; ; ; ; char rowkey=0; 键盘反选变量设置; char rankkey=0; char temp=0; char row=0; char rank=0; ; bit floor_flag_1=0;、 各楼层标志位; bit floor_flag_2=0; bit floor_flag_3=0; bit floor_flag_4=0; bit floor_flag_5=0; bit floor_down_5=0; bit floor_up_4=0; bit floor_down_4=

30、0; bit floor_up_3=0; bit floor_down_3=0; bit floor_up_2=0; bit floor_down_2=0; bit floor_up_1=0; bit opendoor=0; bit close_door=0; bit start=0; ; /; void delay(unsigned int i)/延时函数_delay:USING0; SOURCE LINE # 56; Variable i?040 assigned to Register R6/R7 ; ; SOURCE LINE # 57; unsigned char j; for(;i

31、0;i-); SOURCE LINE # 59?C0001:SETB CMOV A,R7SUBB A,#00HMOV A,R6SUBB A,#00HJC ?C0007; for(j=0;j=0) return i; SOURCE LINE # 65CLR CMOV A,R6XRL A,#080HSUBB A,#080HJC ?C0008RET ?C0008:; else return -i; SOURCE LINE # 66CLR CCLR ASUBB A,R7MOV R7,ACLR ASUBB A,R6MOV R6,A; ; SOURCE LINE # 67?C0009:RET ; END

32、OF _ABS; /; void keysort(void)RSEG ?PR?keysort?SMARTCARkeysort:USING0; SOURCE LINE # 69; ; SOURCE LINE # 70; for(i=0;i16;i+); SOURCE LINE # 71CLR AMOV i,A?C0011:; ; SOURCE LINE # 72; if(key=i) key_flagi=1; SOURCE LINE # 73MOV A,keyCJNE A,i,?C0013MOV A,#LOW (key_flag) 读并且记录标志位函数ADD A,iMOV R0,AMOV R0,

33、#01H; ; SOURCE LINE # 74?C0013:INC iMOV A,iCJNE A,#010H,?C0011?C0012:; ; for(i=0;i4); SOURCE LINE # 132MOV A,rankkeyMOV R0,#04H?C0114:MOV C,ACC.7RRC ADJNZ R0,?C0114MOV rankkey,A; ; ; SOURCE LINE # 134; for(i=0;i=3;i+); SOURCE LINE # 135CLR AMOV R4,A?C0057:; ; SOURCE LINE # 136; temp=0 x01; SOURCE LI

34、NE # 137MOV temp,#01H; temp=(tempi); SOURCE LINE # 138MOV A,tempMOV R0,AR4INC R0SJMP ?C0116?C0115:CLR CRLC A?C0116:DJNZ R0,?C0115MOV temp,A; if(rowkey&temp)!=0) row=i+1;i=4; SOURCE LINE # 139ANL A,rowkeyJZ ?C0059MOV A,R4INC AMOV row,AMOV R4,#04H; ; SOURCE LINE # 140?C0059:INC R4SETB CMOV A,R4XRL A,#

35、080HSUBB A,#083HJC ?C0057?C0058:; ; ; for(i=0;i=3;i+); SOURCE LINE # 143CLR AMOV R4,A?C0061:; ; SOURCE LINE # 144; temp=0 x01; SOURCE LINE # 145MOV temp,#01H; temp=(tempi); SOURCE LINE # 146MOV A,tempMOV R0,AR4INC R0SJMP ?C0118?C0117:CLR CRLC A?C0118:DJNZ R0,?C0117MOV temp,A; if(rankkey&temp)!=0) ra

36、nk=i+1;i=4; SOURCE LINE # 147ANL A,rankkeyJZ ?C0063MOV A,R4INC AMOV rank,AMOV R4,#04H; ; SOURCE LINE # 148?C0063:INC R4SETB CMOV A,R4XRL A,#080HSUBB A,#083HJC ?C0061?C0062:; ; if(row=1) ; SOURCE LINE # 150MOV A,rowCJNE A,#01H,?C0065; ; SOURCE LINE # 151; if(rank=1) key=0; SOURCE LINE # 152MOV A,rank

37、CJNE A,#01H,?C0066CLR AMOV key,A?C0066:; if(rank=2) key=1; SOURCE LINE # 153MOV A,rankCJNE A,#02H,?C0067MOV key,#01H?C0067:; if(rank=3) key=2; SOURCE LINE # 154MOV A,rankCJNE A,#03H,?C0068MOV key,#02H?C0068:; if(rank=4) key=3; SOURCE LINE # 155MOV A,rankCJNE A,#04H,?C0065MOV key,#03H; ; SOURCE LINE

38、# 156?C0065:; if(row=2); SOURCE LINE # 157MOV A,rowCJNE A,#02H,?C0070; ; SOURCE LINE # 158; if(rank=1) key=4; SOURCE LINE # 159MOV A,rankCJNE A,#01H,?C0071MOV key,#04H?C0071:; if(rank=2) key=5; SOURCE LINE # 160MOV A,rankCJNE A,#02H,?C0072MOV key,#05H?C0072:; if(rank=3) key=6; SOURCE LINE # 161MOV A

39、,rankCJNE A,#03H,?C0073MOV key,#06H?C0073:; if(rank=4) key=7; SOURCE LINE # 162MOV A,rankCJNE A,#04H,?C0070MOV key,#07H; ; SOURCE LINE # 163?C0070:; if(row=3); SOURCE LINE # 164MOV A,rowCJNE A,#03H,?C0075; ; SOURCE LINE # 165; if(rank=1) key=8; SOURCE LINE # 166MOV A,rankCJNE A,#01H,?C0076MOV key,#0

40、8H?C0076:; if(rank=2) key=9; SOURCE LINE # 167MOV A,rankCJNE A,#02H,?C0077MOV key,#09H?C0077:; if(rank=3) key=10; SOURCE LINE # 168MOV A,rankCJNE A,#03H,?C0078MOV key,#0AH?C0078:; if(rank=4) key=11; SOURCE LINE # 169MOV A,rankCJNE A,#04H,?C0075MOV key,#0BH; ; SOURCE LINE # 170?C0075:; if(row=4); SOU

41、RCE LINE # 171MOV A,rowCJNE A,#04H,?C0080; ; SOURCE LINE # 172; if(rank=1) key=12; SOURCE LINE # 173MOV A,rankCJNE A,#01H,?C0081MOV key,#0CH?C0081:; if(rank=2) key=13; SOURCE LINE # 174MOV A,rankCJNE A,#02H,?C0082MOV key,#0DH?C0082:; if(rank=3) key=14; SOURCE LINE # 175MOV A,rankCJNE A,#03H,?C0083MO

42、V key,#0EH?C0083:; if(rank=4) key=15; SOURCE LINE # 176MOV A,rankCJNE A,#04H,?C0080MOV key,#0FH; ; SOURCE LINE # 177?C0080:; rank=0; SOURCE LINE # 178CLR AMOV rank,A; row=0; SOURCE LINE # 179MOV row,A; rowkey=0; SOURCE LINE # 180MOV rowkey,A; rankkey=0; ; SOURCE LINE # 181MOV rankkey,A; ; SOURCE LIN

43、E # 182; ; SOURCE LINE # 183?C0085:; while(P2!=0 x0f); SOURCE LINE # 184MOV A,P2CJNE A,#0FH,?C0085; ; SOURCE LINE # 185; /delay(5); ; SOURCE LINE # 187?C0086:; return key; SOURCE LINE # 188MOV R7,key; ; ; SOURCE LINE # 190?C0087:RET ; END OF keycheck; void sys_init(void) 单片机IO口初始化RSEG ?PR?sys_init?S

44、MARTCARsys_init:; SOURCE LINE # 191; ; SOURCE LINE # 192; /IO口设置; ; ; ; ; /定时器设置 ; ; TMOD=0 x11; /定时器0方式1; SOURCE LINE # 200MOV TMOD,#011H; TH0=T0_HIGH; /定时器赋初值; SOURCE LINE # 201MOV TH0,#0FFH; TL0=T0_LOW ; SOURCE LINE # 202MOV TL0,#09BH; ; TR0=1; /定时器运行 ; SOURCE LINE # 204SETB TR0; ET0=1; /开定时器中断;

45、SOURCE LINE # 205SETB ET0; EA=1; /开总中断 ; SOURCE LINE # 206SETB EA; ; SOURCE LINE # 207RET ; END OF sys_init; ; unsigned char BCD(char keyp)RSEG ?PR?_BCD?SMARTCAR_BCD:USING0; SOURCE LINE # 209; Variable keyp?544 assigned to Register R7 ; ; SOURCE LINE # 210; if(keyp=0 x00) keyp=0 x00; SOURCE LINE # 2

46、11MOV A,R7JNZ ?C0089MOV R7,A?C0089:; if(keyp=0 x01) keyp=0 x01; ; SOURCE LINE # 212CJNE R7,#01H,?C0090MOV R7,#01H?C0090:; if(keyp=0 x02) keyp=0 x02; ; SOURCE LINE # 213CJNE R7,#02H,?C0091MOV R7,#02H?C0091:; if(keyp=0 x03) keyp=0 x03; ; SOURCE LINE # 214CJNE R7,#03H,?C0092MOV R7,#03H?C0092:; if(keyp=

47、0 x04) keyp=0 x04; ; SOURCE LINE # 215CJNE R7,#04H,?C0093MOV R7,#04H?C0093:; if(keyp=0 x05) keyp=0 x05; ; SOURCE LINE # 216CJNE R7,#05H,?C0094MOV R7,#05H?C0094:; if(keyp=0 x06) keyp=0 x06; ; SOURCE LINE # 217CJNE R7,#06H,?C0095MOV R7,#06H?C0095:; if(keyp=0 x07) keyp=0 x07; ; SOURCE LINE # 218CJNE R7

48、,#07H,?C0096MOV R7,#07H?C0096:; if(keyp=0 x08) keyp=0 x08; ; SOURCE LINE # 219CJNE R7,#08H,?C0097MOV R7,#08H?C0097:; if(keyp=0 x09) keyp=0 x09; SOURCE LINE # 220CJNE R7,#09H,?C0098MOV R7,#09H?C0098:; ; if(keyp=0 x0a) keyp=0 x10; ; SOURCE LINE # 222CJNE R7,#0AH,?C0099MOV R7,#010H?C0099:; ; if(keyp=0

49、x0b) keyp=0 x11; ; SOURCE LINE # 224CJNE R7,#0BH,?C0100MOV R7,#011H?C0100:; if(keyp=0 x0c) keyp=0 x12; ; SOURCE LINE # 225CJNE R7,#0CH,?C0101MOV R7,#012H?C0101:; if(keyp=0 x0d) keyp=0 x13; ; SOURCE LINE # 226CJNE R7,#0DH,?C0102MOV R7,#013H?C0102:; if(keyp=0 x0e) keyp=0 x14; ; SOURCE LINE # 227CJNE R

50、7,#0EH,?C0103MOV R7,#014H?C0103:; if(keyp=0 x0f) keyp=0 x15; ; SOURCE LINE # 228CJNE R7,#0FH,?C0104MOV R7,#015H?C0104:; ; return keyp; SOURCE LINE # 230; ; SOURCE LINE # 231?C0105:RET ; END OF _BCD; ; /; void main(void) 主函数 main:USING0; SOURCE LINE # 234; ; SOURCE LINE # 235; sys_init(); /初始化; SOURC

51、E LINE # 236LCALLsys_init?C0106:; while(1); SOURCE LINE # 237; ; SOURCE LINE # 238; keycheck(); SOURCE LINE # 239LCALLkeycheck; nobcd=key; SOURCE LINE # 240MOV P0,key; output=BCD(key); SOURCE LINE # 241MOV R7,keyLCALL_BCDMOV P1,R7; ; ; SOURCE LINE # 243SJMP ?C0106; END OF mainCSEGAT0000BHLJMPTIME_BASE; ; /; void TIME_BASE(void) interrupt 1 using 1 /定时器生成控制PWMRSEG ?PR?TIME_BASE?SMARTCARUSING1TIME_BASE:PUSH ACCPUSH PSW; SOURCE LINE # 246; ; TH0=T0_HIGH; /赋初值 ; SOURCE LINE # 248MOV TH0,#0FFH; TL0=T0_LOW ; SOURCE LINE # 249MOV TL0,#09BH; count+; SOURCE LINE #

温馨提示

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

评论

0/150

提交评论