51/AVR单片机技术驿站!  <在线翻译>     便利工具    特色网址   无弹窗、无插件的绿色站点...  英才招聘   学历查询  喜欢>>收藏我站 

当前位置:首页 > 单片机源码 > 详细内容
开关控制小灯控制程序
作者:佚名  发布时间:2009/11/14  阅读次数:1234  字体大小: 【】 【】【

;************;
;小灯控制程序;
;************;
;
;************;
;中断入口程序;
;************;
;
ORG         0000H       ;程序执行开始地址
LJMP       START       ;跳至START执行
ORG         0003H       ;外中断0中断入口地址
RETI                         ;中断返回(不开中断)
ORG         000BH       ;定时器T0中断入口地址
RETI                         ;中断返回(不开中断)
ORG         0013H       ;外中断1中断入口地址
RETI                         ;中断返回(不开中断)
ORG         001BH       ;定时器T1中断入口地址
RETI                         ;中断返回(不开中断)
ORG         0023H       ;串行口中断入口地址
RETI                         ;中断返回(不开中断)
;
;************;
; 初始化程序 ;
;************;
;
CLEAR:   MOV         20H,#00H       ;20H单元内存清0(闪烁标志清0)
               SETB       00H                 ;20H.0位置1(上电时自动执行闪烁功能1)
               RET                                 ;子程序返回
;
;************;
;   主 程 序   ;
;************;
;
START:ACALL         CLEAR             ;调用初始化子程序
MAIN: LCALL         KEYWORK         ;调用键扫描子程序
           JB               00H,FUN0       ;20H.0位为1时执行FUN0
           JB               01H,FUN1       ;20H.1位为1时执行FUN1
           JB               02H,FUN2       ;20H.2位为1时执行FUN2
           JB               03H,MAIN       ;备用
           AJMP           MAIN               ;返回主程序MAIN
;
;************;
;   功能程序   ;
;************;
;第1种闪烁功能程序
FUN0: MOV             A,#0FEH             ;累加器赋初值
FUN00:MOV             P1,A                  ;累加器值送至P1口
           LCALL         DL05S                 ;延时
           JNB             ACC.7,MAIN       ;累加器最高位为0时转MAIN
           RL               A                         ;累加器A中数据循环左移1位
           AJMP           FUN00                 ;转FUN00循环
;
;第2种闪烁功能程序
FUN1:MOV               A,#0FEH       ;累加器赋初值
FUN11:MOV             P1,A             ;累加器值送至P1口
           LCALL         DL05S           ;延时
           JZ               MAIN             ;A为0转MAIN
           RL               A                   ;累加器A中数据循环左移1位
           ANL             A,P1             ;A同P1口值相与
           AJMP           FUN11           ;转FUN11循环
;
; 第3种闪烁功能程序
FUN2:MOV               A,#0AAH         ;累加器赋初值
           MOV             P1,A               ;累加器值送至P1口
           LCALL         DL05S             ;延时
           CPL             A                     ;A中各位取反
           MOV             P1,A               ;累加器值送至P1口
           LCALL         DL05S             ;延时
           AJMP           MAIN               ;转MAIN
;************;
;   扫键程序   ;
;************;
;
KEYWORK:MOV         P3,#0FFH       ;置P3口为输入状态
           JNB             P3.0,KEY0     ;读P3.0口,若为0转KEY0
           JNB             P3.1,KEY1     ;读P3.1口,若为0转KEY1
           JNB             P3.2,KEY2     ;读P3.2口,若为0转KEY2
           JNB             P3.3,KEY3     ;读P3.3口,若为0转KEY3
           RET                                     ;子程序返回
;
;闪烁功能0键处理程序
KEY0:LCALL           DL10MS           ;延时10毫秒消抖
         JB                 P3.0,OUT0     ;P3.0为1,子程序返回(干扰)
         SETB             00H                 ;20H.0位置1(执行闪烁功能1标志)
         CLR               01H                 ;20H.1位清0
         CLR               02H                 ;20H.2位清0
         CLR               03H                 ;20H.3位清0
OUT0:RET                                       ;子程序返回
;
; 闪烁功能1键处理程序
KEY1:LCALL           DL10MS
         JB                 P3.1,OUT1
         SETB             01H                 ;20H.1位置1(执行闪烁功能2标志)
         CLR               00H
         CLR               02H
         CLR               03H
OUT1:RET
;
;闪烁功能2键处理程序
KEY2:LCALL           DL10MS
         JB                 P3.2,OUT2
         SETB             02H                 ;20H.2位置1(执行闪烁功能3标志)
         CLR               01H
         CLR               00H
         CLR               03H
OUT2:RET
;
;闪烁功能(备用)键处理程序
KEY3:LCALL           DL10MS
         JB                 P3.3,OUT3
         SETB             03H                 ;20H.3位置1(执行备用闪烁功能标志)
         CLR               01H
         CLR               02H
         CLR               00H
OUT3:RET
;
;************;
;   延时程序   ;
;************;
;0.5毫秒延时子程序,执行一次时间为513微秒
DL512:MOV             R2,#0FFH
LOOP1: DJNZ         R2,LOOP1
             RET
;
;10毫秒延时子程序(调用20次0.5毫秒延时子程序)
DL10MS:MOV           R3,#14H
LOOP2: LCALL       DL512
             DJNZ         R3,LOOP2
             RET
;
;延时子程序,改变R4寄存器初值可改变闪烁的快慢(时间为15×25毫秒)
DL05S:MOV             R4,#0FH
LOOP3: LCALL       DL25MS
             DJNZ         R4,LOOP3
             RET
;
;25毫秒延时子程序,用调用扫键子程序延时,可快速读出功能按键值
DL25MS:MOV           R5,#0FFH
LOOP4:LCALL         KEYWORK
           DJNZ           R5,LOOP4
           RET
END                                             ;程序结束

  

我要评论
  • 匿名发表
  • [添加到收藏夹]
  • 发表评论:(匿名发表无需登录,已登录用户可直接发表。) 登录状态:未登录
最新评论
所有评论[0]
    暂无已审核评论!

网站导航 管理登陆 ┊ 免责声明 问题反馈  友链说明
本站部分内容来自网络共享资源,如有冒犯您的权利请来信告之删除或纠正!
不得对本站进行复制、盗链或镜像,转载内容须获得同意或授权;欢迎友情链接、站务合作!

    我要报警 Alexa
 mcusy_cn#126.com (请把#改成@) 交流:522422171
本站学习交流群:138..158(高级群1-)、77930286(高级群2)、61804809(群3)
Copyright© MCUSY All Rights Reserved
本站网警备案号: WZ36040002485
  ICP备案证书号:粤ICP备09034963号