《可编程彩灯系统课程设计报告.doc》由会员分享,可在线阅读,更多相关《可编程彩灯系统课程设计报告.doc(29页珍藏版)》请在三一办公上搜索。
1、 计算机科学与技术学院硬件课程设计报告姓 名: 学 号: 专 业: 信息安全 班 级: 信息安全06-1 设计题目: 可编程节日彩灯系统 成 员: 指导教师: 职 称: 副教授 2007年 7月 徐州 课程设计指导教师评阅书指导教师评语:成 绩: 指导教师签字: 年 月 日摘 要众所周知,节日彩灯以其绚丽的色彩赢得人们的喜爱,在人们的日常的生活中很常见,并在一些特定的节日里,重要场合中起着渲染节日气氛,带给人们欢乐的作用。可编程节日彩灯打破常规彩灯闪烁固定变化的现状,可根据人们不同的意愿进行编程设计出想要的变换的色彩效果。8255A是一种可编程的输入输出芯片,利用它对电平的高低进行控制输出,从
2、而控制彩灯使其发出绚丽夺目的色彩。数码管在彩灯系统中也有广泛的应用,日常生活中常见的霓虹灯便是数码管的一种,并且正逐渐壮大并朝着取代普通彩灯的趋势发展。研究数码管的输出对彩灯系统是一个非常好的补充。因而在本队设计试验中,针对数码管也进行了研究试验,进而作为对彩灯实验的一个扩充。这是本小组的一个创意,也是本团队的一大亮点。这次,我们组将可编程节日彩灯系统的设计分成了两大板块:板块一,针对LED做文章。利用3个开关使得12个3种红黄绿不同颜色的彩灯呈现出8种变化状态,带给大家绚丽的色彩;板块二,特别对数码管进行操作。2008年是奥运年是值得期待的一年,但正在举国上下喜迎奥运之时,中国发生了百年难遇
3、的大灾难及反祖国统一的闹剧:2.15大雪灾,3.14藏独分子闹事,5.12汶川大地震。通过运用数码管显示出这些时间以及8.8号奥运会的日子,以再次向大家宣告,任何困难面前,中国人的要腰然是挺立的,同时激励大家努力学习,成才后报效祖国。关键词:可编程 彩灯 数码管 键盘 74LS377 8255A目 录1 设计任务与要求 5 1.1设计内容5 1.2设备与器材51.3设计要求及功能实现5 1.3.1.彩灯系统51.3.2、七段数码管系统61.3.3彩灯系统简明流程图62 总体方案6 2.1彩灯系统6 2.2数码管系统73硬件方案73.1原理图73.2原理电路图84软件方案11 4.1流程图114
4、.1.1彩灯流程图114.1.2数码管流程图124.1.3键盘流程图13 42源程序144.2.1彩等灯系统源程序144.2.2数码管系统程序205 操作说明51彩灯系统操作说明2952数码管系统操作说明296 成员任务分工297 结论7.1 实验自我评价 297.2实验心得30参考文献301 设计任务与要求题目:可编程节日彩灯系统一 .功能分析与实施:1.1 设计内容:根据实验要求设计以下两个系统: 1.1.1.可控的彩色发光二极管循环闪烁的彩灯系统 1.1.2.可控的并行显示数字,图案的LED七段数码管系统。1.2设备与器材: PC机一台,FD-88实验箱一台,导线若干。1.3设计要求及功
5、能实现: 1.3.1.彩灯系统:利用三个开关(1代表“开”,0代表“关”)实现8种功能。依次实现全部红灯闪烁,全部黄灯闪烁,全部绿灯闪烁,顺时针循环闪烁,逆时针循环闪烁,相邻的三个同颜色的灯一起闪烁并循环,最后有一个小的循环程序。每改变一个开关的闭合情况就改变一次输入状态,展示相应的功能。开关3开关2开关1功能000全部熄灭 001红灯闪烁010黄灯闪烁011绿灯闪烁100顺时针循环闪烁101逆时针循环闪烁110全部闪烁111集上述功能为一体,循环闪烁 图表 1彩灯系统简洁原理图 1.3.2、七段数码管系统:与彩灯系统不同,利用键盘控制数码管的显示,按动键盘不放可持续某种状态,松开键盘进入等待
6、状态。首先显示2008,然后依次显示我国今年经受的灾难日期,在数码管显示期间,并有旁白补充说明我国的受灾情况,借此抒发爱国情感。最后显示8.08以示对08奥运的期待和祝福,最后以精美的图案结束。 1.3.3彩灯系统简明流程图 图表 2 彩灯系统简明流程图 2 总体方案根据彩灯实验的要求,本实验重点突出彩灯的绚丽及良好的可操作性。根据试验箱所提供的器材,采用三色12灯的发光二级管和七段四位数码管作为实验的彩灯输出。限于器材的局限性,各采用不同的硬件和软件实现实验要求,这样既不太单一,又能锻炼能力。2.1彩灯系统:以8255A为核心,输入端与开关相连,输出端与发光二极管相连,利用开关控制不同的输入
7、状态,以实现不同的输出,循环,闪烁等8种状态。2.2数码管系统:由于数码管的特殊性仅靠8255不能完成实验,又由于开关控制输入不是非常的方便,因而这一系统采用键盘作为输入,控制彩灯的各种功能的变换。还是以8255为核心, 74LS377锁存器实现输出的不变、连续性。利用数码管的静态和动态输出以实现彩灯更加绚丽的输出。3 硬件方案 3、1原理图:根据实验要求原理图如下图表 4数码管原理图 3.2原理电路图:图表5是彩灯与8255A 的B端口和C端口的连接图,彩灯上面的数值1-12和端口上的数值相对应图表 5 彩灯系统 实物部分连接图关于图表5说明如下:8255A的A端口作为输入端与开关相连,三个
8、开关决定九中状态,可控制九种不同的输出。B端口作输出端与8个发光二极管相连,C端口的低8位的四个端口与剩余的4个发光二极管相连,由于实验箱中的12彩灯并不是按规律排列的,因而要按电路图中那样连接,否则会出错。图表 6彩灯系统硬件连接图图表 7数码管硬件连接图8086G1 YOG2A Y1G2B 74LS138 CBAWR PAORD PA1A1 PA2A0 PA3D0D7 PB0 PB1 PB2 PB3CS PC0 PC1 PC2 PC3CLK D0D7 74LS377A2 A1 D0D7A2 A3 A4 A5 A6 M/IO A6 IOW IOR 1Q2Q1Q3Q6Q5Q4Q7Q8QVCC
9、+5 键盘 4 软件方案4.1流程图:4.1.1彩灯流程图:开始8255A初始化设置A口输入,B口和C口低四位输出读取A端口的状态101?110?111?100?011?010?001?执行熄灭全部灯的程序调用执行总的循环子程序调用执行时钟循环子程序调用执行红灯闪烁子程序调用执行绿灯闪烁子程序调用执行黄灯闪烁子程序调用执行全部闪烁子程序调用执行顺时针子程序否否否否否否否是是是是是是是 图表 8彩灯流程图 4.1.2数码管流程图:图表 9 彩灯具体程序流程图4.1.3键盘流程图:开始8255的初始化向各行线输出0检查有无列线为0读列值恢复扫描码检查有无列线为0无结束有修改并保存扫描码,准备扫描下
10、一行无有找到列线图表 10 键盘流程图42源程序4.2.1彩等灯系统源程序:CODE SEGMENT ASSUME CS:CODEA8255A EQU 0300H ;A端口的地址B8255A EQU 0301H ;B端口的地址C8255A EQU 0302H ;C端口的地址K8255A EQU 0303H ;控制端口的地址ORGSTART: MOV AL,90H ;10010000 A端口方式0输入,B端口方式0作输出,C口输出 MOV DX,K8255A ;8255的控制端口地址 OUT DX,ALSM: MOV DX,A8255A IN AL,DX ;读取A口的状态 CMP AL,07H
11、;判断状态值是否为00000111B JZ K7 ;如果是,这跳转到K7,否则往下执行 CMP AL,06H ;判断状态值是否为00000110B JZ K6 ;如果是,这跳转到K6,否则往下执行 CMP AL,05H ;判断状态值是否为00000101B JZ K5 ;如果是,这跳转到K5,否则往下执行 CMP AL,04H ;判断状态值是否为00000100B JZ K4 ;如果是,这跳转到K4,否则往下执行 CMP AL,03H ;判断状态值是否为00000011B JZ K3 ;如果是,这跳转到K3,否则往下执行 CMP AL,02H ;判断状态值是否为00000010B JZ K2
12、;如果是,这跳转到K2,否则往下执行 CMP AL,01H ;判断状态值是否为00000001B JZ K1 ;如果是,这跳转到K6,否则往下执行 MOV AL,0FFH ;状态值为00000000B,执行下列 MOV DX,B8255A ;端口B 的地址 OUT DX,AL ;输出全1,所有的灯熄灭 MOV DX,C8255A OUT DX,AL ;C口的灯全部熄灭 JMP SM ;跳转到SMK7: CALL WIN ;调用WIN子程序K6: CALL LR ;调用LR子程序K5: CALL LL ;调用LL子程序K4: CALL GG ;调用GG子程序K3: CALL YY ;调用YY子程
13、序K2: CALL RR ;调用RR子程序K1: CALL QQ ;调用QQ子程序;* 总的循环子程序WIN*WIN PROC NEAR MOV AL,0FFH MOV DX,C8255A OUT DX,AL ;C口的灯全部熄灭 MOV AL,0FEH MOV DX,B8255A ;让B口第一个灯先亮W1: OUT DX,AL ROL AL,1 ;向左移位 CALL DELAY ;延时 CMP AL,0FEH ;判断B口的状态是否返回初始值 JZ W2 ;是,跳转到W2,否则继续往下执行 JMP W1 ;跳转W1继续执行W2: MOV AL,0FFH MOV DX,B8255A OUT DX,
14、AL ;让B口的灯全部熄灭 MOV AL,00H MOV DX,C8255A OUT DX,AL ;让C口的灯全部点亮 CALL DELAY ;延时 MOV AL,0FFH MOV DX,C8255A OUT DX,AL ;让C口的灯全部熄灭 CALL DELAY ;延时 MOV AL,00H OUT DX,AL ;让C口的灯全部点亮 CALL DELAY ;延时 MOV AL,7FH ;让B口的第七个灯点亮 MOV DX,C8255AW3: OUT DX,AL ROR AL,1 ;向右移位 CALL DELAY ;延时 CMP AL,7FH ;判断是否恢复初始状态 JZ W4 ;是,跳转到W
15、4 JMP W3 ;否则跳转到W3W4: MOV AL,0FFH MOV DX,C8255A OUT DX,AL ;让C口灯全部熄灭 MOV AL,00H MOV DX,B8255A OUT DX,AL ;让B口的灯全部点亮 CALL DELAY ;延时 MOV AL,0FFH MOV DX,B8255A OUT DX,AL ;让B口的灯全部熄灭 MOV DX,C8255A OUT DX,AL CALL DELAY ;延时 MOV AL,00H MOV DX,B8255A OUT DX,AL ;让B口的灯全部点亮 CALL DELAY ;延时 MOV AL,0F0H MOV DX,B8255A
16、W5: OUT DX,AL ;让B口的前四个灯亮,后四个灯熄灭 ROL AL,1 ;向左移位 CALL DELAY ;延时 CMP AL,0FH ;是否前四个灯熄灭后四个灯点亮? JZ W6 ;是,跳转到W6,否跳转到W5 JMP W5W6: MOV AL,0FFH MOV DX,B8255A OUT DX,AL ;让B口的灯全部熄灭 MOV AL,0EH ;让C口的第四个等先亮 MOV DX,C8255AW7: OUT DX,AL ROL AL,1 ;向左移位 CALL DELAY ;延时 CMP AL,0EH ;判断是否回到初始状态 JZ W8 ;是,跳转到W8 JMP W7 ;否,跳转到
17、W7W8: MOV AL,0FFH MOV DX,C8255A OUT DX,AL ;让C口的灯全部熄灭 MOV AL,0FH MOV DX,B8255A ;B口的前四个灯熄灭,后四个灯点亮W9: OUT DX,AL ROR AL,1 ;向右移位 CALL DELAY ;延时 CMP AL,0F0H ;前四个灯点亮,后四个灯熄灭? JZ W10 ;是跳转到W10 JMP W9W10: MOV AL,0FFH MOV DX,B8255A OUT DX,AL ;B口的灯熄灭 MOV AL,07H MOV DX,C8255A ;C口的第四个灯点亮W11: OUT DX,AL ROR AL,1 ;向右
18、移位 CALL DELAY ;延时 CMP AL,07H ;是否回到初始状态 JNZ W11 ;是,跳转到W11 JMP SM WIN ENDP*逆时针循环子程序LR *LR PROC NEAR MOV AL,0FFH MOV DX,B8255A OUT DX,AL ;B口灯全部熄灭 MOV AL,0F7H ;C口的第四个灯点亮 MOV DX,C8255ALR1: OUT DX,AL ROR AL,1 ;向右移位 CALL DELAY CMP AL,7FH ;循环完毕?C口 JZ LR2 JMP LR1LR2: MOV DX,C8255A MOV AL,0FFH OUT DX,AL ;C口灯全
19、部熄灭 MOV AL,7FH MOV DX,B8255APT1: OUT DX,AL ROR AL,1 ;B口,向右移位 CALL DELAY CMP AL,7FH ;循环完毕? JZ PT2 ;是,跳转到PT2 JMP PT1PT2: MOV AL,0FFH MOV DX,B8255A OUT DX,AL ;B口灯全部熄灭 JMP SMLR ENDP*顺时针循环子程序LL*LL PROC NEAR MOV AL,0FFH MOV DX,C8255A OUT DX,AL ;C口灯全部熄灭 MOV AL,0FEH MOV DX,B8255A ;B口的第一个灯亮LL1: OUT DX,AL ROL
20、 AL,1 ;左移一位 CALL DELAY CMP AL,0FEH ;循环完毕? JZ LL2 JMP LL1LL2: MOV DX,B8255A MOV AL,0FFH OUT DX,AL ;B口灯全部熄灭 MOV AL,0FEH ;C口的第一个灯亮 MOV DX,C8255APP1: OUT DX,AL ROL AL,1 ;左移一位 CALL DELAY CMP AL,0EFH ;C口循环完毕? JZ PP2 ;是,跳转 LOOP PP1PP2: MOV AL,0FFH MOV DX,C8255A OUT DX,AL ;C口灯全部熄灭 JMP SMLL ENDP*红灯闪烁子程序RR*RR
21、 PROC NEAR MOV AL,0F6H MOV DX,B8255A ;B口红灯亮 OUT DX,AL MOV AL,06H MOV DX,C8255A OUT DX,AL ;C口红灯亮 CALL DELAY ;延时 MOV AL,0FFH MOV DX,B8255A OUT DX,AL MOV DX,C8255A ;红灯熄灭 OUT DX,AL CALL DELAY ;延时 JMP SMRR ENDP*黄灯闪烁子程序YY*YY PROC NEAR MOV AL,6DH MOV DX,B8255A OUT DX,AL MOV AL,0BH MOV DX,C8255A OUT DX,AL ;
22、黄灯亮 CALL DELAY ;延时 MOV AL,0FFH MOV DX,B8255A OUT DX,AL MOV DX,C8255A OUT DX,AL ;黄灯灭 CALL DELAY ;延时 JMP SMYY ENDP*绿灯闪烁子程序GG*GG PROC NEAR MOV AL,9BH MOV DX,B8255A OUT DX,AL MOV AL,0DH MOV DX,C8255A OUT DX,AL ;绿灯亮 CALL DELAY ;延时 MOV AL,0FFH MOV DX,B8255A OUT DX,AL MOV DX,C8255A OUT DX,AL ;绿灯灭 CALL DELA
23、Y ;延时 JMP SMGG ENDP*全部灯闪烁子程序QQ*QQ PROC NEAR MOV AL,00H MOV DX,B8255A OUT DX,AL MOV DX,C8255A OUT DX,AL ;全部灯亮 CALL DELAY ;延时 MOV AL,0FFH MOV DX,B8255A OUT DX,AL MOV DX,C8255A OUT DX,AL ;全部灯灭 CALL DELAY ;延时 JMP SMQQ ENDP*延时子程序*DELAY PROC NEAR MOV CX,0FFFFHDELAY1:LOOP DELAY1 RETDELAY ENDPCODE ENDS END
24、START4.2.2数码管系统程序:K8255A EQU 0303H ; 8255的控制端口地址A8255A EQU 0300H ; 8255的A端口的地址B8255A EQU 0301H ; 8255的B端口的地址C8255A EQU 0302H ; 8255的C端口的地址K377 EQU 0308H ; 74LS377锁存器的地址;数据段,键盘扫描码表DATA SEGMENT 0 1 2 3 4 5 6 7 TABLE DB 77H,7BH,7DH,7EH,0B7H,0BBH,0BDH,0BEH 8 9 A B C D E F DB 0D7H,0DBH,0DDH,0DEH,0E7H,0EB
25、H,0EDH,0EEHDATA ENDS;堆栈段STACK SEGMENT STACK DW 50 DUP(0)TOP_STAC LABEL WORDSTACK ENDS;代码段CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACKSTART: MOV AX,STACK MOV SS,AX LEA SP,TOP_STACK MOV AX,DATA MOV DS,AX MOV DX,K8255A;初始化8255A,方式0,A,C口作输出,B口为输入 MOV AL,82H OUT DX,AL MOV DX,A8255A ;向A口各位输出0 MOV AL,00H O
26、UT DX,AL;读列,查看是否所有键均松开 MOV DX,B8255AWAIT-OPEN: IN AL,DX ;键盘状态读入B口 AND AL,0FH ;只查低四位 CMP AL,0FH ;是否都为1 JNE WAIT_OPEN ;否,继续查;各键均已松开,再查列是否有0,即是否有键按下WAIT_PRES: IN AL,DX ;读B口 AND AL,0FH ;只查低四位 CMP AL,0FH ;是否有键按下 JE WAIT_PRES ;无,等待 MOV CX,16EAH DELAY: LOOP DELAY ;有键压下,延时20ms,消抖动 IN AL,DX ;查看列,看键是否仍被压着 AND AL,0FH CMP AL,0FH JE WAIT_PRES ;以松开;转出等待压键 MOV AL,OFEH ;先使D0=0 MOV C