原创 多功能51单片机学习板①-遥控器程式

2007-11-9 10:27 2448 7 7 分类: MCU/ 嵌入式

本人的单片机是2005年开始自学的,当时我从0开始,还好有点硬件基础,所以自已制作了这块多功能51单片机学习板,希望可以帮助初学的朋友.......


我自制的51多功能单片机学习板希望可以帮助初学的朋友.
1)51的串口输出控制8位LED数码管(例:电子钟实验)
2)P0口做4*4键盘扫描(例:16个按键实验)
3)P1口控制8只LED发光二极管(例:流水灯实验)
4)P3.3控制蜂鸣器(例:MUSIC实验)
5)P3.2为红外遥控(例:红外遥控实验)
6)P3.6/P3.7接24C系列(例:24C系列读写实验)
7)P2口可外接控制(例:外接LCD)


点击看大图


;使用LED1SCH实验板制作摇控区码测试仪
F_DISP0   EQU   00H
F_DISP    EQU   01H


DISP01    EQU   30H
DISP02    EQU   31H
DISP03    EQU   32H
DISP04    EQU   33H
DISP05    EQU   34H
DISP06    EQU   35H
DISP07    EQU   36H
DISP08    EQU   37H


KEYCONT   EQU   40H
DISMODE   EQU   41H
;**********************************************
        ORG  0000H
         AJMP  START     ;转入主程序
        ORG  0003H     ;外部中断P3.2脚INT0入口地址
        AJMP  REMOTE   ;转入外部中断服务子程序(解码程序)
;**********************************************
START:
        MOV     PSW,#00
        CLR     CY
        MOV     R0,#0FFH
RAM_CLR:
        MOV     @R0,#0
        DJNZ    R0,RAM_CLR
 CLR P3.3            ;以下为主程序进行CPU中断方式设置
 MOV P1,#00H
 SETB  EA       ;打开CPU总中断请求
        SETB  IT0      ;设定INT0的触发方式为脉冲负边沿触发
        SETB  EX0      ;打开INT0中断请求


MAIN:
        JNB     F_DISP,MAINEND
        CLR     F_DISP
        LCALL   DIS60H
        LCALL   DELAY
MAINEND:
        SJMP    MAIN
;**********************************************
;以下为进入P3.2脚外部中断子程序,也就是解码程序
;**********************************************
REMOTE:
        CLR  EA              ;暂时关闭CPU的所有中断请求
        MOV  R6,#10
SB:     ACALL  YS1           ;调用882微秒延时子程序
        JB  P3.2,EXIT       ;延时882微秒后判断P3.2脚是否出现高电平如果有就退出解码程序
        DJNZ  R6, SB         ;重复10次,目的是检测在8820微秒内如果出现高电平就退出解码程序
                            ;以上完成对遥控信号的9000微秒的初始低电平信号的识别。
        JNB  P3.2, $         
        ACALL  YS2           
        MOV  R1,#60H         ;设定60H为起始RAM区
        MOV  R2,#4     
PP:     MOV  R3,#8     ;将8位二进制移入R3
JJJJ:   JNB  P3.2,$          
        LCALL  YS1           
        MOV  C,P3.2          
        JNC  UUU             ;如果为0就跳转到UUU
        LCALL  YS3
UUU:    MOV  A,@R1           ;将R1中地址的给A
        RRC  A               
        MOV  @R1,A           
        DJNZ  R3,JJJJ        ;接收地址码的高8位
        INC  R1              
        DJNZ  R2,PP          


        LCALL  MUSIC           ;蜂鸣器鸣响-嘀嘀嘀-的声音,表示解码成功
        LCALL  YS2
        LCALL  YS2
        LCALL  YS2


EXIT:   SETB  EA             ;允许中断
        SETB  F_DISP
        RETI                ;退出解码子程序
;**********************************************
DIS60H:
        MOV  A,60H      ;将存放在RAM\62H中的数据移入A中
        ANL  A,#0F0H    ;取RAM\62H中的数据低位
        SWAP  A
        MOV  R0,#DISP01
        LCALL  DISNUMA


        MOV  A,60H      ;将存放在RAM\62H中的数据移入A中
        ANL  A,#0FH     ;取RAM\62H中的数据高位
        MOV  R0,#DISP02
        LCALL  DISNUMB
DIS61H:
        MOV  A,61H      ;将存放在RAM\62H中的数据移入A中
        ANL  A,#0F0H    ;取RAM\62H中的数据低位
        SWAP  A
        MOV  R0,#DISP03
        LCALL  DISNUMA


        MOV  A,61H      ;将存放在RAM\62H中的数据移入A中
        ANL  A,#0FH     ;取RAM\62H中的数据高位
        MOV  R0,#DISP04
        LCALL  DISNUMB
DIS62H:
        MOV  A,62H      ;将存放在RAM\62H中的数据移入A中
        ANL  A,#0F0H    ;取RAM\62H中的数据低位
        SWAP A
        MOV  R0,#DISP05
        LCALL DISNUMA


        MOV  A,62H      ;将存放在RAM\62H中的数据移入A中
        ANL  A,#0FH     ;取RAM\62H中的数据高位
        MOV  R0,#DISP06
        LCALL  DISNUMB
DIS63H:
        MOV  A,63H      ;将存放在RAM\62H中的数据移入A中
        ANL  A,#0F0H    ;取RAM\62H中的数据低位
        SWAP  A
        MOV  R0,#DISP07
        LCALL  DISNUMA


        MOV  A,63H      ;将存放在RAM\62H中的数据移入A中
        ANL  A,#0FH     ;取RAM\62H中的数据高位
        MOV  R0,#DISP08
        LCALL  DISNUMB
;**********************************************
;发送子程序
;**********************************************
LOOP_DISP:
        MOV     R2,#8          ;2个8字显示
        MOV     R0,#DISP01      ;缓冲区首址入R0
        MOV     SCON,#00H       ;UART方式0设定
SOUT:   MOV     A,@R0           ;发送数据入A中
        CLR     TI              ;发送结束标志清零
        MOV     SBUF,A          ;启动发送
WAIO:   JNB     TI,WAIO         ;发送等等
        INC     R0              ;指向下一个发送数据地址
        DJNZ    R2,SOUT         ;N个字节发送完未完转SOUT
DISRET:
        RET
;**********************************************
DISNUMA:
        CJNE    A,#0,DIS1A
DIS0A:  MOV     A,#00111000B
        ORL     A,@R0
        ANL     A,#0C7H                 ;前0
        MOV     @R0,A
        INC     R0
        MOV     A,#11000011B
        ORL     A,@R0
        ANL     A,#03DH
        MOV     @R0,A
        RET
DIS1A:  CJNE    A,#1,DIS2A
        MOV     A,#00111000B
        ORL     A,@R0
        ANL     A,#0F7H                 ;前1
        MOV     @R0,A
        INC     R0
        MOV     A,#11000011B
        ORL     A,@R0
        ANL     A,#0BFH
        MOV     @R0,A
        RET
DIS2A:  CJNE    A,#2,DIS3A
        MOV     A,#00111000B
        ORL     A,@R0
        ANL     A,#0CFH                 ;前2
        MOV     @R0,A
        INC     R0
        MOV     A,#11000011B
        ORL     A,@R0
        ANL     A,#3EH
        MOV     @R0,A
        RET
DIS3A:  CJNE    A,#3,DIS4A
        MOV     A,#00111000B
        ORL     A,@R0
        ANL     A,#0D7H                 ;前3
        MOV     @R0,A
        INC     R0
        MOV     A,#11000011B
        ORL     A,@R0
        ANL     A,#3EH
        MOV     @R0,A
        RET
DIS4A:  CJNE    A,#4,DIS5A
        MOV     A,#00111000B
        ORL     A,@R0
        ANL     A,#0F7H                 ;前4
        MOV     @R0,A
        INC     R0
        MOV     A,#11000011B
        ORL     A,@R0
        ANL     A,#0BCH
        MOV     @R0,A
        RET
DIS5A:  CJNE    A,#5,DIS6A
        MOV     A,#00111000B
        ORL     A,@R0
        ANL     A,#0D7H                 ;前5
        MOV     @R0,A
        INC     R0
        MOV     A,#11000011B
        ORL     A,@R0
        ANL     A,#7CH
        MOV     @R0,A
        RET
DIS6A:  CJNE    A,#6,DIS7A
        MOV     A,#00111000B
        ORL     A,@R0
        ANL     A,#0C7H                 ;前6
        MOV     @R0,A
        INC     R0
        MOV     A,#11000011B
        ORL     A,@R0
        ANL     A,#7CH
        MOV     @R0,A
        RET
DIS7A:  CJNE    A,#7,DIS8A
        MOV     A,#00111000B
        ORL     A,@R0
        ANL     A,#0F7H                 ;前7
        MOV     @R0,A
        INC     R0
        MOV     A,#11000011B
        ORL     A,@R0
        ANL     A,#3FH
        MOV     @R0,A
        RET
DIS8A:  CJNE    A,#8,DIS9A
        MOV     A,#00111000B
        ORL     A,@R0
        ANL     A,#0C7H                 ;前8
        MOV     @R0,A
        INC     R0
        MOV     A,#11000011B
        ORL     A,@R0
        ANL     A,#3CH
        MOV     @R0,A
        RET
DIS9A:  CJNE    A,#9,DIS1RET
        MOV     A,#00111000B
        ORL     A,@R0
        ANL     A,#0D7H                 ;前9
        MOV     @R0,A
        INC     R0
        MOV     A,#11000011B
        ORL     A,@R0
        ANL     A,#3CH
        MOV     @R0,A
DIS1RET:
        RET
;------------------------------------------------------------------------
DISNUMB:
DIS0:   CJNE    A,#0,DIS1
        MOV     A,#11000001B
        ORL     A,@R0
        ANL     A,#3EH                 ;后0
        MOV     @R0,A
        INC     R0
        MOV     A,#00111100B
        ORL     A,@R0
        ANL     A,#0D3H
        MOV     @R0,A
        RET
DIS1:   CJNE    A,#1,DIS2
        MOV     A,#11000001B
        ORL     A,@R0
        ANL     A,#0FEH                 ;后1
        MOV     @R0,A
        INC     R0
        MOV     A,#00111100B
        ORL     A,@R0
        ANL     A,#0FBH
        MOV     @R0,A
        RET
DIS2:   CJNE    A,#2,DIS3
        MOV     A,#11000001B
        ORL     A,@R0
        ANL     A,#3FH                 ;后2
        MOV     @R0,A
        INC     R0
        MOV     A,#00111100B
        ORL     A,@R0
        ANL     A,#0E3H
        MOV     @R0,A
        RET
DIS3:   CJNE    A,#3,DIS4
        MOV     A,#11000001B
        ORL     A,@R0
        ANL     A,#0BEH                 ;后3
        MOV     @R0,A
        INC     R0
        MOV     A,#00111100B
        ORL     A,@R0
        ANL     A,#0E3H
        MOV     @R0,A
        RET
DIS4:   CJNE    A,#4,DIS5
        MOV     A,#11000001B
        ORL     A,@R0
        ANL     A,#0FEH                 ;后4
        MOV     @R0,A
        INC     R0
        MOV     A,#00111100B
        ORL     A,@R0
        ANL     A,#0CBH
        MOV     @R0,A
        RET
DIS5:   CJNE    A,#5,DIS6
        MOV     A,#11000001B
        ORL     A,@R0
        ANL     A,#0BEH                 ;后5
        MOV     @R0,A
        INC     R0
        MOV     A,#00111100B
        ORL     A,@R0
        ANL     A,#0C7H
        MOV     @R0,A
        RET
DIS6:   CJNE    A,#6,DIS7
        MOV     A,#11000001B
        ORL     A,@R0
        ANL     A,#3EH                 ;后6
        MOV     @R0,A
        INC     R0
        MOV     A,#00111100B
        ORL     A,@R0
        ANL     A,#0C7H
        MOV     @R0,A
        RET
DIS7:   CJNE    A,#7,DIS8
        MOV     A,#11000001B
        ORL     A,@R0
        ANL     A,#0FEH                 ;后7
        MOV     @R0,A
        INC     R0
        MOV     A,#00111100B
        ORL     A,@R0
        ANL     A,#0F3H
        MOV     @R0,A
        RET
DIS8:   CJNE    A,#8,DIS9
        MOV     A,#11000001B
        ORL     A,@R0
        ANL     A,#3EH                 ;后8
        MOV     @R0,A
        INC     R0
        MOV     A,#00111100B
        ORL     A,@R0
        ANL     A,#0C3H
        MOV     @R0,A
        RET
DIS9:   CJNE    A,#9,DIS2RET
        MOV     A,#11000001B
        ORL     A,@R0
        ANL     A,#0BEH                 ;后9
        MOV     @R0,A
        INC     R0
        MOV     A,#00111100B
        ORL     A,@R0
        ANL     A,#0C3H
        MOV     @R0,A
DIS2RET:
        RET


;*****************************************************
MUSIC:
 CPL P3.3
 LCALL DELAY
 CLR P3.3
 LCALL DELAY
 LCALL DELAY
 RET
;**********************************************
DELAY:
        MOV     R2,#0FFH
DELAY1: MOV     R1,#0FFH
        DJNZ    R1,$
        DJNZ    R2,DELAY1
        RET
;**********************************************
YS1:    MOV R4,#20              ;延时882微秒
D1:     MOV R5,#20
        DJNZ R5,$
        DJNZ R4,D1
        RET
;**********************************************
YS2:    MOV R4,#10             ;延时4740微秒
D2:     MOV R5,#235
        DJNZ R5,$
        DJNZ R4,D2
        RET
;**********************************************
YS3:    MOV R4,#2              ;延时1000微秒
D3:     MOV R5,#248
        DJNZ R5,$
        DJNZ R4,D3
        RET
;**********************************************
 END
;============================================================


特别声明:由于本人是从事硬件设计的,软件只是列懂一点,如有写错还是写得不好,本人欢迎高手指点,谢谢!


以后会陆续上一些实用的小程式给大家参考。

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
7
关闭 站长推荐上一条 /3 下一条