⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 声控灯.asm

📁 新型楼道声控灯(毕业设计)
💻 ASM
📖 第 1 页 / 共 2 页
字号:
      mov   led_1,#00h  ;数码管1缓冲寄存器 == 0      mov   led_2,#00h  ;数码管2缓冲寄存器 == 0      setb  disp_flg    ;显示程序使能标志位== 1 (有效)      setb  sigel_dis_flg ;       mov   a,#00h      mov   sec_500ms_cnt,a      mov   sec_1s_cnt,a      setb  sleep_flg      mov   disp_del,#30h      mov   disp_buf,#00h      ret;===============================================;【工程名称】:start;【功能说明】:系统复位后,程序从这里开始运行;===============================================start:      mov    sp,#30h  ;设置堆栈指针      lcall  init_ic  ;初始化icmain:      setb   tr0      ;t0开始计数      lcall  key_scan       lcall  disp_to      lcall  disp_scan            lcall  lemp_out_lp      lcall  led_out_lp      jmp    main;========================================== ;【工程名称】:lemp_out_lp;【功能说明】:当检测到信号有效时,就对继电器输出;              输出时间长度为之前设定的                                        ;===========================================   lemp_out_lp:      mov    a,disp_buf      jz     lemp_out_lp_end          setb   lemp_out      retlemp_out_lp_end:      clr    lemp_out      ret;========================================== ;【工程名称】:led_out_lp;【功能说明】:当检测到信号有效时,就发光二极管输出                                     ;===========================================    led_out_lp:      mov    a,disp_buf      jz     led_out_lp_end          clr    led_out      retled_out_lp_end:      setb   led_out      ret               ;========================================== ;【工程名称】:sigel_in;【功能说明】:光信号和声音信号检测,当检测到信号有;              效时,触发数码管,按设定的时间长度开;              始倒计时,直到零为止。              ;===========================================     sigel_in:int_0_:      jnb    sigel_dis_flg,sigel_in_end       jb     light_in,sigel_in_end      jb     light_in,sigel_in_end      ;--------信号有效      setb   sleep_flg      clr    sigel_dis_flg      mov    a,disp_del      mov    disp_buf,asigel_in_end:      ret;===========================================;【工程名称】:key_scan;【功能说明】:可识别单击/连击/短击/长击/无击等;              按键类型的按键检测处理程序;              10ms扫描一次;===========================================key_scan:      jb    key_flg,key_scan_pro      retkey_scan_pro:      clr    key_flg      mov    a,key_in      orl    a,#key_in_reg            cpl    a      mov    key_num,a      jz     key_scan_bd                 mov    nokey_js,#00h ;按键闭合计数器清零      setb  sleep_flg            mov    a,key_buf      xrl    a,key_num      jnz    key_scan_init      setb   key_dj_flg                   djnz   k_delay,sigel_in_end      mov    k_delay,#10      inc    key_jsq      mov    a,#10      xrl    a,key_jsq      jz    key_scan_cj_prokey_scan_lj_pro:      ;------连击      clr    key_dj_flg      jnb    key_set_flg,key_scan_end      mov    a,key_num      xrl    a,#(1<<button_2)      jnz    key_scan_end      jnb    mode_add_sub,mode_set_add      jmp    mode_set_sub      retkey_scan_cj_pro:      ;------长击      clr    key_dj_flg      mov    a,key_num      xrl    a,#(1<<button_1)      jnz    key_scan_end      cpl    key_set_flg          ;显示时间长度设定      retkey_scan_bd:      jnb    key_dj_flg,key_scan_init      clr    key_dj_flg      ;-----短击程序处理      jnb    key_set_flg,key_scan_end      mov    a,key_buf      xrl    a,#(1<<button_1)      jnz    mode_set      cpl    mode_add_submode_set:      mov    a,key_buf      xrl    a,#(1<<button_2)      jnz    key_scan_end      jnb    mode_add_sub,mode_set_addmode_set_sub:      mov    a,#099h          ;减一操作      add    a,disp_del      da     a      mov    disp_del,a      setb   dot_pro_flg      retmode_set_add:                 ;加一操作      mov    a,#01h      add    a,disp_del      da     a      mov    disp_del,a      setb   dot_pro_flg      retkey_scan_init:      mov    a,key_num      mov    key_buf,a            mov    k_delay,#200      mov    key_jsq,#00            ;-----无键按下执行程序      jnb    key_set_flg,key_scan_nokey      mov    a,nokey_js      xrl    a,#nokey_js_reg0      jnz    key_scan_end      ;执行            clr    key_set_flg      mov    nokey_js,#00h      retkey_scan_nokey:      mov    a,disp_buf       jz     key_scan_nokey_1      mov    nokey_js,#00h      retkey_scan_nokey_1:      mov    a,nokey_js      xrl    a,#nokey_js_reg1      jnz    key_scan_end      mov    p3,#0ffh      clr    sleep_flg           retkey_scan_end:      ret   ;===========================================;【工程名称】:disp_to;【功能说明】:设定/运行 设定;当设定延时时间标志位为1时,将设定时间参数传递给数码管缓冲寄存器;当设定延时时间标志位为0时,将运行时间参数传递给数码管缓冲寄存器;            ;===========================================      disp_to:      jnb    key_set_flg,disp_to_1      mov    a,disp_del      anl    a,#0fh      mov    led_1,a      mov    a,disp_del      swap   a      anl    a,#0fh      mov    led_2,a      retdisp_to_1:      mov    a,disp_buf      anl    a,#0fh      mov    led_1,a      mov    a,disp_buf      swap   a      anl    a,#0fh      mov    led_2,a      ret                ;===========================================;【工程名称】:disp;【功能说明】:显示程序,10ms切换一次显示; 数码管显示的可以是设定的时间,也可以是运行倒计时的时间           ;=========================================== disp_scan:     jnb    sleep_flg,disp_scan_end     jnb    disp_flg,disp_scan_end     jnb    sec_500ms_flg,disp_scan_all     clr    disp_flg      setb   com_1     setb   com_2          jnb    key_set_flg,disp_scan_no     jnb    dot_flg,disp_scan_no     jb     dot_pro_flg,disp_scan_nodisp_scan_yes:      jmp    disp_scan_enddisp_scan_no:          jnb    com_flg,com_2_lpcom_1_lp:     clr    com_1     mov    a,led_1     lcall  led_code_tab     mov    disp_seg,a     retcom_2_lp:     clr    com_2     mov    a,led_2     lcall  led_code_tab     mov    disp_seg,a     retdisp_scan_all:     clr    com_1     clr    com_2     mov    disp_seg,#00hdisp_scan_end:     ret     ;=========================================;【工程名称】:int_t0_;【功能说明】:定时器0,工作方式1,10ms中断一次;其中有对固定时间的控制,各程序使能标志位的控制;=========================================int_t0_:     mov   th0,#0ech         mov   tl0,#77h     ;----10ms     setb  disp_flg     cpl   com_flg     setb  key_flg          inc   sec_500ms_cnt     mov   a,#50     xrl   a,sec_500ms_cnt     jnz    int_t0_end     ;----0.5s     mov   sec_500ms_cnt,#00h     setb  sec_500ms_flg     cpl   dot_flg               inc   sec_1s_cnt     mov   a,#2     xrl   a,sec_1s_cnt     jnz    int_t0_end     ;----1s     inc   nokey_js     mov   sec_1s_cnt,#00h     setb  sec_1s_flg          mov    a,disp_buf     jnz    int_t0_1s     setb   sigel_dis_flg     jmp    int_t0_2sint_t0_1s:     mov    a,#99h     add    a,disp_buf     da     a     mov    disp_buf,a         int_t0_2s:     inc    sec_2s_cnt     mov    a,#3      xrl    a,sec_2s_cnt     jnz    int_t0_end     ;-----2s     clr    dot_pro_flg     mov    sec_2s_cnt,#00h              inc   sec_20s_cnt     mov   a,#5     xrl   a,sec_20s_cnt     jnz    int_t0_end     ;-----20s     mov   sec_20s_cnt,#00hint_t0_end:     ret;==================================     end          

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -