专业综合实习总结
专业班级: 电子信息工程0801
学生学号: ***
指导教师:
实习时间:20XX.6.20—20XX.7.15
机 电 工 程 学 院
一、实习目的和意义
1、实习目的:
(1)利用单片机小系统实习板,掌握电路原理图;
(2)通过对系统板的测试,了解系统板的工作原理及性能,掌握元器件及系统故障的排除方法;
(3)通过单片机系统的调试、程序编制及运行,掌握单片机系统的工作原理、开发方法和操作方法。
2、实习意义:
通过本实习不但可以掌握单片机软、硬件的综合调试方法,而且可以熟练掌握电路原理图,激发对单片机智能性的探索精神,提高学生的综合素质,培养学生应用单片机实现对工业控制系统的设计、开发与调试的能力。在制作学习过程中,不但可以掌握软、硬件的综合调试方法,而且可以使学生对单片机智能性产生强烈的欲望。达到最大限度地掌握微机应用技术,软件及接口设计和数据采集与处理的技能,培养电综合实践素质的目的。
二、实习内容
1.熟悉“单片机课程实习”电路板,领会、掌握该电路板的设计原理及硬件布局。
2.掌握单片机技术应用平台keil软件的学习。
3.借助平台软件,学习开发板的使用,按照要求编制、调试出正确的汇编语言程序。
4.学习适合本开发平台软件STC-ISP的在线单片机烧录。
5.针对实习电路板的功能,编制、调试、编译汇编语言程序,下载烧录并在实验板上运行,或利用软件ISIS 7 Professional进行软件仿真。
实现的功能:
1.led显示模块:单向循环流水led显示、双向循环流水led显示、花样流水灯的显示,使用查表方法编制任意点亮历程的实现,使用软件延时;
2.数码管显示模块:一位静态数码管显示0到9和0到F、二位静态数码管显示0到99、三位静态数码管显示0到999、四位静态数码管显示0到9999;阴极和阳极四位动态数码管显示;74LS驱动4位静态数码管显示;利用74HC595四位静态数码管显示;使用串行静态显示和动态扫描显示两种方式;
3.键盘模块:利用4×4矩阵键盘按键对应置数显示“0~F”;使用键盘的行列扫描方式;
三、硬件介绍
(一)LED显示模块:
图1 流水灯显示
图2 键盘控制循环灯
(二)数码管显示模块:
图3 1位静态数码管显示
图4 4位静态数码管显示
图5 4位动态数码管显示
图6 独立键盘加减清零数码管显示
图7 4位74LS驱动静态数码管显示
图8 4位74HC595静态显示
图9 0到F矩阵键盘
四、软件程序流程图
1、流水灯循环左移右移程序框图:
2、0到F一位静态显示程序框图:
3、0到9一位静态显示程序框图:
4、动态数码显示程序框图:
5、4×4矩阵矩阵键盘数码显示程序框图:
主程序图:
判别是否有键按下程序:
五、实习的心得体会
回顾起此次课程设计,感觉受益匪浅,从拿到题目到完成整个编程,从理论到实践,学到很多很多的课堂理论中没学到过的东西,不仅对键盘的识别技术这一章节的知识点有了深刻的认识,而且对这学期开设的单片机这门课程有了更全面的了解,尤其是在学习使用proteus软件片编程和仿真时收获良多。通过这次单片机课程设计,还使我懂得了实践的重要性。同时在程序调试的过程中提高自己的发现问题、解决问题、实际动手和独立思考的能力。
本次单片机实习我们一共完成了三个模块的程序设计,包括:led显示模块、数码管显示模块和键盘模块。分别实现了流水灯的循环点亮控制、数码管的静态和动态计数显示,还有矩阵键盘按键控制数码管显示的程序设计。然后我们分别用protues系统仿真软件对各个模块进行了模拟仿真,用keil软件编制了汇编语言程序,验证了我们所设计的程序。
当然,这其中也有很多问题,第一、不够细心比如由于粗心大意焊错了线,由于对课本理论的不熟悉导致编程出现错误。第二,是在学习态度上,这次课设是对我的学习态度的一次检验。对于这次单片机综合课程实习,我的第一大心得体会就是作为一名工程技术人员,要求具备的首要素质绝对应该是严谨。我们这次实习所遇到的多半问题多数都是由于我们不够严谨。第三,在做人上,我认识到,无论做什么事情,只要你足够坚强,有足够的毅力与决心,有足够的挑战困难的勇气,就没有什么办不到的。
通过这次单片机实习,我不仅加深了对单片机理论的理解,将理论很好地应用到实际当中去,而且我还学会了如何去培养我们的创新精神,从而不断地战胜自己,超越自己。创新可以是在原有的基础上进行改进,使之功能不断完善,成为真己的东西。
这次课程设计能顺利的完成,除了我们的努力外,当然也离不开指导老师申老师的辛勤指导,致使我在设计的过程中学到了很多实用性的知识。同时,对给过我帮助的所有同学和各位指导老师表示忠心的感谢!
附录:程序清单
P1口闪亮:ORG 0000H
LOOP:MOV P1,#01H
ACALL DELAY
MOV P1,#00H
ACALL DELAY
SJMP LOOP
DELAY:MOV R7,#250
DEL1:MOV R6,#250
DJNZ R6,$
DJNZ R7,DEL1
RET
END
流水灯循环左移右移:
方法一:ORG 0000H
MOV A,#01H
LOOP: MOV P1,A
MOV R5,#10
LOOP1:ACALL DELAY
DJNZ R5,LOOP1
RL A
JB ACC.7, LOOP2
SJMP LOOP
LOOP2:MOV P1,A
MOV R5,#10
LOOP3:ACALL DELAY
DJNZ R5,LOOP3
RR A
JB ACC.0,LOOP
SJMP LOOP2
DELAY:MOV R7,#250
DEL1:MOV R6,#250
DJNZ R6,$
DJNZ R7,DEL1
RET
END
方法二:ORG 0000H
MOV A,#80H
LOOP:RL A
MOV P1,A
ACALL DELAY
CJNE A,#80H,LOOP
LOOP1:RR A
MOV P1,A
ACALL DELAY
CJNE A,#01H,LOOP1
SJMP LOOP
DELAY:MOV R7,#0FFH
DELAY1:MOV R6,#0FFH
DELAY2:MOV R5,#03H
DELAY3:DJNZ R5,DELAY3
DJNZ R6,DELAY2
DJNZ R7,DELAY1
RET
END
方法三:ORG 0000H
MOV A,#80H
MOV R0,#08H
LOOP:RL A
MOV P1,A
ACALL DELAY
DJNZ R0,LOOP
MOV R0,#07H
LOOP1:RR A
MOV P1,A
ACALL DELAY
DJNZ R0,LOOP1
MOV R0,#07H
SJMP LOOP
DELAY:MOV R7,#0FFH
DELAY1:MOV R6,#0FFH
DELAY2:MOV R5,#03H
DELAY3:DJNZ R5,DELAY3
DJNZ R6,DELAY2
DJNZ R7,DELAY1
RET
END
方法四:ORG 0000H
MOV A,#00H
SETB CY
LOOP:RLC A
JC LOOP1
MOV P1,A
ACALL DELAY
SJMP LOOP
LOOP1:RRC A
JC LOOP
MOV P1,A
ACALL DELAY
SJMP LOOP1
DELAY:MOV R7,#0FFH
DELAY1:MOV R6,#0FFH
DELAY2:MOV R5,#03H
DELAY3:DJNZ R5,DELAY3
DJNZ R6,DELAY2
DJNZ R7,DELAY1
RET
END
从中间向两边,再从两边向中间循环点亮: ORG 0000H
STAR:MOV R0,#00H
MOV R1,#07
MOV A,R0
MOV DPTR,#TAB
LOOP: MOVC A,@A+DPTR
MOV P1,A
MOV R5,#10
LOOP1:ACALL DEL
DJNZ R5,LOOP1
INC R0
MOV A,R0
DJNZ R1,LOOP
SJMP STAR
DEL:MOV R7,#200
DEL1:MOV R6,#250
DJNZ R6,$
DJNZ R7,DEL1
RET
TAB:DB 18H,24H,42H,81H,42H,24H,18H
END
键盘控制流水灯循环点亮:
ORG 0000H
AJMP MAIN
ORG 0003H
AJMP ET
ORG 0030H
MAIN:MOV SP,#60H
SETB EA
SETB IT0
SETB EX0
CLR C
MOV A,#0FFH
MOV P2,A
LCALL DEL
LOOP:JNB 21H.1,L ;检测标志
RRC A ;右移动
MOV P2,A
AJMP DEE
L: RLC A ;左移动
MOV P2,A
DEE: LCALL DEL
AJMP LOOP
ET: CLR EA
PUSH ACC
PUSH PSW
LCALL DELAY
MOV A,#0FFH
MOV P1,A
NOP
NOP
MOV A,P1 ;读键值
ANL A,#0F0H
CJNE A,#0F0H,NEXT1
AJMP NEXT
NEXT1:JB ACC.5,NEXT2
CLR 21H.1 ;按键后产生标志
AJMP NEXT
NEXT2:JB ACC.6,NEXT
SETB 21H.1 ;按键后产生标志
NEXT: SETB EA
POP PSW
POP ACC
HHH: RETI
DEL:MOV R6,#250
DEL11:MOV R5,#250
DJNZ R5,$
DJNZ R6,DEL11
RET
DELAY:MOV R6,#10
DEL1: MOV R5,#200
DEL2: DJNZ R5,$
DJNZ R6,DEL1
RET
END
花样流水灯:
ORG 0000H
START:MOV R0,#00H
MOV P1,#00H
LOOP:MOV A,R0
ADD A,#0CH
MOVC A,@A+PC
CJNE A,#01H,XSH
SJMP START
XSH:MOV P1,A
ACALL DELAY
INC R0
SJMP LOOP
DB0FFH,00H,0FFH,00H,0FFH,00H,0FFH,00H,0FH,0F0H,0FH,0F0H,0FH,0F0H,0FH
DB0F0H,0FH,0F0H,0AAH,55H,0AAH,55H,0AAH,55H,0AAH,55H,0AAH,55H,81H,42H
DB24H,18H,24H,42H,81H,42H,24H,18H,24H,42H,81H,42H,24H,18H,24H,42H,81H
DB42H,24H,18H,24H,42H,81H,03H,06H,0CH,18H,30H,60H,0C0H,60H,30H,18H,0CH
DB06H,03H,06H,0CH,18H,30H,60H,0C0H,60H,30H,18H,0CH,06H,03H,01H
DELAY:MOV R7,#0FFH
DELAY1:MOV R6,#0FFH
DELAY2:MOV R5,#03H
DELAY3:DJNZ R5,DELAY3
DJNZ R6,DELAY2
DJNZ R7,DELAY1
RET
END
1位静态数码显示:
ORG 0000H
MOV R0,#0FFH
DISPLY: INC R0
CJNE R0,#0AH,DISPLY1
MOV R0,#0FFH
SJMP DISPLY
DISPLY1:MOV A,R0
ADD A,#06H
MOVC A,@A+PC
MOV P0,A
ACALL DELAY
SJMP DISPLY
DTAB:DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
DB88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,89H,7FH,0BFH
DELAY:MOV R7,#0FFH
DELAY1:MOV R6,#0FFH
DELAY2:MOV R5,#03H
DELAY3:DJNZ R5,DELAY3
DJNZ R6,DELAY2
DJNZ R7,DELAY1
RET
2位静态数码显示:
ORG 0000H
MOV R0,#0FFH
MOV R1,#00H
DISPLY: INC R0
CJNE R0,#0AH,DISPLY1
INC R1
CJNE R1,#0AH,DISPLY2
MOV R0,#0FFH
MOV R1,#00H
MOV P0,#0FFH
AJMP DISPLY
DISPLY2:MOV A,R1
ADD A,#10H
MOVC A,@A+PC
MOV P0,A
MOV R0,#0FFH
AJMP DISPLY
DISPLY1:MOV A,R0
ADD A,#06H
MOVC A,@A+PC
MOV P2,A
ACALL DELAY
AJMP DISPLY
DTAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
DB 88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,89H,7FH,0BFH
DELAY:MOV R7,#0FFH
DELAY1:MOV R6,#0FFH
DELAY2:MOV R5,#03H
DELAY3:DJNZ R5,DELAY3
DJNZ R6,DELAY2
DJNZ R7,DELAY1
RET
END
3位静态数码显示:
ORG 0000H
START: MOV R0,#0FFH
MOV R1,#00H
MOV R2,#00H
MOV P3,#0FFH
MOV P2,#0FFH
MOV P0,#0FFH
DISPLY: INC R0
CJNE R0,#0AH,DISPLY1
MOV R0,#0FFH
INC R1
CJNE R1,#0AH,DISPLY2
MOV R1,#00H
MOV P2,#0C0H
INC R2
CJNE R2,#0AH,DISPLY3
SJMP START
DISPLY3:MOV A,R2
ADD A,#16H
MOVC A,@A+PC
MOV P0,A
SJMP DISPLY
DISPLY2:MOV A,R1
ADD A,#0EH
MOVC A,@A+PC
MOV P2,A
SJMP DISPLY
DISPLY1:MOV A,R0
ADD A,#06H
MOVC A,@A+PC
MOV P3,A
ACALL DELAY
SJMP DISPLY
DTAB:DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
DB88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,89H,7FH,0BFH
DELAY: MOV R7,#0FFH
DELAY1:MOV R6,#0FFH
DELAY2:MOV R5,#03H
DELAY3:DJNZ R5,DELAY3
DJNZ R6,DELAY2
DJNZ R7,DELAY1
RET
END
4位静态数码显示:
ORG 0000H
START: MOV R0,#0FFH
MOV R1,#00H
MOV R2,#00H
MOV R3,#00H
MOV P1,#0FFH
MOV P3,#0FFH
MOV P2,#0FFH
MOV P0,#0FFH
DISPLY: INC R0
CJNE R0,#0AH,DISPLY1
MOV R0,#0FFH
INC R1
CJNE R1,#0AH,DISPLY2
MOV R1,#00H
MOV P3,#0C0H
INC R2
CJNE R2,#0AH,DISPLY3
MOV R2,#00H
MOV P2,#0C0H
INC R3
CJNE R3,#0AH,DISPLY4
SJMP START
DISPLY4:MOV A,R3
ADD A,#1EH
MOVC A,@A+PC
MOV P0,A
SJMP DISPLY
DISPLY3:MOV A,R2
ADD A,#16H
MOVC A,@A+PC
MOV P2,A
SJMP DISPLY
DISPLY2:MOV A,R1
ADD A,#0EH
MOVC A,@A+PC
MOV P3,A
SJMP DISPLY
DISPLY1:MOV A,R0
ADD A,#06H
MOVC A,@A+PC
MOV P1,A
ACALL DELAY
SJMP DISPLY
DTAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
DB 88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,89H,7FH,0BFH
DELAY: MOV R7,#0AH
DELAY1:MOV R6,#0FFH
DELAY2:MOV R5,#03H
DELAY3:DJNZ R5,DELAY3
DJNZ R6,DELAY2
DJNZ R7,DELAY1
RET
END
74HC595四位稳定显示:
1)最大数为9999的计数器
ORG 0000H
AJMP MAIN
ORG 000BH
AJMP CRT0
ORG 0020H
MAIN:MOV R1,#33H
MOV R2,#04H
CLEAR:MOV @R1,#33H
DEC R1
DJNZ R2,CLEAR
MOV SP,#60H
MOV TMOD,#01H
MOV TH0,#3CH
MOV TL0,#0B0H
SETB EA
SETB ET0
SETB TR0
MOV R7,#1
MOV DPTR,#DTAB
LOOP: MOV R1,#33H
MOV R2,#04H
MOV R3,#08H
MOV R4,#01H
LOOP1:MOV A,R3
MOV P2,A
RR A
MOV R3,A
MOV A,@R1
CJNE R4,#00H,MODE
XSH: LCALL DIS
LCALL DEL
DEC R1
DJNZ R2,LOOP1
AJMP LOOP
MODE: CJNE A,#00H,FH
MOV R4,#01H
MOV A,#0AH
SJMP XSH
FH: MOV R4,#00H
SJMP XSH
CRT0: DJNZ R7,RRR
MOV R7,#1
INC 30H
MOV R0,30H
CJNE R0,#0AH,RRR
MOV 30H,#00H
INC 31H
MOV R0,31H
CJNE R0,#0AH,RRR
MOV 31H,#00H
INC 32H
MOV R0,32H
CJNE R0,#0AH,RRR
MOV 32H,#00H
INC 33H
MOV R0,33H
CJNE R0,#0AH,RRR
MOV 33H,#00H
RRR: MOV TH0,#3CH
MOV TL0,#0B0H
RETI
DIS: MOVC A,@A+DPTR
MOV P0,A
RET
DEL: MOV R6,#20
DEL1: MOV R5,#150
DEL2: DJNZ R5,$
DJNZ R6,DEL1
RET
DTAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH
DB 88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,89H,7FH,0BFH
END
2)最高位为零时,最高位不显示
ORG 0000H
AJMP MAIN
ORG 000BH
AJMP CRT0
ORG 0020H
MAIN: MOV R1,#33H
MOV R2,#04H
CLEAR: MOV @R1,#00H
DEC R1
DJNZ R2,CLEAR
MOV SP,#60H
MOV TMOD,#01H
MOV TH0,#3CH
MOV TL0,#0B0H
SETB EA
SETB ET0
SETB TR0
MOV R7,#1
MOV DPTR,#DTAB
LOOP: MOV R1,#33H
MOV R2,#04H
MOV R3,#08H
LOOP1: MOV A,R3
MOV P2,A
RR A
MOV R3,A
MOV A,@R1
LCALL DIS
LCALL DEL
DEC R1
DJNZ R2,LOOP1
AJMP LOOP
CRT0: DJNZ R7, RRR
MOV R7,#1
MOV R0,#30H
MOV R4,04H
CON: INC @R0
CJNE @R0,#0AH,RRR
MOV @R0,#00H
INC R0
DJNZ R4,CON
RRR: MOV TH0,#3CH
MOV TL0,#0B0H
RETI
DIS: MOVC A,@A+DPTR
MOV P0,A
RET
DEL: MOV R6,#20
DEL1: MOV R5,#150
DEL2: DJNZ R5,$
DJNZ R6,DEL1
RET
DTAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH
DB 88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,89H,7FH,0BFH
END
3)最大数为256的计数器
DAT DATA 30H
BW DATA 31H
SHW DATA 32H
GW DATA 33H
ORG 0000H
AJMP MAIN
ORG 000BH
AJMP COUNT
ORG 0030H
MAIN: MOV SP,#60H
MOV TMOD,#01H
MOV TH0,#3CH
MOV TL0,#0B0H
SETB EA
SETB ET0
SETB TR0
MOV R7,#2
MOV DAT,#00H
LOOP: LCALL CHANGE
MOV P2,#01H
MOV A,GW
LCALL DIS
LCALL DEL
MOV P2,#02H
MOV A,SHW
LCALL DIS
LCALL DEL
MOV P2,#04H
MOV A,BW
LCALL DIS
LCALL DEL
MOV P2,#08H
MOV A ,#0AH
LCALL DIS
LCALL DEL
AJMP LOOP
COUNT: DJNZ R7,RRR
MOV R7,#2
INC DAT
RRR: MOV TH0,#3CH
MOV TL0,#0B0H
RETI
CHANGE: MOV A,DAT
MOV B,#100
DIV AB
MOV BW,A
MOV A,#10
XCH A,B
DIV AB
MOV SHW,A
MOV GW,B
RET
DIS: MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV P0,A
RET
DEL: MOV R6,#20
DEL1: MOV R5,#150
DEL2: DJNZ R5,$
DJNZ R6,DEL1
RET
TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH
END
74LS4位静态数码显示:
方法一:ORG 0000H
MOV R3,#04H
MOV R0,#20H
START:LCALL DISPLAY
LCALL COUNT
LCALL DELAY
SJMP START
COUNT:INC @R0
CJNE @R0,#0AH,DON
MOV @R0,#00H
SHW: INC R0
INC @R0
CJNE @R0,#0AH,DE1
MOV @R0,#00HBW: INC R0
INC @R0
CJNE @R0,#0AH,DE2
MOV @R0,#00H
QW: INC R0
INC @R0
CJNE @R0,#0AH,DE3
MOV @R0,#00H
DE3: DEC R0
DE2: DEC R0
DE1: DEC R0
DON: RET
DISPLAY:MOV SCON,#00H
LOOP:MOV A,@R0
ADD A,#0FH
MOVC A,@A+PC
MOV SBUF,A
JNB TI,$
CLR TI
INC R0
DJNZ R3,LOOP
MOV R3,#04H
MOV R0,#20H
DON1:RET
DTAB:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
DB77H,7CH,39H,5EH,79H,71H,00H,0F3H,76H,80H,40H
DELAY:MOV R7,#50
DELAY1:MOV R6,#100
DELAY2:MOV R5,#20
DJNZ R5,$
DJNZ R6,DELAY2
DJNZ R7,DELAY1
RET
END
方法二:ORG 0000H
AJMP MAIN
ORG 000BH
AJMP COUNT
ORG 0020H
MAIN: MOV R1,#30H
MOV R2,#04H
CLEAR:MOV @R1,#00H
INC R1
DJNZ R2,CLEAR
MOV SP,#60H
MOV TMOD,#01H
MOV TH0,#0B0H
SETB EA
SETB ET0
SETB TR0
MOV R3,#3
MOV DPTR,#DTAB
MOV SCON,#00H
DISPLY:MOV R1,#30H
MOV R2,#04H
LOOP:MOV A,@R1
MOVC A,@A+DPTR
MOV SBUF,A
JNB TI,$
CLR TI
INC R1
DJNZ R2,LOOP
ACALL DEL
SJMP LOOP
COUNT:DJNZ R3,RRR
MOV R3,#3
MOV R0,#30H
MOV R4,#04H
CON:INC @R0
CJNE @R0,#0AH,RRR
MOV @R0,#00H
INC R0
DJNZ R4,CON
RRR:MOV TH0,#3CH
MOV TL0,#0B0H
RETI
DEL:MOV R6,#250
DEL1:MOV R5,#250
DEL2:DJNZ R5,$
DJNZ R6,DEL1
RET
DTAB:DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
DB77H,7CH,39H,5EH,79H,71H,00H,0F3H,76H,80H,40H
END
动态数码显示:ORG 0000H
ACALL START
START1: MOV @R0,#00H
INC R0
DJNZ R2,START1
ACALL START2
COUNT: CJNE @R0,#0AH,ACALLDIS
MOV @R0,#00H
INC R0
INC @R0
CJNE R0,#34H,COUNT
ACALL START
AJMP START1
ACALLDIS:ACALL DISPLAY
INC @R0
AJMP COUNT
DISPLAY: ACALL START
MOV R4,#01H
DISPLAY1:MOV A,@R0
MOV DPTR,#DTAB
MOVC A,@A+DPTR
MOV P0,A
INC R0
MOV A,R3
MOV P2,A
RL A
MOV R3,A
ACALL DELAY
DJNZ R2,DISPLAY1
ACALL START
DJNZ R4,DISPLAY1
RET
DTAB:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
DB77H,7CH,39H,5EH,79H,71H,00H,0F3H,76H,80H,40H
START:MOV R3,#0FEH
START2:MOV R0,#34H
MOV R2,#04H
RET
DELAY:MOV R7,#088H
DEL1:MOV R6,#88H
DEL2:MOV R5,#01H
DEL3:DJNZ R5,DEL3
DJNZ R6,DEL2
DJNZ R7,DEL1
RET
END
独立键盘加减清零数码显示:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit key1=P3^4;
sbit key2=P3^5;
sbit key3=P3^6;
sbit key4=P3^7;
sbit dula=P2^6;
sbit wela=P2^7;
uchar code table[]=
{0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void delayms(uint);
uchar numt0,num;
void display(numdis)
{uchar shi,ge;
shi=numdis/10;
ge=numdis%10;
wela=1;
P0=0xfe;
wela=0;
dula=1;
P0=table[shi];
dula=0;
P0=0xff;
delayms(5);
wela=1;
P0=0xfd;
wela=0;
dula=1;
P0=table[ge];
dula=0;
P0=0xff;
delayms(5);}
void delayms(uint x)
{uint i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);}
void init()
{TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;}
void keyscan()
{if(key1==0)
{delayms(10);
if(key1==0)
{num++;
if(num==60)
num=0;
while(!key1);}}
if(key2==0)
{delayms(10);
if(key2==0)
{ if(num==0)
num=60;
num--;
while(!key2); }}
if(key3==0)
{delayms(10);
if(key3==0)
{num=0;
while(!key2);}}
if(key4==0)
{delayms(10);
if(key4==0)
{ while(!key4);
TR0=~TR0;}}}
void main()
{init();
while(1)
{keyscan();
display(num);}}
void T0_time() interrupt 1
{TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
numt0++;
if(numt0==20)
{numt0=0;
num++;
if(num==60)
num=0;}}
矩阵键盘0到F显示:
KEY_DATA DATA 30H
ORG 0000H
MOV KEY_DATA,#10H
AJMP MAIN
ORG 0030H
MAIN:MOV SP,#60H
LOOP:LCALL SCAN
MOV A,KEY_DATA
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV P0,A
LCALL DEL
AJMP LOOP
SCAN:MOV A,#0FH
MOV P1,A
MOV A,P1
CJNE A,#0FH,KEYSCAN
RET
KEYSCAN:LCALL DEL
MOV R2,#7FH
MOV R3,#4
MOV R0,#00H
KEYSM1:MOV A,R2
MOV P1,A
RR A
MOV R2,A
MOV A,P1
ANL A,#0FH
CJNE A,#0FH,JSADD
INC R0
DJNZ R3,KEYSM1
RET
JSADD: JB ACC.0,JSADD1
MOV A,#0
AJMP JSADD4
JSADD1:JB ACC.1,JSADD2
MOV A,#4
AJMP JSADD4
JSADD2:JB ACC.2,JSADD3
MOV A,#8
AJMP JSADD4
JSADD3:JB ACC.3,JSADD4
MOV A,#12
JSADD4:ADD A,R0
MOV KEY_DATA,A
DEL: MOV R6,#50
DEL1: MOV R5,#200
DJNZ R5,$
DJNZ R6,DEL1
RET
TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
DB88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,89H,7FH,0BFH
END