本人的单片机是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
;============================================================
特别声明:由于本人是从事硬件设计的,软件只是列懂一点,如有写错还是写得不好,本人欢迎高手指点,谢谢!
以后会陆续上一些实用的小程式给大家参考。
文章评论(0条评论)
登录后参与讨论