首页专业论文技术应用政策标准解决方案常用资料经验交流教育培训企业技术专家访谈电力期刊
您现在的位置:北极星电力网 > 技术频道 > 专业论文 > 单片机遥控控制酒店客房灯光系统

单片机遥控控制酒店客房灯光系统

北极星电力网技术频道    作者:3   2007/12/24 11:48:52   

摘要:本文通过老式酒店客房灯光控制系统进行改造,将原机的机械开关控制改为单片机红外线遥控控制,说明了单片机在现代酒店灯光智能控制中的适用性、灵活性、先进性。通过对客房灯光控制电路改造后,大大提高了客人的使用舒适感,使酒店的硬件设施提高了一个台阶。要害词:单片机遥控客房灯光前言:本人工作的酒店开业于一九九八年,至今已有七年之久,当初选型设备老化过时,非凡对于科技飞速发展的当今。酒店原有的智能控制系统较周边新开张酒店相比,已跟不上潮流,失去竞争能力。例如原来酒店客房灯光控制系统均采用TCL2.0系列产品,房间的电视、台灯、地灯、鱼缸照明、夜灯、廊灯、吧台灯等开关与床头灯调光开关均集中安装在床头柜处(如图1)。由于开关较多且固定在床头柜侧面,客人想开灯时必须先看清开关下面的标记才能正确开灯,有时为开一盏灯竟把所有的开关都按了一遍,使用时极为不便。现在大多数星级酒店都采用微动开关轻触式集中控制面板,安装在床头柜的正上方。虽然较以前直观,但是开关多且固定仍不是十分方便。本人采用8051系列单片机将原来固定的机械式开关改用遥控控制,这样一个遥控器就可以控制整个房间的灯光开启,电源控制箱可以放在床头柜内;遥控器在放置在床头柜上,可以任意移动,还可以在遥控面板中间加装一液晶时钟(如图2所示)。美观且实用即大方便客人的使用。图1老式控制柜图2新式遥控发射器一硬件电路的设计1、遥控发射电路如图3所示,为该系统遥控发射器电原理图,其中P1口作为键盘扫描端口,具有16个操作键,可分别控制单片机发出16种不同脉冲,执行16种操作。第9脚为单片机的复位脚,采用RC上电复位电路;15脚作为红外线遥控码的输出口,用于输出38KHz载波编码。脉冲经9013放大然后由红外发射管输出;18、19脚接12M晶振。P1.4—P1.7需接上拉电阻。图3遥控发射电路图2、遥控接收电路如图4所示,为该系统遥控接收电原理图,其中P1.0—P1.2口作为数码管的二进制数据输出,显示数字为“0—7”,“0”表示最暗,“7”表示最亮,采用带锁存功能的七段译码电路74HC4511集成块译码显示数值。4511的LE端接8051的30脚(地址锁存答应控制);P0.0—P0.7以及P2.2—P2.7作为14个电器的电源控制输出,接口用继电器隔离输出。P2.0口为调光脉冲输出,输出脉冲由三极管9012放大后经光电耦合器MOC3021驱动双向可控硅控制负载;P3.0口为交流50Hz同步检测输入。系统对市电进行变压、整流、并经施密特触发器整形后得到100Hz的方波(周期10ms),作为发送调光脉冲的同步信号,系统采用10ms为一个“单位时间”的长度,灯的亮度越高,则可控硅导通时间的占空比越大;P3.1口为红外遥控码输入,采用集成红外线接收路SFH506-38,此集成元件体积小、抗干扰性好、灵敏度高、并且价格低廉。它仅有三个脚,分别是电源正极、电源负极以及信号输出端,其工作电压为5V左右,它的主要功能包括放大、选频、解调几大部分,要求输入是已经被调制的信号,经过它的接收放大和解调会在输出端直接输出原始信号至P3.1脚。这款红外线接收电路接收距离可以达8米左右,完全可以满足客房内的遥控距离(一般客房标准间都在30平米左右);P3.2脚为外部中断0输入脚,采用下降沿触发,当有信号时,第一位码的低电平启动中断程序,实时接收数据帧。第9脚为单片机的复位脚,采用RC上电复位电路;18、19脚接12M晶振。图4遥控接收电路图二系统的遥控功能实现方法1、遥控编码格式该遥控器采用脉冲个数编码,不同的脉冲个数代表不同的码,最小为2个脉冲,最大为17个脉冲。为了使接收可靠,第一位码宽为3ms,其余为1ms,遥控数据帧间隔大于10ms,如图5所示。图5遥控脉冲编码图2、遥控码的发射当某个操作键按下时,单片机先读出该键值,然后根据键值设定的遥控脉冲个数,再调制成38KHz的方波由红外线发射管发射出去。P3.5端口的输出调制波如图5所示。3、数据帧的接收处理当红外线接收器输出脉冲帧数据时,第一位码的低电平将启动中断程序,实时接收数据帧。在数据接收时,先对第一位(起始位)码的码宽进行验证。若第一位低电平码的脉宽小于2ms,将作为错误码处理;否则认为是起始码,累加器A加1。当间隔位的高电平大于3ms时,结束接收,然后根据累加器A中的脉冲个数,执行相应的输出操作。图6为红外线接收器输出的一帧遥控码波形图。图6一帧遥控码波形图三遥控发射及接收控制程序流程图1、遥控发射程序控制流程图图7遥控发射控制流程图2、遥控接收程序控制流程图图8遥控接收控制流程图四主要程序计算得周期为26.3us,则定时器设定为模式2,初值为(256-13)=0F3H。利用1ms与3ms延时程序控制定时器的启停,从而控制P3.5发出相应的脉冲。并根据寄存器A中的脉冲个数确定发送次数。MOVIE,#00H;关所有中断MOVTMOD,#20H;8位自动重装初值模式MOVTH1,#0F3H;定时为13微秒初值MOVTL1,#0F3HSETBEA;开总中断答应INTT1:CPLP3.5;38kHZ红外线遥控信号产生RETI;中断返回REMOTE:MOVR1,A;装入发射脉冲个数LJMPOUT3;转第一个码发射处理OUT:MOVR0,#64H;1MS宽低电平发射控制数据OUT1:SETBET1;开T1中断SETBTR1;开启定时器T1NOP;延时NOPNOPNOPNOPDJNZR0,OUT1;时间不到转OUT1再循环MOVR0,#3CH;1MS高电平间隙控制数据OUT2:CLRTR1;关定时器T1CLRET1;关T1中断CLRP3.5;关脉冲输出NOP;空操作延时NOPNOPNOPNOPNOPNOPNOPNOPNOPNOPDJNZR0,OUT2;时间不到转OUT2再循环DJNZR1,OUT;脉冲未发完,转OUT再循环发射LCALLDL500MSRETOUT3:MOVR0,#0FFH;装发谢3MS宽控制数据LJMPOUT1;转OUT14、遥控接收及处理程序采用中断接收,经过红外线接收集电路SFH506接收处理后的脉冲信号送至P3.1与P3.2(中断输入脚,采用低电平触发),当接收到第一个低电平时将启动中断程序,实时接收数据帧,接收程序首先采用8us循环计时程序对第一位码(起始码)的码宽进行验证,当计时大于8×255=2040us时则认为是起始码,开始对输入的脉冲进行计数与校验,将计数值送到累加A中。脉冲高电位大于设定时间513×6=3072us时则结束接收,然后根据累加器中的脉冲个数,跳转至相应的操作子程序。2——15个脉冲所对应程序分别控制每盏灯的开关,通过将相应输出端口取反方法,从而控制了灯的亮灭,系统上电时所有输出I/O口均为“1”(高电平)外接晶体管均无输出,当某个按键按下时,程序将相应端口取反,输出为“0”(低电平)外接晶体管放大后,驱动继电器继合亮灯。再次按下该键时,程序再次将该相应端口取反,输出为“1”关灯,如此便控制了每一路灯的亮、灭。16、17个脉冲为亮度调整信号,接收到该脉冲信号时,将P1口加“1”(调亮)或减“1”(调暗),然后再调亮度调整程序,亮度调整程序根据P1口的值确定灯的亮度。INTEX0:CLREX0;关外中断JNBP3.1,READ1;P3.1口为低电平转READ1READOUTT0:SETBEX0;P3.1口为高电平开中断(系干扰)RETI;退出中断READ1:CLRA;清AMOVDPH,A;清DPTRMOVDPL,AHARD1:JBP3.1,HARD11;P3.1变高电平转HARD11INCDPTR;用DPTR对低电平计数NOP;1微秒延时NOPNOPAJMPHARD1;转HARD1循环(循环周期为8微秒)HARD11:MOVA,DPH;DPTR高8位放入AJZREADOUTT0;为0(脉宽小于8*255=2毫秒)退出CLRA;不为0,说明是第一个宽脉冲(3毫秒)READ11:INCA;脉冲个数计1READ12:JNBP3.1,READ12;低电平时等待MOVR1,#06H;高电平宽度判定定时值READ13:JNBP3.1,READ11;变低电平时转READ11脉冲计数LCALLDELAY;延时(512微秒)DJNZR1,READ13;6次延时不到转READ13再延时DECA;超过3毫秒判为结束,减1DECA;减1JZFUN0;为0执行FUN0(2个脉冲)DECA;减1...FUN0:CPLP0.0;P0口各端口开关输出控制LJMPREADOUTT0;转中断退出FUN1:CPLP0.1LJMPREADOUTT0...FUN14:INCP1MOVA,P1CJNEA,#00H,OUTT0;不等转OUTT0(显示值大于7)MOVP1,#0FFH;放回P1(显示值为7)OUTT0:LCALLLOOP;亮度调整LJMPREADOUTT0;中断退出FUN15:DECP1;P1口值减1MOVA,P1;移入ACJNEA,#0F7H,OUTT1;不等转OUTT1(显示值小于0)MOVP1,#0F8H;放回P1(显示值为0)OUTT1:LCALLLOOP;亮度调整LJMPREADOUTT0;中断退出...5、调光程序系统调光电路采用双向可控硅,利用它的“过零自动关闭”特性,AT89C51只需在每个交流信号的1/2周期(10ms)内控制可控硅打开的时刻,由于交流电过零点时可控硅自动关断,即间接控制了灯光的亮度。上电时,首先调用调光程序,根据P1口值设定延时值并放在寄存器B中。再根据P3.0输入的交流同步信号,确定调光脉冲的发送时间,当交流信号过零时调用调光程序,调光程序根据寄存器B中的值确定延时次数(每次延时512us)从而确定调光脉冲的发送时间,延时到P2.0置“0”经过外接晶体管反向放大后经光电耦合器隔离驱动双向可控硅导通的时间,当交流信号再次过零时,双向可控硅自动关闭,再次调用调光程序。这样便控制了双向可控硅的导通时间,从而达到调光的目的。START:LCALLCLEARIO;上电初始化LCALLLOOP;调用调光控制程序MAIN:JBP3.0,MAIN;50HZ交流电未过零转MAINLCALLDLX;过零点时调用延时子程序(延时可变)CLRP2.0;发调光脉冲LCALLDELAY;持续512微秒SETBP2.0;关调光脉冲LJMPMAIN;转MAIN循环DLX:MOVR2,B;置延时初值DLX1:LCALLDELAY;调512微秒延时子程序DJNZR2,DLX1;循环控制RET;返回LOOP:MOVA,P1;读入P1口值SUBBA,#0FFH;比较JZLOOP7;值为#0FFH(显示7)时转LOOP7MOVA,P1SUBBA,#0FEHJZLOOP6;值为#0FEH(显示6)时转LOOP6MOVA,P1...RETLOOP7:MOVB,#01H;设置延时值#01H(最亮)RET;返回LOOP6:MOVB,#02H;设置延时值#02H(次亮)RET;返回LOOP5:MOVB,#04H...RET6、延时子程序采用循环结构实现513微秒、10微秒、500微秒延时功能。DELAY:MOVR2,#0FFH;513微秒延时程序DELAY1:DJNZR2,DELAY1RETDL10MS:MOVR3,#14H;10毫秒延时程序DL10MS1:LCALLDELAYDJNZR3,DL10MS1RETDL500MS:MOVR4,#32H;500毫秒延时程序DL500MS1:LCALLDL10MSDJNZR4,DL500MS1RET五、系统调试上电,测试发送板单片机各IO口电平,P3.5、P1.0、P1.1、P1.2、P1.3均为低电平,其余均为高电平,表明单片机上电复位正常,且程序运行正常。然后用万用表毫伏档测量红外线发射管两端,同时按各输入键,表针应有左右摆动现像,则表明键扫描程序与红外线发射程序运行正常,且在发射红外线脉冲。接收电路上电时,数码管显示“7”各继电器及可控硅均无输出。遥控信号输入脚P3.1应高电平。则表明单片机上电复位正常,外围电路接线正确。然后将发射板红外线发射管对准接收电路,按压输入键,同时用万用表测量P3.1脚,应有稍微摆动。红外脉冲接收正常。且相应输出继电器应动作,或调光电路应正确动。如无动作或万用有针无摆动,可以稍为改动发射脉冲频率,将定时器初值改为(0FFH-12)=0F4H对应发射频率为41.7KHz或(0FFH-13)=0F3H对应发射频率为38.5KHz,因为红外线发射与接收电路的中心频率相差1KHz时大都能正常遥控,相差2KHz以上会出现遥控失灵现象。大多晶振或接收电路都有一定的频率偏差,我们可以调整定时器的初值来稍为改动发射频率或换用12M晶振,直到能够接收为止。调光程序调试,按调光键,调至显示“0”,此时灯为最暗,应熄灭。否则可以改变调光程序中寄存器B中的值,加长或减少延时时间,使灯能在最低亮度时能正常熄灭,最高亮度时能达最大亮度。按本程序中的值,实测数据如下。延时子程序为512us,电源交流电压227V灯光亮度显示负载电压(60W)灯光亮度显示负载电压(60W)02V4102V120V5135V247V6168V373V7216V六、结束语通过此次改造,利用单片机遥控控制房间灯光取得了良好的效果,使酒店的硬件服务水平提高了一个台阶。同时也应总结经验,逐步完善客房灯光智能控制,例如可以增加房间灯具的自动巡检与电脑联网功能,灯具故障即可自动发出报修信号,服务人员可以通过主服务器方便的了解各个房间电气设备工作情况,即提高了工作效率又方便治理。也体会到我的知识面还是很狭窄,作为从事电气工作的技术人员,在学好本专业的基础前提下,还要不断的学习其他领域的科学技术知识,拓宽自己的知识面,才能胜任新设备、新技术的工作,更好发挥本专业的作用。本人因水平、经验有限,文中难免有错漏以及不足之处,恳请专家、教授及同行批评指正。七、参考文献房小翠主编:《单片微型计算与机电接口技术》国防工业出版社陈永甫主编:《红外线探测与控制电路》人民邮电出版社陈科、陈清山主编:《最新世界晶体三极管详尽参数及互换手册》湖南科学技术出版社科林、孙人杰主编:《TTL、高速CMOS手册》电子工业出版社八、附录1、遥控发射电路原理图附图一遥控发射电路原理图2、遥控接收电路原理图附图二遥控接收电路原理图3、遥控发送控制器程序ORG0000H;程序执行开始地址AJMPSTART;跳至START执行ORG001BH;定时器T1中断入口地址LJMPINTT1;跳至INTT1中断服务程序CLEARIO:MOVP0,#0FFH;P0-P3口置1MOVP1,#0FFHMOVP2,#0FFHMOVP3,#0FFHCLRP3.5;关遥控输出CLEARMEM:MOVSP,#70H;设堆栈基址为70HMOVIE,#00H;关所有中断MOVTMOD,#20H;8位自动重装初值模式MOVTH1,#0F3H;定时为13微秒初值MOVTL1,#0F3HSETBEA;开总中断答应RET;返回START:LCALLCLEARIO;调用初始化子程序;MAIN:LCALLKEYWORK;主体程序。调用查键子程序LJMPMAIN;转MAIN循环NOP;PC值出错处理NOPNOPLJMPSTART;重新初始化INTT1:CPLP3.5;40kHZ红外线遥控信号产生RETI;中断返回KEYWORK:MOVP1,#0F0H;置P1口输入状态MOVA,P1;读入P1口值MOVB,A;P1口值暂存B中CJNEA,#0F0H,KEYHIT;不等于#0FFH,转KEYHIT(有键按下)KEYOUT:RET;没有键按下返回;KEYHIT:LCALLDL10MS;延时去抖动MOVA,P1;再读入P1口值至ACJNEA,B,KEYOUY;A不等于B(是干扰),子程序返回SETBP1.1;有键按下,找键号开始,查0行SETBP1.2SETBP1.3MOVA,P1;读入P1口值CJNEA,#0FEH,KEYVAL0;P1不等于#0FEH,按下键在第0行SETBP1.0;不在第0行,开始查1行CLRP1.1MOVA,P1;读入P1口值CJNEA,#0FDH,KEYVAL1;P1口不等于#0FDH,按下键在第1行SETBP1.1;不在第1行,开始查2行CLRP1.2MOVA,P1;读入P1口值CJNEA,#0FBH,KEYVAL2;P1口不等于#0FBH,按下键在第2行SETBP1.2;不在第2行,开始查3行CLRP1.3MOVA,P1;读入P1口值CJNEA,#0F7H,KEYVAL3;P1口不等于#0F7H,按下键在第3行LJMPKEYOUT;不在第3行,子程序返回KEYVAL0:MOVR2,#00H;按下键在第0行,R2赋行号初值0LJMPKEYVAL4;跳到KEYVAL4KEYVAL1:MOVR2,#04H;按下键在第1行,R2赋行号初值4LJMPKEYVAL4;跳到KEYVAL4KEYVAL2:MOVR2,#08H;按下键在第2行,R2赋行号初值8LJMPKEYVAL4;跳到KEYVAL4KEYVAL3:MOVR2,#0CH;按下键在第3行,R2赋行号初值12LJMPKEYVAL4;跳到KEYVAL4KEYVAL4:MOVDPTR,#KEYVALTAB;翻译成连续数字MOVB,A;P1口值暂存B内ANLB,#0F0H;取高四位MOVR0,#0;清R0KEYVAL5:MOVA,R0;查列号开始,R0数据放入ASUBBA,#04H;A中数减4JNCKEYOUT;借位C为0,查表出错,返回MOVA,R0;查表次数小于4,继续查,MOVCA,@A DPTR;查列号表INCR0;R0加1CJNEA,B,KEYVAL5;查得值和P1口值不等,转KEYVAL5再查DECR0;查得值和P1口值相等,R0减1MOVA,R0;放入A(R0中数值即为列号值)ADDA,R2;与行号初值相加成为键号值(0-15)MOVB,A;键号乘3处理用于JMP散转指令RLA;键号乘3处理用于JMP散转指令ADDA,B;键号乘3处理用于JMP散转指令MOVDPTR,#KEYFUNTAB;取散转功能程序(表)首址JMP@A DPTR;散转至对应功能程序标号KEYFUNTAB:LJMPKEYFUN00;跳到键号0对应功能程序标号LJMPKEYFUN01;跳到键号1对应功能程序标号LJMPKEYFUN02;跳到键号2对应功能程序标号LJMPKEYFUN03;跳到键号3对应功能程序标号LJMPKEYFUN04;跳到键号4对应功能程序标号LJMPKEYFUN05;跳到键号5对应功能程序标号LJMPKEYFUN06;跳到键号6对应功能程序标号LJMPKEYFUN07;跳到键号7对应功能程序标号LJMPKEYFUN08;跳到键号8对应功能程序标号LJMPKEYFUN09;跳到键号9对应功能程序标号LJMPKEYFUN10;跳到键号10对应功能程序标号LJMPKEYFUN11;跳到键号11对应功能程序标号LJMPKEYFUN12;跳到键号12对应功能程序标号LJMPKEYFUN13;跳到键号13对应功能程序标号LJMPKEYFUN14;跳到键号14对应功能程序标号LJMPKEYFUN15;跳到键号15对应功能程序标号RETKEYVALTAB:DB0E0H,0D0H,0B0H,07H;列号对应数据表;对应列号:0123RETKEYFUN00:MOVA,#02H;发2个脉冲LJMPREMOTE;转发送程序RETKEYFUN01:MOVA,#03H;发3个脉冲LJMPREMOTE;转发送程序RETKEYFUN02:MOVA,#04H;发4个脉冲LJMPREMOTE;转发送程序RETKEYFUN03:MOVA,#05H;发5个脉冲LJMPREMOTE;转发送程序RETKEYFUN04:MOVA,#06H;发6个脉冲LJMPREMOTE;转发送程序RETKEYFUN05:MOVA,#07H;发7个脉冲LJMPREMOTE;转发送程序RETKEYFUN06:MOVA,#08H;发8个脉冲LJMPREMOTE;转发送程序RETKEYFUN07:MOVA,#09H;发9个脉冲LJMPREMOTE;转发送程序RETKEYFUN08:MOVA,#0AH;发10个脉冲LJMPREMOTE;转发送程序RETKEYFUN09:MOVA,#0BH;发11个脉冲LJMPREMOTE;转发送程序RETKEYFUN10:MOVA,#0CH;发12个脉冲LJMPREMOTE;转发送程序RETKEYFUN11:MOVA,#0DH;发13个脉冲LJMPREMOTE;转发送程序RETKEYFUN12:MOVA,#0EH;发14个脉冲LJMPREMOTE;转发送程序RETKEYFUN13:MOVA,#0FH;发15个脉冲LJMPREMOTE;转发送程序RETKEYFUN14:MOVA,#10H;发16个脉冲LJMPREMOTE;转发送程序RETKEYFUN15:MOVA,#11H;发17个脉冲LJMPREMOTE;转发送程序RETREMOTE:MOVR1,A;装入发射脉冲个数LJMPOUT3;转第一个码发射处理OUT:MOVR0,#64H;1MS宽低电平发射控制数据OUT1:SETBET1;开T1中断SETBTR1;开启定时器T1NOP;延时NOPNOPNOPNOPDJNZR0,OUT1;时间不到转OUT1再循环MOVR0,#3CH;1MS高电平间隙控制数据OUT2:CLRTR1;关定时器T1CLRET1;关T1中断CLRP3.5;关脉冲输出NOP;空操作延时NOPNOPNOPNOPNOPNOPNOPNOPNOPNOPDJNZR0,OUT2;时间不到转OUT2再循环DJNZR1,OUT;脉冲未发完,转OUT再循环发射LCALLDL500MSRETOUT3:MOVR0,#0FFH;装发谢3MS宽控制数据LJMPOUT1;转OUT1DELAY:MOVR2,#0FFH;513微秒延时程序DELAY1:DJNZR2,DELAY1RETDL10MS:MOVR3,#14H;10毫秒延时程序DL10MS1:LCALLDELAYDJNZR3,DL10MS1RETDL500MS:MOVR4,#32H;500毫秒延时程序DL500MS1:LCALLDL10MSDJNZR4,DL500MS1RETEND;程序结束4、遥控接收控制器程序ORG0000H;程序开始地址LJMPSTART;跳至START执行ORG0003H;外中断0中断入口LJMPINTEX0;跳至INTEX0执行中断服务程序CLEARIO:MOVP0,#0FFH;P0-P3口置1MOVP1,#0FFHMOVP2,#0FFHMOVP3,#0FFHCLEARMEM:MOVIE,#00H;关所有中断SETBEX0;开外中断SETBEA;总中断答应RET;子程序返回START:LCALLCLEARIO;上电初始化LCALLLOOP;调用调光控制程序MAIN:JBP3.0,MAIN;50HZ交流电未过零转MAINLCALLDLX;过零点时调用延时子程序(延时可变)CLRP2.0;发调光脉冲LCALLDELAY;持续512微秒SETBP2.0;关调光脉冲LJMPMAIN;转MAIN循环NOP;PC值出错处理NOPLJMPSTART;出错时重新初始化;采用中断接收INTEX0:CLREX0;关外中断JNBP3.1,READ1;P3.1口为低电平转READ1READOUTT0:SETBEX0;P3.1口为高电平开中断(系干扰)RETI;退出中断READ1:CLRA;清AMOVDPH,A;清DPTRMOVDPL,AHARD1:JBP3.1,HARD11;P3.1变高电平转HARD11INCDPTR;用DPTR对低电平计数NOP;1微秒延时NOPNOPAJMPHARD1;转HARD1循环(循环周期为8微秒)HARD11:MOVA,DPH;DPTR高8位放入AJZREADOUTT0;为0(脉宽小于8×255=2毫秒)退出CLRA;不为0,说明是第一个宽脉冲(3毫秒)READ11:INCA;脉冲个数计1READ12:JNBP3.1,READ12;低电平时等待MOVR1,#06H;高电平宽度判定定时值READ13:JNBP3.1,READ11;变低电平时转READ11脉冲计数LCALLDELAY;延时(512微秒)DJNZR1,READ13;6次延时不到转READ13再延时DECA;超过3毫秒判为结束,减1DECA;减1JZFUN0;为0执行FUN0(2个脉冲)DECA;减1JZFUN1;为0执行FUN1(3个脉冲)DECAJZFUN2;为0执行FUN2(4个脉冲)DECAJZFUN3;为0执行FUN3(5个脉冲)DECAJZFUN4;为0执行FUN4(6个脉冲)DECAJZFUN5;为0执行FUN5(7个脉冲)DECAJZFUN6;为0执行FUN6(8个脉冲)DECAJZFUN7;为0执行FUN7(9个脉冲)DECAJZFUN8;为0执行FUN8(10个脉冲)DECAJZFUN9;为0执行FUN9(11个脉冲)DECAJZFUN10;为0执行FUN10(12个脉冲)DECAJZFUN11;为0执行FUN11(13个脉冲)DECAJZFUN12;为0执行FUN8(114个脉冲)DECAJZFUN13;为0执行FUN9(15个脉冲)DECAJZFUN14;为0执行FUN10(16个脉冲)DECAJZFUN15;为0执行FUN11(17个脉冲)NOPNOPLJMPREADOUTT0;出错退出FUN0:CPLP0.0;P0口各端口开关输出控制LJMPREADOUTT0;转中断退出FUN1:CPLP0.1LJMPREADOUTT0FUN2:CPLP0.2LJMPREADOUTT0FUN3:CPLP0.3LJMPREADOUTT0FUN4:CPLP0.4LJMPREADOUTT0FUN5:CPLP0.5LJMPREADOUTT0FUN6:CPLP0.6LJMPREADOUTT0FUN7:CPLP0.7LJMPREADOUTT0FUN8:CPLP2.7LJMPREADOUTT0FUN9:CPLP2.6LJMPREADOUTT0FUN10:CPLP2.5LJMPREADOUTT0FUN11:CPLP2.4LJMPREADOUTT0FUN12:CPLP2.3LJMPREADOUTT0FUN13:CPLP2.2;P2口各端口开关输出控制LJMPREADOUTT0;转中断退出FUN14:INCP1MOVA,P1CJNEA,#00H,OUTT0;不等转OUTT0(显示值大于7)MOVP1,#0FFH;放回P1(显示值为7)OUTT0:LCALLLOOP;亮度调整LJMPREADOUTT0;中断退出FUN15:DECP1;P1口值减1MOVA,P1;移入ACJNEA,#0F7H,OUTT1;不等转OUTT0(显示值小于0)MOVP1,#0F8H;放回P1(显示值为0)OUTT1:LCALLLOOP;亮度调整LJMPREADOUTT0;中断退出DELAY:MOVR0,#0FFHDELAY1:DJNZR0,DELAY1RETDL10MS:MOVR1,#14HDL10MS1:LCALLDELAYDJNZR1,DL10MS1RETDLX:MOVR2,B;置延时初值DLX1:LCALLDELAY;调512微秒延时子程序DJNZR2,DLX1;循环控制RET;返回;根据数码管指示值设置调光脉冲延时值LOOP:MOVA,P1;读入P1口值SUBBA,#0FFH;比较JZLOOP7;值为#0FFH(显示7)时转LOOP7MOVA,P1SUBBA,#0FEHJZLOOP6;值为#0FEH(显示6)时转LOOP6MOVA,P1SUBBA,#0FDHJZLOOP5;值为#0FDH(显示5)时转LOOP5MOVA,P1SUBBA,#0FCHJZLOOP4;值为#0FCH(显示4)时转LOOP4MOVA,P1SUBBA,#0FBHJZLOOP3;值为#0FBH(显示3)时转LOOP3MOVA,P1SUBBA,#0FAHJZLOOP2;值为#0FAH(显示2)时转LOOP2MOVA,P1SUBBA,#0F9HJZLOOP1;值为#0F9H(显示1)时转LOOP1MOVA,P1SUBBA,#0F8HJZLOOP0;值为#0F8H(显示0)时转LOOP0RET;返回LOOP7:MOVB,#01H;设置延时值#01H(最亮)RET;返回LOOP6:MOVB,#02H;设置延时值#02H(次亮)RET;返回LOOP5:MOVB,#04HRETLOOP4:MOVB,#06HRETLOOP3:MOVB,#08HRETLOOP2:MOVB,#0AHRETLOOP1:MOVB,#0CH;设置延时值#0CH(次暗)RET;返回LOOP0:MOVB,#0DH;设置延时值#0DH(最暗)RET;返回END;程序结束

来源:佚名
友情链接
北极星工程招聘网北极星电气招聘网北极星火电招聘网北极星风电招聘网北极星水电招聘网北极星环保招聘网北极星光伏招聘网北极星节能招聘网招标信息分类电子资料百年建筑网PLC编程培训

广告直拨:   媒体合作/投稿:陈女士 13693626116

关于北极星 | 广告服务 | 会员服务 | 媒体报道 | 营销方案 | 成功案例 | 招聘服务 | 加入我们 | 网站地图 | 联系我们 | 排行

京ICP证080169号京ICP备09003304号-2京公网安备11010502034458号电子公告服务专项备案

网络文化经营许可证 [2019] 5229-579号广播电视节目制作经营许可证 (京) 字第13229号出版物经营许可证新出发京批字第直200384号人力资源服务许可证1101052014340号

Copyright © 2022 Bjx.com.cn All Rights Reserved. 北京火山动力网络技术有限公司 版权所有