收藏 分销(赏)

LED电子钟制作.pdf

上传人:xrp****65 文档编号:6107237 上传时间:2024-11-28 格式:PDF 页数:47 大小:2.51MB
下载 相关 举报
LED电子钟制作.pdf_第1页
第1页 / 共47页
LED电子钟制作.pdf_第2页
第2页 / 共47页
点击查看更多>>
资源描述
LED数码管电子钟 LED数码管电子钟 功能特色 功能特色 声控功能声控功能(通过声音开启屏幕显示与延时关闭屏幕显示)-声控延时可调节范围:1 秒99 秒 红外遥控功能红外遥控功能-通过遥控器可以设置与控制设备 亮度调节功能亮度调节功能-显示屏具有 6 档亮度调节 照明灯照明灯-LED 照明灯,可以通过遥控开启与关闭 贪睡响闹功能贪睡响闹功能-贪睡功能启动后,每隔 5 分钟闹声被重新开启,最多重新开启 3 次 星期闹钟功能星期闹钟功能-可以单独设置一周中每天的闹钟功能是否开启 显示模式功能显示模式功能-具有 6 种显示模式可选,如 23:006:00 之间把亮度切换到最暗或关闭显示 配置与功耗 配置与功耗 微控制器:STC89C52RC 晶振频率:12MHZ 电源电压:DC-12V 功耗:显示关闭:0.15W (LED 数码管显示关闭,LED 照明灯关闭,响闹 BiBi 声关闭)正常显示:1.5W (LED 数码管显示开启,且亮度调到最亮,LED 照明灯关闭,响闹 BiBi 声关闭)最大功率:3W (LED 数码管的所有段都点亮,且亮度调到最亮,LED 照明灯开启,响闹 BiBi 声开启)LED 照明灯功率:350mw D:LED电子钟汇编程序【8052微控制器】(2011-11-11)汇编程序.ASM;LED数码管电子钟汇编程序;(CPU 8052,使用12MHZ晶振);*;$;*;申明8052增加的定时器2的特殊功能寄存器的地址 T2CON DATA DATA 0C8H;定时器2控制寄存器 TH2 DATA DATA 0CDH;定时器2高字节 TL2 DATA DATA 0CCH;定时器2低字节 RCAP2H DATA DATA 0CBH;定时器2捕获寄存器高字节 RCAP2L DATA DATA 0CAH;定时器2捕获寄存器低字节 CPRL2 BIT BIT 0C8H CT2 BIT BIT 0C9H TR2 BIT BIT 0CAH EXEN2 BIT BIT 0CBHTCLK BIT BIT 0CCHRCLK BIT BIT 0CDH EXF2 BIT BIT 0CEH TF2 BIT BIT 0CFH;*;$;*;申明遥控器的用户码与按键键值 IR_ADD_L EQUEQU 00000010B;设置红外遥控地址码的低8位 IR_ADD_H EQUEQU 10111101B;设置红外遥控地址码的高8位 IR_key_power EQUEQU 01000101B;遥控器开关机按键的键值 IR_key_mute EQUEQU 00001010B;遥控器静音按键的键值 IR_key_menu EQUEQU 00001011B;遥控器菜单按键的键值 IR_key_ok EQUEQU 00010101B;遥控器OK按键的键值 IR_key_up EQUEQU 00010010B;遥控器向上按键的键值 IR_key_down EQUEQU 00010011B;遥控器向下按键的键值 IR_key_left EQUEQU 00010001B ;遥控器向左按键的键值 IR_key_right EQUEQU 00010000B;遥控器向右按键的键值 IR_key_VOL_up EQUEQU 00011111B;遥控器音量加按键的键值 IR_key_VOL_down EQUEQU 00001110B;遥控器音量减按键的键值 IR_key_CH_up EQUEQU 00011000B;遥控器频道加按键的键值 IR_key_CH_down EQUEQU 00011010B;遥控器频道减按键的键值;*;$;*mode DATA DATA 03FH ;工作模式寄存器;*;*;计时用寄存器 time_ms DATA DATA 040H ;毫秒计数寄存器,一个单位表示1ms,由定时器2中断驱动,1ms中断一次 time_10ms DATA DATA 041H ;10毫秒计数寄存器,一个单位表示10ms time_250ms DATA DATA 042H ;250毫秒计数寄存器,一个单位表示250ms time_500ms DATA DATA 043H ;500毫秒计数寄存器,一个单位表示500mssec DATA DATA 044H ;秒计数寄存器,一个单位表示1秒minute DATA DATA 045H ;分计数寄存器,一个单位表示1分钟hour DATA DATA 046H ;时计数寄存器,一个单位表示1小时day DATA DATA 047H ;天计数寄存器,一个单位表示1天,用于存储星期几 minute_L DATA DATA 048H ;分的个位寄存器 minute_H DATA DATA 049H ;分的十位寄存器 hour_L DATA DATA 04AH ;时的个位寄存器 hour_H DATA DATA 04BH ;时的十位寄存器 页:1 D:LED电子钟汇编程序【8052微控制器】(2011-11-11)汇编程序.ASM LED_minute_L DATA DATA 04CH ;分的个位数的七段码寄存器 LED_minute_H DATA DATA 04DH ;分的十位数的七段码寄存器 LED_hour_L DATA DATA 04EH ;时的个位数的七段码寄存器 LED_hour_H DATA DATA 04FH ;时的十位数的七段码寄存器;*;*;闹钟用寄存器 minute_alarm DATA DATA 050H ;闹钟的分钟寄存器 hour_alarm DATA DATA 051H ;闹钟的小时寄存器 minute_alarm_L DATA DATA 052H ;闹钟的分钟的个位数寄存器 minute_alarm_H DATA DATA 053H ;闹钟的分钟的十位数寄存器 hour_alarm_L DATA DATA 054H ;闹钟的小时的个位数寄存器 hour_alarm_H DATA DATA 055H ;闹钟的小时的十位数寄存器 LED_minute_alarm_L DATA DATA 056H ;闹钟的分钟的个位数的七段码寄存器 LED_minute_alarm_H DATA DATA 057H ;闹钟的分钟的十位数的七段码寄存器 LED_hour_alarm_L DATA DATA 058H ;闹钟的小时的个位数的七段码寄存器 LED_hour_alarm_H DATA DATA 059H ;闹钟的小时的十位数的七段码寄存器 Snooze_delay DATA DATA 07EH ;闹钟贪睡延时计数器;*;*;声控延时用寄存器 Audio_time DATA DATA 05AH ;声控延时时间寄存器,一个单位表示1秒 Audio_time_L DATA DATA 05BH ;声控延时时间的个位数的寄存器 Audio_time_H DATA DATA 05CH ;声控延时时间的十位数的寄存器;*;*;亮度用寄存器 LED_bright DATA DATA 05DH ;保存LED亮度设置值的寄存器 LED_bright_OUT DATA DATA 05EH ;LED亮度控制寄存器,直接控制LED显示亮度 LED_bright_mode DATA DATA 05FH ;LED亮度模式寄存器;*;*;LED扫描用寄存器 LED_CS DATA DATA 060H ;LED扫描位线片选寄存器 LED_OUT DATA DATA 061H ;LED扫描字线的七段码输出寄存器 LED1_OUT DATA DATA 062H ;LED1输出显示的七段码寄存器 LED2_OUT DATA DATA 063H ;LED2输出显示的七段码寄存器 LED3_OUT DATA DATA 064H ;LED3输出显示的七段码寄存器 LED4_OUT DATA DATA 065H ;LED4输出显示的七段码寄存器;*;*;一周闹钟功能开关控制寄存器 Week1_alarm DATA DATA 071H ;周一闹钟功能是否开启的控制寄存器,000H就关闭,0FFH就开启 Week2_alarm DATA DATA 072H ;周二闹钟功能是否开启的控制寄存器,000H就关闭,0FFH就开启 Week3_alarm DATA DATA 073H ;周三闹钟功能是否开启的控制寄存器,000H就关闭,0FFH就开启 Week4_alarm DATA DATA 074H ;周四闹钟功能是否开启的控制寄存器,000H就关闭,0FFH就开启 Week5_alarm DATA DATA 075H ;周五闹钟功能是否开启的控制寄存器,000H就关闭,0FFH就开启 Week6_alarm DATA DATA 076H ;周六闹钟功能是否开启的控制寄存器,000H就关闭,0FFH就开启 Week7_alarm DATA DATA 077H ;周七闹钟功能是否开启的控制寄存器,000H就关闭,0FFH就开启;*;*;按键扫描用寄存器 key_t0 DATADATA 02CH ;按键前一扫描时刻是否按下状态寄存器,按下相应位为0 key_t1 DATADATA 02DH ;按键当前扫描时刻是否按下状态寄存器,按下相应位为0 long_K2 DATADATA 02EH ;按键K2长按时间寄存器,一个单位表示10ms key_down DATADATA 02FH ;按键有效按下标志寄存器,有效按下相应标志位为1,可以位寻址;下面的Bit位是02FH字节中的位(即按键有效按下标志寄存器key_down中的位)k0 BIT BIT 78H ;该按键对应着P1.0端口 页:2 D:LED电子钟汇编程序【8052微控制器】(2011-11-11)汇编程序.ASM k1 BIT BIT 79H ;该按键对应着P1.1端口 k2 BIT BIT 7AH ;该按键对应着P1.2端口 k3 BIT BIT 7BH ;该按键对应着P1.3端口 k4 BIT BIT 7CH ;该按键对应着P1.4端口 k5 BIT BIT 7DH ;该按键对应着P1.5端口 k6 BIT BIT 7EH ;该按键对应着P1.6端口 k7 BIT BIT 7FH ;该按键对应着P1.7端口;*;*;定义各种状态位和控制位 alarm_ON BIT BIT 00H ;闹钟功能开启控制位,要开启闹钟功能把该位置1 BiBi_ON BIT BIT 01H ;响闹控制位,把该位置1就开始响闹 LED_Audio BIT BIT 02H ;声控功能开启控制位,要开启声控功能把该位置1 LED_vision BIT BIT 03H ;LED是否显示控制位,要熄灭LED把该位清0 key_down_OK BIT BIT 04H ;按键有效按下标志位,任何按键按下该位被置1 key_down_10S BIT BIT 05H ;10秒内有按键按下标志位,如果10秒内无按键该位被清0;*;*;红外遥控用寄存器 IR_lead BIT BIT 06H ;红外引导码是否有效标志位,该位为1表示有效 IR_OK BIT BIT 07H ;红外正确接收完成标志位,每正确接收完一次遥控时,该位就被置1 IR_IN_ADJ_time BIT BIT 08H ;遥控器进入时间调整模式的第一个按键正确标志位 IR_pulse_time DATA DATA 07AH ;红外脉冲时间宽度寄存器(即红外信号两个下降沿之间的时间间隔)IR_code DATA DATA 07BH ;红外接收到的编码寄存器,存储接收到的8bit编码(地址或者数据码)IR_bit_number DATA DATA 07CH ;接收了多少个红外bit的计数寄存器 IR_data DATA DATA 07DH ;红外数据码寄存器,即遥控按键的键值寄存器;*;$;*ORG ORG 0000HJMP JMP 0030H ;跳转到主程序ORG ORG 0003H ;外部中断0向量地址 JMP JMP EX0_ISRORG ORG 001BH ;定时器1中断向量地址 JMP JMP T1_ISRORG ORG 002BH ;定时器2中断向量地址JMP JMP T2_ISR;*;$;*ORG ORG 0030H;*;$;*;七段码值表初始化(LED七段码的A管脚对应着存储器的D7位,G管脚对应着D1位,DP管脚对应着D0位)MOV MOV 030H,#0FCH ;#03FH ;把数字0的七段码值存放到RAM地址空间中MOV MOV 031H,#060H ;#006H ;把数字1的七段码值存放到RAM地址空间中MOV MOV 032H,#0DAH ;#05BH ;把数字2的七段码值存放到RAM地址空间中MOV MOV 033H,#0F2H ;#04FH ;把数字3的七段码值存放到RAM地址空间中MOV MOV 034H,#066H ;#066H ;把数字4的七段码值存放到RAM地址空间中MOV MOV 035H,#0B6H ;#06DH ;把数字5的七段码值存放到RAM地址空间中MOV MOV 036H,#0BEH ;#07DH ;把数字6的七段码值存放到RAM地址空间中MOV MOV 037H,#0E0H ;#007H ;把数字7的七段码值存放到RAM地址空间中 MOV MOV 038H,#0FEH ;#07FH ;把数字8的七段码值存放到RAM地址空间中 MOV MOV 039H,#0F6H ;#06FH ;把数字9的七段码值存放到RAM地址空间中 MOV MOV 03AH,#000H ;该七段码值不点亮任何段;*;*页:3 D:LED电子钟汇编程序【8052微控制器】(2011-11-11)汇编程序.ASM;开机时初始化各种寄存器MOV MOV mode ,#0 ;把工作模式初始化为模式0MOV MOV sec ,#00 ;秒针初始化MOV MOV minute ,#00 ;分针初始化MOV MOV hour ,#12 ;时针初始化MOV MOV day ,#1 ;天初始化,初始化为星期一MOV MOV minute_alarm ,#00 ;闹钟分针初始化MOV MOV hour_alarm ,#08 ;闹钟时针初始化MOV MOV Audio_time ,#30 ;声控延时时间初始化,单位为秒MOV MOV LED_bright ,#4 ;LED亮度初始化,0为最暗,5为最亮MOV MOV key_t0 ,#0FFH ;按键前一扫描时刻初始化为没有按下MOV MOV key_t1 ,#0FFH ;按键当前扫描时刻初始化为没有按下MOV MOV long_K2 ,#0 ;按键K2按下时间初始化为0MOV MOV key_down ,#000H ;初始化为无按键有效按下MOV MOV Week1_alarm ,#0FFH ;初始化开启周一闹钟功能MOV MOV Week2_alarm ,#0FFH ;初始化开启周二闹钟功能MOV MOV Week3_alarm ,#0FFH ;初始化开启周三闹钟功能 MOV MOV Week4_alarm ,#0FFH ;初始化开启周四闹钟功能MOV MOV Week5_alarm ,#0FFH ;初始化开启周五闹钟功能 MOV MOV Week6_alarm ,#000H ;初始化关闭周六闹钟功能MOV MOV Week7_alarm ,#000H;初始化关闭周日闹钟功能MOV MOV R2 R2,#1;R2用于设置星期闹钟功能开与关的时候,指示正在设置的天为星期几MOV MOV R3 R3,#10;R3用于在非模式0的情况下,10秒无按键操作自动进入模式0时的延时计数MOV MOV R4 R4,#100;R4用于声控功能延时计数MOV MOV R5 R5,#10;R5用于声控功能延时计数MOV MOV R6 R6,#30;R6用于声控功能延时计数MOV MOV R7 R7,#50;R7用于产生BiBi声音时用于调制声音时的延时计数;*;*;开机时初始化各种状态位和控制位SETB SETB alarm_ON ;初始化开启闹钟功能CLR CLR BiBi_ON ;初始化关闭BiBi声SETB SETB LED_Audio ;初始化开启声控功能SETB SETB LED_vision ;初始化开启LED显示;*;*;定时器2初始化MOV MOV RCAP2L,#Low(-1000);设置定时器2的重载值为-1000,即每1000个脉冲定时器2就溢出一次(1ms溢出一次)MOV MOV RCAP2H,#High(-1000)MOV MOV T2CON,#00000100B ;设置定时器2工作在自动重装载模式,并开启定时器2;定时器0和定时器1初始化MOV MOV TMOD,#00010001B ;设置定时器0为16位模式,定时器1为16位模式;中断初始化并设置中断优先级SETB SETB IT0 ;设置外部中断0为下降沿中断模式MOV MOV IE,#10101001B ;开中断(定时器1,2与外部中断0)MOV MOV IP,#00001001B ;设置定时器1和外部中断0为最高优先级的中断 ;*;$;*;主循环程序;1、在模式0的情况下,按下相应的按键将进入相应的工作模式;2、在其他模式情况下,将调用相应模式的子程序,用于调整该模式下的参数设置;3、当接收到正确的红外按键时,将调用红外按键处理程序 LOOP:页:4 D:LED电子钟汇编程序【8052微控制器】(2011-11-11)汇编程序.ASMJNB JNB IR_OK,mode0_CS ;如果没有遥控按键操作就跳转到mode0_CSCALL CALL IR mode0_CS:MOV MOV A A,modeCJNE CJNE A A,#0,mode1_CS mode0_mode3:JNB JNB K3,mode0_mode6 ;如果当前为模式0,且按键K3有效,则进入模式3,模式3为闹钟设置模式MOV MOV mode,#3CLR CLR K3JMP JMP LOOP mode0_mode6:JNB JNB K4,mode0_mode8 ;如果当前为模式0,且按键K4有效,则进入模式6,模式6为声控设置模式MOV MOV mode,#6CLR CLR K4JMP JMP LOOP mode0_mode8:JNB JNB K5,mode0_mode9 ;如果当前为模式0,且按键K5有效,则进入模式8,模式8为LED亮度设置模式MOV MOV mode,#8CLR CLR K5JMP JMP LOOP mode0_mode9:JNB JNB K7,mode0_mode10 ;如果当前为模式0,且按键K7有效,则进入模式9,模式9为LED亮度模式设置模式MOV MOV mode,#9CLR CLR K7JMP JMP LOOP mode0_mode10:JNB JNB K6,LOOP ;如果当前为模式0,且按键K6有效,则进入模式10,模式10为星期调整模式MOV MOV mode,#10CLR CLR K6JMP JMP LOOP mode1_CS:CJNE CJNE A A,#1,mode2_CS;如果mode值为1,则调用mode1子程序,mode1为时针调整子程序CALL CALL mode1JMP JMP LOOP mode2_CS:CJNE CJNE A A,#2,mode3_CS;如果mode值为2,则调用mode2子程序,mode2为分针调整子程序CALL CALL mode2JMP JMP LOOP mode3_CS:CJNE CJNE A A,#3,mode4_CS ;如果mode值为3,则调用mode3子程序,mode3为打开或者关闭闹钟功能子程序CALL CALL mode3JMP JMP LOOP mode4_CS:CJNE CJNE A A,#4,mode5_CS ;如果mode值为4,则调用mode4子程序,mode4为闹钟时针调整子程序CALL CALL mode4JMP JMP LOOP mode5_CS:CJNE CJNE A A,#5,mode6_CS ;如果mode值为5,则调用mode5子程序,mode5为闹钟分针调整子程序CALL CALL mode5JMP JMP LOOP 页:5 D:LED电子钟汇编程序【8052微控制器】(2011-11-11)汇编程序.ASM mode6_CS:CJNE CJNE A A,#6,mode7_CS ;如果mode值为6,则调用mode6子程序,mode6为打开或者关闭声控功能子程序CALL CALL mode6JMP JMP LOOP mode7_CS:CJNE CJNE A A,#7,mode8_CS ;如果mode值为7,则调用mode7子程序,mode7为声控延时时间调整子程序CALL CALL mode7JMP JMP LOOP mode8_CS:CJNE CJNE A A,#8,mode9_CS ;如果mode值为8,则调用mode8子程序,mode8为LED亮度调整子程序CALL CALL mode8JMP JMP LOOP mode9_CS:CJNE CJNE A A,#9,mode10_CS ;如果mode值为9,则调用mode9子程序,mode9为LED亮度模式调整子程序CALL CALL mode9JMP JMP LOOP mode10_CS:CJNE CJNE A A,#10,mode11_CS ;如果mode值为10,则调用mode10子程序,mode10为星期调整子程序CALL CALL mode10JMP JMP LOOP mode11_CS:CJNE CJNE A A,#11,LOOP_over ;如果mode值为11,则调用mode11子程序,mode11为星期的闹钟功能开关子程序CALL CALL mode11 LOOP_over:JMP JMP LOOP;*;$;*;外部中断0中断服务程序(红外遥控接收程序)EX0_ISR:PUSH PUSH ACC ;进入中断服务程序时,把累加器A压入堆栈,保护现场。PUSH PUSH PSW ;把PSW压入堆栈,保护现场(该中断用到了进位标志C)MOV MOV IR_pulse_time,TH0 ;把定时器0的TH0值保存到红外脉冲时间宽度寄存器中,每一个单位表示256微秒MOV MOV TL0,#0 ;把定时器0清0,让定时器0从0开始重新计时MOV MOV TH0,#0SETB SETB TR0JB JB IR_lead,IR_decode ;如果红外引导码标志有效,则进入红外遥控的地址码与数据码解码 IR_lead_YorN:;判断是否是脉冲宽度为13.5毫秒的红外引导码MOV MOV A A,IR_pulse_time CJNE CJNE A A,#31H,$+3 ;当脉冲宽度小于12.544毫秒表示不是引导码,退出解码程序JCJC EX0_ISR_overCJNE CJNE A A,#38H,$+3 ;当脉冲宽度大于14.336毫秒表示不是引导码,退出解码程序JNCJNC EX0_ISR_overSETB SETB IR_lead ;当脉冲宽度在12.544-14.336毫秒之间时,为红外引导码,把红外引导码标志位置1CLR CLR IR_OK ;红外引导码正确后,接下来接收红外数据,清除红外接收完成标志位JMP JMP EX0_ISR_over IR_decode:;红外遥控地址码和数据码解码(判断是否是脉冲宽度为1.12ms或2.25ms的有效宽度)MOV MOV A A,IR_pulse_time IR_decode_0:;判断是否是脉冲宽度为1.12ms的有效宽度(编码0的脉冲宽度)CJNE CJNE A A,#3,$+3 ;当脉冲宽度小于0.768ms表示不是有效的宽度,结束本次解码,把IR_lead清0 页:6 D:LED电子钟汇编程序【8052微控制器】(2011-11-11)汇编程序.ASMJCJC IR_pulse_errorCJNE CJNE A A,#6,$+3 ;当脉冲宽度大于1.536ms表示不是编码0,继续检测是否为编码1的脉冲宽度JNCJNC IR_decode_1CLR CLR C C ;当脉冲宽度在0.768-1.536毫秒之间时,为编码0,并把该编码存入进位标志C中JMP JMP IR_OUT IR_decode_1:;判断是否是脉冲宽度为2.25ms的有效宽度(编码1的脉冲宽度)CJNE CJNE A A,#7,$+3 ;当脉冲宽度小于1.792毫秒表示不是有效的宽度,结束本次解码,把IR_lead清0JCJC IR_pulse_errorCJNE CJNE A A,#10,$+3 ;当脉冲宽度大于2.560毫秒表示不是有效的宽度,结束本次解码,把IR_lead清0JNCJNC IR_pulse_errorSETB SETB C C ;当脉冲宽度在1.792-2.560毫秒之间时,为编码1,并把该编码存入进位标志C中 IR_OUT:MOV MOV A A,IR_codeRRCRRC A A ;把接收到的红外bit压入IR_code的最高位,即把接收到的bit向右移入IR_codeMOV MOV IR_code,A AINC INC IR_bit_number ;每接收1个bit,就把接收了多少个红外bit的计数寄存器IR_bit_number加1MOV MOV A A,IR_bit_numberCJNE CJNE A A,#8,IR_ADD_code_H ;当计数寄存器IR_bit_number为8时表示接收完了地址码的低8位 IR_ADD_code_L:;判断接收到的地址码的低8位是否与设置的地址低8位相同MOV MOV A A,IR_codeCJNE CJNE A A,#IR_ADD_L,IR_pulse_error ;当收到的地址码的低8位与设置的地址低8位不同,结束本次解码,把IR_lead清0JMP JMP EX0_ISR_over IR_ADD_code_H:;判断接收到的地址码的高8位是否与设置的地址高8位相同CJNE CJNE A A,#16,IR_data_code ;当IR_bit_number为16时,表示接收完了地址码的高8位MOV MOV A A,IR_codeCJNE CJNE A A,#IR_ADD_H,IR_pulse_error;当收到的地址码的高8位与设置的地址高8位不相同,结束本次解码,把IR_lead清0JMP JMP EX0_ISR_over IR_data_code:;当接收完第24位数据后,把17bit到24bit的数据码存入遥控按键的键值寄存器CJNE CJNE A A,#24,IR_data_not_codeMOV MOV IR_data,IR_codeJMP JMP EX0_ISR_over IR_data_not_code:;当接收完第32位数据后,判断最后2Byte是否相反,相反则表示遥控接收正确CJNE CJNE A A,#32,EX0_ISR_overMOV MOV A A,IR_codeCPL CPL A ACJNE CJNE A A,IR_data,IR_pulse_errorSETB SETB IR_OK ;遥控接收正确后,就把红外正确接收完成标志位置1,表示接收到正确遥控SETB SETB key_down_OK ;遥控接收正确后,就把按键有效按下标志位置位,表示有按键按下 IR_pulse_error:;当正确接收完成或者在接收过程中出错时,初始化迎接下一次接收CLR CLR IR_lead ;当正确接收完成或者在接收过程中出错时,将红外引导码标志位清0MOV MOV IR_bit_number,#0 ;当正确接收完成或者在接收过程中出错时,将IR_bit_number计数器清0 EX0_ISR_over:POP POP PSW ;在中断返回时恢复PSW中的内容,现场恢复。POP POP ACC RETIRETI;*;$;*页:7 D:LED电子钟汇编程序【8052微控制器】(2011-11-11)汇编程序.ASM;定时器1中断服务程序;定时器1用于实现PWM调光,实现LED的亮度调节 T1_ISR:PUSH PUSH ACC ;进入中断服务程序时,把累加器A压入堆栈,保护现场。PUSH PUSH B ;把临时寄存器B压入堆栈,保护现场。MOV MOV P2,#0FFH ;关闭LED显示,关闭字线MOV MOV P0,#000H ;关闭LED显示,关闭位线CLR CLR TR1 ;关闭定时器1POP POP B ;在中断返回时恢复B中的内容,现场恢复。POP POP ACC ;在中断返回时恢复累加器A中的内容,现场恢复。RETIRETI;*;$;*;定时器2中断服务程序(1ms中断一次)T2_ISR:PUSH PUSH ACC ;进入中断服务程序时,把累加器A压入堆栈,保护现场。PUSH PUSH B ;把临时寄存器B压入堆栈,保护现场。PUSH PUSH 00H ;把寄存器R0压入堆栈,保护现场。PUSH PUSH 01H ;把寄存器R1压入堆栈,保护现场。CLR CLR TF2 ;软件清除定时器2的中断标志 CALL CALL time ;调用time时间实时计时子程序,实现时间的实时计时功能CALL CALL LED_Display_CS ;调用LED_Display_CS子程序,实现在不同的mode下,显示相应模式下的界面MOV MOV P2,#0FFH ;在调用LED扫描前,关闭上次扫描的显示(关闭字线)MOV MOV P0,#000H ;在调用LED扫描前,关闭上次扫描的显示(关闭位线)JNB JNB LED_vision,LED_vision_OFF ;根据显示控制位LED_vision,确定LED屏幕是否要显示,LED_vision为1就显示CALL CALL LED_scan ;调用LED_scan扫描子程序,把字符显示到LED上CALL CALL bright ;调用亮度控制子程序,根据亮度设置值,设置计数器1的溢出时间,实现PWM调光 LED_vision_OFF:CALL CALL Audio_LED_vision ;调用Audio_LED_vision控制子程序,实现声控功能CALL CALL key_scan ;调用key_scan键盘扫描子程序,实现键盘按键扫描功能CALL CALL BiBi ;调用BiBi声产生子程序,实现响闹CALL CALL bright_mode ;调用bright_mode子程序,实现不同的亮度模式POP POP 01H ;在中断返回时恢复R1中的内容,现场恢复。POP POP 00H ;在中断返回时恢复R0中的内容,现场恢复。POP POP B ;在中断返回时恢复B中的内容,现场恢复。POP POP ACC ;在中断返回时恢复累加器A中的内容,现场恢复。RETIRETI;*;$;*;时间实时计时子程序(每调用一次,加1mS);外部接口变量如下:;time_250ms 用于控制在时间或者闹钟调整模式下,时针或者分针被选中时闪耀的时间基准;time_500ms 用于控制LED上的冒号是否显示的时间基准;sec:秒的二进制码输出;minute:分的二进制码输出;hour:时的二进制码输出 time:INC INC time_ms ;time_ms自加一MOV MOV A A,time_ms 页:8 D:LED电子钟汇编程序【8052微控制器】(2011-11-11)汇编程序.ASMCJNE CJNE A A,#10,time_over ;每10ms产生一次进位,且time_ms清0MOV MOV time_ms,#0CALL CALL mode0_long_key ;每10ms调用一次mode0_long_key模式0下的按键长按处理程序,;如果在模式0下,且长按时间到规定值,则进入时间调整模式INC INC time_10ms ;time_10ms自加一MOV MOV A A,time_10msCJNE CJNE A A,#25,time_over ;每250ms产生一次进位,且time_10ms清0MOV MOV time_10ms,#0INC INC time_250ms ;time_250ms自加一MOV MOV A A,time_250msCJNE CJNE A A,#2,time_over ;每500ms产生一次进位,且time_250ms清0MOV MOV time_250ms,#0INC INC time_500ms ;time_500ms自加一MOV MOV A A,time_500ms CJNE CJNE A A,#2,CALL_time_OUT ;每1s产生一次进位,且time_500ms清0MOV MOV time_500ms,#0CALL CALL Auto_mode0 ;每秒调用一次Auto_mode0子程序,该子程序的功能是如果现在不是在模式0下,;且10秒无按键操作将自动从其他模式自动切换到模式0INC INC sec ;秒自加一MOV MOV A A,secCJNE CJNE A A,#60,CALL_time_OUT ;每60秒产生一次进位MOV MOV sec,#0INC INC minute ;分自加一MOV MOV A A,minuteCJNE CJNE A A,#60,CALL_alarm ;每60分钟产生一次进位MOV MOV minute,#0 MOV MOV time_10ms,#-8 ;时间修正,每个小时修正一次(为了补偿晶振的误差而进行的软件时间修正);修正值为负数表示把时间变慢,修正值为正数表示把时间变快 ;-8表示每个小时把时间变慢80ms,相当于每天把时间变慢1.92秒INC INC hour ;时自加一MOV MOV A A,hourCJNE CJNE A A,#24,CALL_alarm ;每24小时产生一次进位MOV MOV hour,#0INC INC day ;天自加一MOV MOV A A,dayCJNE CJNE A A,#8,CALL_alarm ;每7天产生一次进位MOV MOV day,#1 CALL_alarm:;每分钟调用一次alarm响闹判断子程序,它比较当前时间是否和闹钟时间相等,CALL CALL alarm ;如果当前时间和闹钟时间相等,则开启闹声 CALL_time_OUT:;每0.5秒调用一次time_OUT实时时间的七段码转换子程序,把实时时间的时针和分针CALL CALL time_OUT ;分别转换为4个七段码,供实时时间的显示用 time_over:RETRET;*;$页:9 D:LED电子钟汇编程序【8052微控制器】(2011-11-11)汇编程序.ASM;*;实时时间的七段码转换子程序,把二进制码转换为十进制和七段码(每0.5秒被调用一次);外部接口变量如下:;LED_minute_L:该变量输出的是分的个位数的七段码;LED_minute_H:该变量输出的是分的十位数的七段码;LED_hour_L:该变量输出的是时的个位数的七段码;LED_hour_H:该变量输出的是时的十位数的七段码 time_OUT:MOV MOV A A,minute ;计算分的十进制数的个位和十位数MOV MOV B,#10DIV DIV ABABMOV MOV minute_L,B;把分针的个位数存入minute_L寄存器中MOV MOV minute_H,A A;把分针的十位数存入minute_H寄存器中MOV MOV A A,hour ;计算时的十进制数的个位和十位数MOV MOV B,#10DIV DIV ABAB MOV MOV hour_L,B;把时针的个位数存入
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 行业资料 > 医学/心理学

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服