专业综合实习总结
2010-2011(2)
专业班级: 电子信息工程0801 学生学号: 0414080123 学生姓名: 吴锦
指导教师:张云、包长春、马崇霄、杜殿会 实习时间:
机 电 工 程 学 院
一、实习目的和意义
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、流水灯循环左移右移程序框图:
是
、0到F 一位静态显示程序框图:
3、0到9一位静态显示程序框图:
2
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,0FF H,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,0C 0H,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
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 ,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
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 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,0F 3H,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,0F 3H,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,0F 3H,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
#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
专业综合实习总结
2010-2011(2)
专业班级: 电子信息工程0801 学生学号: 0414080123 学生姓名: 吴锦
指导教师:张云、包长春、马崇霄、杜殿会 实习时间:
机 电 工 程 学 院
一、实习目的和意义
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、流水灯循环左移右移程序框图:
是
、0到F 一位静态显示程序框图:
3、0到9一位静态显示程序框图:
2
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,0FF H,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,0C 0H,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
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 ,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
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 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,0F 3H,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,0F 3H,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,0F 3H,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
#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