1、广告灯一、问题的提出用八个发光二极管代替广告灯,实现广告灯的循环以及花样变化!二、总体设计1、分析问题的功能将 P1 口的 8 个引脚分别接 8 位发光二极管0,1,2,3,4,5,6,7。通过控制 P1 口的输出,实现每隔 0.5s 接在 P1 口的 8 个发光二极管从右依次点亮 0,1,2,3,4,5,6,7,然后从左依次熄灭 7,6,5,4,3,2,1,0,然后 8 个发光二极管全部点亮,闪烁 3 次;接着,每隔 0.5s 接在 P1 口的 8 个发光二极管从左依次点亮7,6,5,4,3,2,1,0,然后从右依次熄灭 0,1,2,3,4,5,6,7,然后 8 个发光二极管全部点亮,闪烁
2、3 次;接着 8 个二极管从左轮流点亮0,1,2,3,4,5,6,7,然后 8 个二极管从右轮流点亮7,6,5,4,3,2,1,0,然后 8 个发光二极管全部点亮,闪烁 5 次,之后全灭;如此反复循环。循环过程中通过中断加入一些广告灯的花样变化。2、系统总体结构设计1)硬件设计:8031 单片机,DP-51PROC 综合仿真实验仪,P1 口,定时器 0,外部中断 1 等。2)软件设计:各功能模块详见程序清单后注释。三、详细设计:1、硬件详细设计:时间间隔可采用软件延时或定时器定时,软件延时:8031 时钟频率11.0592MHz,延时 0.5S,P1 口输出。采用定时器 0 定时延时:ORG
3、800BHLJMP TOS定时器 0 赋定时初值:MOV TH0,#4CHMOV TL0,#00H电路图:定时中断子程序:TOS: MOV TH0,#4CHMOV TL0,#00HINC R0CJNE R0,#10,LLMOV R0,#00H RETI 外部中断子程序:INT1S: PUSH ACCPOP ACCRETI2、软件详细设计:软件延时:DELAY: MOV 31H,#0MOV 32H,#0 LOOP2: DJNZ 32H,$DJNZ 32H,$DJNZ 32H,$DJNZ 32H,$DJNZ 31H,LOOP2RET逐个点亮:NEXT1:MOV P1,ACLR CRLC AINC
4、R1SJMP NEXT逐个熄灭:NEXT3:MOV P1,ASETB CRRC AINC R2SJMP NEXT循环点亮:NEXT13:MOV P1,ARL AINC R7SJMP NEXT闪烁:NEXT11:MOV P1,ACPL AINC R6SJMP NEXT 花样变换:见外部中断 1 子程序。 3、设计中的主要困难及解决方案1) 通过一个定时器来定时延时,将多个循环过程串联起来,需要解决各个循环之间的衔接问题。本实验中通过借用计数器(R0R7,20H,30H 等)来实现查询等待,通过 D1:CJNE R1,#8,D1 语句巧妙的把多个循环串联在一起!2) 。通过外部中断实现广告灯的花样
5、变化,需借助软件延时!外部中断通过硬件连线、边沿触发实现!外部中断的花样变化为本实验的又一亮点!四、程序清单1流程图2程序清单ORG 8000HLJMP MAINORG 800BH ;定时器 0 入口地址LJMP TOSORG 8013H ;外部中断 1 入口地址LJMP INT1SMAIN:MOV SP,#60H ;主程序MOV TMOD,#09HMOV TH0,#4CHMOV TL0,#00HMOV R0,#00HMOV IE,#10000010BSETB TR0SETB EX1SETB PX1MOV R1,#0 ;计数器MOV R2,#0MOV R3,#0MOV R4,#0MOV R5,
6、#0MOV R6,#0MOV R7,#0MOV 20H,#0MOV 30H,#0MOV A,#0FEHD1:CJNE R1,#8,D1 ;查询等待,以下雷同。MOV A,#00HD2:CJNE R2,#9,D2MOV A,#00HD3:CJNE R3,#5,D3MOV A,#7FHD4:CJNE R4,#8,D4MOV A,#00HD5:CJNE R5,#10,D5MOV A,#00HD6:CJNE R6,#5,D6MOV A,#0FEHD7:CJNE R7,#8,D7MOV A,#7FHD8:PUSH ACCMOV A,20HCJNE A,#08H,L1POP ACCSJMP L2L1:PO
7、P ACCSJMP D8L2:MOV A,#00HD9:PUSH ACCMOV A,30HCJNE A,#11,L3POP ACCSJMP L4L3:POP ACCSJMP D9L4:MOV A,#0FFHLJMP MAIN ;主程序循环TOS:MOV TH0,#4CH ;定时延时子程序MOV TL0,#00HINC R0CJNE R0,#10,LLMOV R0,#00HCJNE R1,#8,NEXT1SJMP NEXT2LL:CPL P3.0LJMP NEXTNEXT1:MOV P1,A ;向右逐个点亮CLR CRLC AINC R1SJMP NEXTNEXT2:CJNE R2,#9,NEX
8、T3SJMP NEXT4NEXT3:MOV P1,A ;向左逐个熄灭SETB CRRC AINC R2SJMP NEXTNEXT4:CJNE R3,#5,NEXT5SJMP NEXT6NEXT5:MOV P1,A ;闪烁CPL AINC R3SJMP NEXTNEXT6:CJNE R4,#8,NEXT7SJMP NEXT8NEXT7:MOV P1,A ;向左逐个点亮CLR CRRC AINC R4SJMP NEXTNEXT8:CJNE R5,#10,NEXT9SJMP NEXT10NEXT9:MOV P1,A ;向右逐个熄灭SETB CRLC AINC R5SJMP NEXTNEXT10:CJ
9、NE R6,#5,NEXT11SJMP NEXT12NEXT11:MOV P1,A ;闪烁CPL AINC R6SJMP NEXTNEXT12:CJNE R7,#8,NEXT13SJMP NEXT14NEXT13:MOV P1,A ;向左循环点亮RL AINC R7SJMP NEXTNEXT14:PUSH ACCMOV A,20HCJNE A,#8,L5POP ACCSJMP L6L5:POP ACCSJMP NEXT15L6:SJMP NEXT16NEXT15:MOV P1,A ;向右循环点亮RR AINC 20HSJMP NEXTNEXT16:PUSH ACC MOV A,30H CJNE
10、 A,#11,L7POP ACCSJMP L8L7:POP ACCSJMP NEXT17L8:SJMP NEXTNEXT17:MOV P1,A ;闪烁CPL AINC 30HNEXT:RETI ;中断子程序返回INT1S:PUSH ACC ;外部中断 1 子程序MOV A,#0FFHCLR CMOV P1,A ;花样变化SUBB A,#81HMOV P1,ASUBB A,#42HLCALL DELAYMOV P1,ASUBB A,#24HLCALL DELAYMOV P1,ASUBB A,#18HLCALL DELAYMOV P1,AADD A,#18HLCALL DELAYMOV P1,AA
11、DD A,#24HLCALL DELAYMOV P1,AADD A,#42HLCALL DELAYMOV P1,AADD A,#81HLCALL DELAYMOV P1,ALCALL DELAYMOV A,#0AAHMOV 21H,#4LOOP:RL AMOV P1,ALCALL DELAYDJNZ 21H,LOOPMOV A,#0FFHMOV P1,ASUBB A,#18HLCALL DELAYMOV P1,ASUBB A,#24HLCALL DELAYMOV P1,ASUBB A,#42HLCALL DELAYMOV P1,ASUBB A,#81HLCALL DELAYMOV P1,AAD
12、D A,#81HLCALL DELAYMOV P1,AADD A,#42HLCALL DELAYMOV P1,AADD A,#24HLCALL DELAYMOV P1,AADD A,#18HLCALL DELAYMOV P1,ALCALL DELAYMOV A,#0AAHMOV 22H,#8LOOP1:RR AMOV P1,ALCALL DELAYDJNZ 22H,LOOP1POP ACCRETI ;中断子程序返回DELAY:MOV 31H,#0MOV 32H,#0 LOOP2:DJNZ 32H,$DJNZ 32H,$DJNZ 32H,$DJNZ 32H,$DJNZ 31H,LOOP2RET
13、;子程序返回END五、调试程序的方法1、硬件调试方法(确定硬件工作是否正常)硬件连线正确,仿真器工作正常,接通电源。2、软件调试方法(如何调试程序的方法)程序编译通过,无错误,无警告,调试并运行主程序。六、对该设计题目有何更完善的方案对自己完成程序进行自我评价及对课题提出更完善的方案。经过一段时间的努力,本实验完成了任务书的基本要求,并做了一些创新。但是程序的运行过程仍然停留在发光二极管的设计上,没有进行对其他领域的扩展,例如:将发光二极管和 LED 显示器连接起来,让广告灯的变化驱动LED 显示器数字的变化,使效果更显著,功能更齐全等。七、收获及心得体会以前对单片机课程很是抵触,觉得它太难学,但通过本次硬件设计,我对单片机产生浓厚的兴趣。通过这次设计对理论知识掌握的更加牢固,以前搞不懂的地方通过这次设计弄明白了,而且学到了许多新东西。开拓了视野,拓展了思路,能灵活应用硬件汇编语言设计一些简单的程序实现一些功能。总之,这次设计我获益匪浅,感谢学院给我们这次锻炼和学习的机会。日期: 2007 年 12 月 30 日