机电之家资源网
单片机首页|单片机基础|单片机应用|单片机开发|单片机文案|软件资料下载|音响制作|电路图下载 |嵌入式开发
培训信息
赞助商
基于51单片机的带时间显示和紧急控制的交通灯的设计
基于51单片机的带时间显示和紧急控制的交通灯的设计
 更新时间:2010-1-15 16:52:52  点击数:0
【字体: 字体颜色

;特别说明,本程序仅供单片机爱好者自己学习使用,

;不得做为其它商业用途

;此程序在硬件上调试通
;晶振频率为11.0592MHZ
;用定时器1延时,外部中断0接紧急控制
;R0为100MS延时常数,R2为状态延时常数
;8279控制数码管显示时间
;用P1口控制双色灯
;此程序写于2007-7-6,作者:徐学军
Z8279                 EQU                 0FF82H                     ;8279 状态/命令口地址
D8279                 EQU                 0FF80H                     ;8279 数据口地址
LEDMOD                EQU                 00H                        ;左边输入 八位字符显示
                                         ;外部译码键扫描方式,双键互锁
LEDFEQ                EQU                 33H                        ;扫描速率
LEDCLS                EQU                 0C1H                       ;清除显示 RAM
LEDWR0                EQU                 80H                        ;设定的将要写入的显示RAM地址
      
                      ORG                0000H
                      LJMP START
                      ORG                0003H                  ;INT 0 中断入口地址
                      LJMP INT_0
                      ORG                001BH                    ;T1中断入口地址
                      LJMP INT_T1
                      ORG                0040H
START:
                      MOV SP,#60H
                      MOV                TMOD,#10H                ;置T1为方式1                       
                      SETB EX0                    ;INT 0 中断有效
                      SETB IT0
                      SETB EA     
                      MOV                TL1,#00H                 ;延时50mS常数
                      MOV                TH1,#4cH
                      MOV                R0,#2                   ;延时100mS常数
                      SETB TR1                      ;启动T1
                      SETB ET1
                      setb                pt1                   ;必须设置定时器1的中断优先级高于外部中断0
                       LCALL INIT8279                   ;初始化8279


                      LCALL STATUS0 ;初始状态(都是红灯)
CIRCLE:
                      LCALL STATUS1 ;南北绿灯,东西红灯
                      LCALL STATUS2 ;南北绿灯闪转黄灯,东西红灯
                      LCALL STATUS3 ;南北红灯,东西绿灯
                      LCALL STATUS4 ;南北红灯,东西绿灯闪转黄灯
                      LJMP CIRCLE
INT_0:
                      PUSH PSW                    ;保护现场
                      PUSH 2
                      PUSH 90H 
                      clr                ex0     
                      MOV P1,#0FH                  ;南北,东西都亮红灯      
                      MOV R2,#100                 ;延时10秒
                      LCALL DELAY_DISPLAY
                      setb                ex0
                      POP 90H                     ;恢复现场      
                      POP 2
                      POP PSW
                      RETI
                INT_T1:
                      PUSH ACC
                      PUSH PSW
                      CLR                TR1
                      MOV                TL1,#00H                 ;延时 50mS 常数
                      MOV                TH1,#4CH       
                      SETB TR1
                      DJNZ R0,EXIT
                      MOV                R0,#2                   ;延时 100ms常数
                        DEC R2
                 EXIT:
                      POP                PSW
                      POP                ACC
                      RETI
     
STATUS0:                            ;南北红灯,东西红灯      
                      MOV P1,#0FH      
                      MOV R2,#10                  ;延时1秒
                      LCALL DELAY_DISPLAY
                      RET
STATUS1:                            ;南北绿灯,东西红灯       
                      MOV P1,#96H                  ;南北绿灯,东西红灯     
                      MOV R2,#200                 ;延时20秒
                      LCALL DELAY_DISPLAY
                      RET
STATUS2:                            ;南北绿灯闪转黄灯,东西红灯       
                      MOV R3,#03H                 ;绿灯闪3次
FLASH:
                      MOV P1,#9FH      
                      MOV R2,#03H
                      LCALL DELAY_DISPLAY
                      MOV P1,#96H      
                      MOV R2,#03H
                      LCALL DELAY_DISPLAY
                      DJNZ R3,FLASH
                      MOV P1,#06H                  ;南北黄灯,东西红灯      
                      MOV R2,#10                  ;延时1秒
                      LCALL DELAY_DISPLAY
                      RET
STATUS3:                            ;南北红灯,东西绿灯      
                      MOV P1,#69H      
                      MOV R2,#200                 ;延时20秒
                      LCALL DELAY_DISPLAY
                      RET
STATUS4:                            ;南北红灯,东西绿灯闪转黄灯      
                      MOV R3,#03H                 ;绿灯闪3次
FLASH1:
                      MOV P1,#6FH       
                      MOV R2,#03H
                      LCALL DELAY_DISPLAY
                      MOV P1,#69H      
                      MOV R2,#03H
                      LCALL DELAY_DISPLAY
                      DJNZ R3,FLASH1
                      MOV P1,#09H                 ;南北红灯,东西黄灯      
                      MOV R2,#10                 ;延时1秒
                      LCALL DELAY_DISPLAY
                      NOP
                      RET
                   INIT8279:                                ;8279初始化子程序
                      PUSH                DPH                        ;保存现场
                      PUSH                DPL
                      PUSH                ACC
                      LCALL DELAY                      ;延时
                      MOV                 DPTR ,#Z8279
                      MOV                 A,#LEDMOD                  ;置8279工作方式
                      MOVX                @DPTR,A
                      MOV                 A,#LEDFEQ                  ;置键盘扫描速率
                      MOVX                @DPTR,A
                      MOV                 A,#LEDCLS                  ;清除 LED 显示
                      MOVX                @DPTR,A
                      LCALL DELAY                      ;延时
                      POP                 ACC                        ;恢复现场
                      POP                 DPL
                      POP                 DPH
                      RET
                                         ;显示字符子程序
                                         ;输入: R4,位置 R5,值
DISLED:
                      PUSH                DPH                        ;保存现场
                      PUSH                DPL
                      PUSH                ACC
                      MOV                 A,#LEDWR0                  ;置显示起始地址
                      ADD                 A,R4                       ;加位置偏移量
                      MOV                 DPTR,#Z8279
                      MOVX                @DPTR,A                    ;设定显示位置
                      MOV                 DPTR,#LEDSEG ;置显示常数表起始位置
                      MOV                 A,R5
                      MOVC                A,@A+DPTR                  ;查表
                      MOV                 DPTR,#D8279
                      MOVX                @DPTR,A                    ;显示数据
                      POP                 ACC                        ;恢复现场
                      POP                 DPL
                      POP                 DPH
                      RET
DELAY:                                  ;延时子程序
                      PUSH                0                          ;保存现场
                      PUSH                1
                      MOV                 0,#0H
DELAY1:
                      MOV                 1,#0H
                      DJNZ                1,$
                      DJNZ                0,DELAY1
                      POP                 1                          ;恢复现场
                      POP                 0
                      RET
  
DELAY_DISPLAY:                              ;延时和显示时间子程序      
                      PUSH 1
                      PUSH 0
                      push acc
loopwait: mov b,#10
                      mov a,2
                      div ab
                      mov b,#10
                      div ab
                      mov                r4,#1
                      mov                r5,a
                      LCALL DISLED                     ;显示秒高位
                      mov                r4,#0
                      mov                r5,b
                      LCALL DISLED                     ;显示秒低位
                     mov a,2
                     jnz                loopwait                     ;延时等待
                      pop                acc 
                      POP 0
                      POP 1      
                      RET
                LEDSEG: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H ;'0,1,2,3,4,5,6,7'
                        DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H ;'8,9,A,B,C,D,E,F'
                    END


参考链接:http://www.picavr.com/news/2008-01/2745.htm

  • 上一篇: 单片机系统键盘的设计小结
  • 下一篇: 没有了
  • 发表评论   告诉好友   打印此文  收藏此页  关闭窗口  返回顶部
    热点文章
     
    推荐文章
     
    相关文章
    网友评论:(只显示最新5条。)
    关于我们 | 联系我们 | 广告合作 | 付款方式 | 使用帮助 | 机电之家 | 会员助手 | 免费链接

    点击这里给我发消息66821730(技术支持)点击这里给我发消息66821730(广告投放) 点击这里给我发消息41031197(编辑) 点击这里给我发消息58733127(审核)
    本站提供的机电设备,机电供求等信息由机电企业自行提供,该企业负责信息内容的真实性、准确性和合法性。
    机电之家对此不承担任何保证责任,有侵犯您利益的地方请联系机电之家,机电之家将及时作出处理。
    Copyright 2007 机电之家 Inc All Rights Reserved.机电之家-由机电一体化网更名-声明
    电话:0571-87774297 传真:0571-87774298
    杭州滨兴科技有限公司提供技术支持

    主办:杭州市高新区(滨江)机电一体化学会
    中国行业电子商务100强网站

    网站经营许可证:浙B2-20080178-1