九江职业技术学院课程设计报告
设计名称:篮球计分与控制器的设计与仿真
班 级:
姓 名:
2010~20##学年第一学期
电子课程表系统
摘要:该实验设计基于AVRmega16开发板平台,根据点阵屏和七段数码管的基本原理,做出了方便实用的电子课表!
关键字:单片机 8*8点阵屏 电子课表
前言:
AVR单片机是一款功能十分强大,集成度非常高的数字处理系统。它集成了ADC与DAC的模块,而且还有硬件滤波器!它基本上能够处理生活实时性不太强的模拟信号与数字信号,并实现通信!近年来,广告的普及和生活水平的提高,点阵大屏的需求日益强烈!
LED因其体积小,耗电量低,高亮度及环保等优点而被广泛应用于公共场所的大屏显示上,LED点阵大屏可应用于户外广告,交通导航,大厅公告,比赛的多媒体实时显示等领域。老校公教楼的点阵屏可以用来显示整幅课表。
我们的课程设计是基于AVR单片机,用8*8点阵显示滚动的课程英文名称,至于教室门口,可即时显示该教室内正在上的课程名称,方便师生选择合适的教室学习。所作的点阵屏具有可移植性强,功能简单,可以简单继续添加更多相关功能的模型,也可以扩展成多块点阵屏的组合,以改良显示效果。
一·系统设计目的、用途以功能
经过一段时间的观察,我们发现,同学们上自习是经常遇到一个问题。教室中有很多人,但不能确定里面是不是在上课,能不能到里面去自习。 公教楼进门的地方有电子大屏可以显示课程安排,但看起来过于麻烦,也不能具体到每一个教室。所以我们设想,能不能设计一个电子课表,放在每个教室的门口,显示当前在上的课程,并可以通过一定的按键来及时改变课程,以应对临时变化。后来经电子设计大赛的老师提醒,我们曾经想设计一种有控制终端的课程显示系统。即每个教室门口都有一个电子课表,通过终端的控制完成所有课表的显示。但后来发现,以我们的能力做这样的工作太过复杂,所以我们选择了更容易的方式:单一的放在教室门口的电子课表,只显示当前的课程。于是现在的作品应运而生。
电子课表的基本功能如下 : 主要功能有
1实现LED点阵屏汉字名称的滚动显示。
2实现不通课程汉字名称的自动切换。
3实现按键控制课程名称的临时更改。
4实现节日动画的显示。
5实现6位七段数码管显示时分秒。
6实现按键控制时间的调整。
二硬件设计原理及内容
硬件设计思想:通过按键输入控制信号,由单片机进行处理,并将行列信号分别通过显示驱动输入点阵屏和数码管,控制点阵和数码管的显示.
硬件模块一
——基于Atmega16单片机,利用4片点阵屏的组合来实现16*16的显示,从而使汉字的显示变成可能。
我们分别采用两片74ls595来控制行的显示,用一块74ls154来控列的显示。本来计划要用两74ls138的级连来控制列的变化,后来在测试中发现出现一些问题,于是改为74ls154.且154的使用可以减少资源的占用。
如焊接图所示,将左右点阵屏的行的控制引脚相连接,按照测试好的顺序排成0~15号,通过100欧的电阻后接到三极管上,三极管的作用是增大亮度。在三极管后同样使用100欧的电阻,最后接入两片74ls595.将595的电源和接地连好后,控制端连接到单片机的控制端,100欧的电阻起限流作用。
将上下点阵屏的列的控制引脚相连接,同样按照顺序排为0~15号,接入74LS154芯片,再将154芯片的电源和接地连接,控制端借入单片机的控制端。
设置普通键盘,连到单片机的控制端作为电子课表系统的控制按键。
该模块做为电子课程表的核心系统,能直观的显示所需目的,简便、快捷、容易理解。围绕这一模块完成以后的拓展工作。
模块一硬件图
硬件模块二——七段数码管显示时分秒
1.用74hc164实现8路并口输出的扩展,占用单片机的两个端口。编写hc164_send_byte()函数,程序控制hc164_data(PD6)作为数据线,将一字节由高位到低位,依次输出,输出时先根据该位的数值置PD6为“1”或“0”,然后控制hc164_CLK(PA7)输出“1”,再输出“0”,模拟时钟信号,将PD6数据打入74hc164。循环移位8次后,将1字节的数据由低位到高位串行输入到74hc164中,即可在74hc164的输出端得到并行的8位数据,即七段数码管的段码值。
2.用74ls138实现6路并口输出的扩展,将位选的段码值依次打入74ls138,74ls138任一时刻只有一个输出口输出低电平,对应的一位数码管被选中,扫描6次后可以实现六位数码管的显示。
4.51欧电阻起限流的作用。
6.该模块可以实现时分秒的显示,补充并强化了电子课表的功能,为了节省单片机布局有些不合理的端口,用了两处串入并出的扩展。
模块二硬件图
三、系统设计所需资源及参数
Atmega16单片机、8×8共阳点阵屏4个、74HC595移位寄存器 2个、74ls154 译码器1个、100欧电阻32个、NPN8050三极管16个、排线若干、共阴三位七段数码管两块,74hc164移位寄存器一片,74ls138译码器一片,51欧电阻8个
1、74HC154参数:
描述: 74HC595是告诉的硅结构的CMOS器件, 兼容低电压TTL电路,遵守JEDEC标准。74HC595是有8位移位寄存器和一个存储器,三态输出功能。 移位寄存器和存储器是分别的时钟。 数据在SCHcp的上升沿输入,在STcp的上升沿进入的存储寄存器中去。如果两个时钟连在一起,则移位寄存器总是比存储寄存器早一个脉冲。 移位寄存器有一个串行移位输入(Ds),和一个串行输出(Q7’),和一个异步的低电平复位,存储寄存器有一个并行8位的,具备三态的总线输出,当使能OE时(为低电平),存储寄存器的数据输出到总线。
特点:8位串行输入 /8位串行或并行输出 存储状态寄存器,三种状态; 输出寄存器可以直接清除 100MHz的移位频率。
输出能力: 并行输出,总线驱动;串行输出;标准中等规模集成电路。
2、74HC595参数:
QA--QH: 八位并行输出端。
QH': 级联输出端。SI: 串行数据输入端。
74595的控制端说明:
/SCLR(10脚): 低点平时将移位寄存器的数据清零。
SCK(11脚):上升沿时数据寄存器的数据移位。QA-->QB-->QC-->...-->QH;下降沿移位寄存器数据不变。(脉冲宽度:5V时,大于几十纳秒就行了)
RCK(12脚):上升沿时移位寄存器的数据进入数据存储寄存器,下降沿时存储寄存器数据不变。(5V时,大于几十纳秒就行了),更新显示数据。
/G(13脚): 高电平时禁止输出(高阻态)。如果单片机的引脚不紧张,用一个引脚控制它,可以方便地产生闪烁和熄灭效果。比通过数据端移位控制要省时省力。
3、74ls138参数
对3个输入信号进行译码。得到8个输出状态。
G1,G2A,G2B,为数据允许输出端,G2A,G2B低电平有效。G1高电平有效。A,B,C为译码信号输出端,Y0~Y7为译码输出端,低电平有效。
4、74ls164参数
四、测试过程及数据
1.测试仪器:
CVAVR和AVR Studio软件 ,JTAG下载线,easyavr开发板。
2.测试与分析:
(1)测试点阵:把万用表调到测二极管的档,用红表笔触行输入端,用黑表笔触列输出端。注意观察256个点是否正常亮。
(2)测试按键:直接连接按键到单个可用LED发光二极管(这里采用实验板上发光二极管),按下每个按键看LED是否可亮,若亮,说明按键可用。
(3)程序调试:通过Cvavr和AVR Studio在线仿真调试,知道程序编译并运行成功。
(4)正式操作过程。
1、通电之后,数码管开始显示11:00:30。没有按键,则依次滚动显示原子物理学30s,课间休息20秒,无课30秒,之后停止显示。
2.显示过程中,若按下key1键,显示有活动,再按下,返回。
3、显示课间时,按key2,实现课间休息和心图案的转换。
4|、显示过程中,按key3键,实现显示效果的滚动快慢显示。
5|显示过程中,按key4键,显示正弦波动的的国旗。
六 参考资料:
www.avrvi.com
《AVR单片机嵌入式系统原理与应用实践》马潮
第二篇:单片机C51篮球计时计分器课程设计
篮球赛计时计分器
一设计目的
设计并制作一个用于赛场的篮球赛计时计分器,实现如下基本功能:
(1) 能记录整个赛程的比赛时间,并能修改比赛时间,暂停比赛时间。
(2) 能随时刷新甲,乙两队在整个赛程中的比分。
(3) 中场交换场地时,能交换甲,乙两队比分的位置。
(4) 比赛时间结束时,能发出报警指令。
二设计意义
通过篮球计分计时器的制作,可以使我熟悉,了解单片机开发设计实例的过程,并能使读者加深对单片机的理解和运用以及掌握单片机与外围接口的一些方法和技巧,这主要表现在以下的一些方面:
(1) 篮球计分计时器包含了8051系列单片机的最小应用系统的构成,同时在此基础上扩展了一些实用性强的外围接口。
(2) 掌握键盘接口原理,能正确地把键盘使用到单片机系统中,可以了解到LED显示器的结构,工作原理以及这种显示器的接口实例。
(3)学会调试电路,分析电路故障,积累电路调试经验。
三具体设计内容
1 系统框图构成
基于单片机系统的篮球计分计时器的系统构成框图如下所示:
2硬件电路改进:
由于原来的电路比较复杂,用了很多芯片,浪费成本,而且给后期调试的调试会带来较多麻烦,故对原来的硬件电路进行了改动。改动方面主要关于数码管显示的驱动和位选的,前期的电路设计采用了大量的CD4511和CD4094来进行数码管显示的驱动和位选,而这次的电路设计只用了8个三极管就实现了这项功能。
下面前期电路设计的计时部分的原理图,还有更为复杂的计分原理图未给出
后期改进的整体原理图:
(3)软件调试及组装
软件的编程调试首先要抓住计分和计时两大模块,在这两大模块成功的基础上再进行其他细小模块的组装和完善。主要编程的问题,所以就概述就举例子概述一下
计分模块和计时模块刚开始均会出现显示数值范围不正确或者十位和个位二者之中只显示个位的情况,经软件调试,重新编程后成功的解决了问题。
I 上半场比赛结束, 可按下交换比分按钮,交换甲乙两队的比分,重新调整计时时间为20分钟,按下启动按钮,下半场比赛开始
八 篮球赛计时计分器程序流程图及程序
代码如下:
K1 BIT P1.0
K2BIT P1.1
K3 BIT P1.2
K4 BIT P1.3
K5 BIT P1.4
K6 BIT P1.5
K7 BIT P1.6
K8 BIT P1.7
MIN EQU 30H
SEC EQU 31H
SEC100 EQU 32H
DIS_BUF EQU 33H
BUF_MIN_H EQU DIS_BUF
BUF_MIN_L EQU DIS_BUF+1
BUF_SEC_H EQU DIS_BUF+2
BUF_SEC_L EQU DIS_BUF+3
K_OLD EQU 41H
K_NEW EQU 42H
DIS_DIGIT EQU 43H
DIS_INDEX EQU 44H
K_OLD1 EQU 45H
K_NEW1 EQU 46H
FLAG EQU 47H
CONVERT EQU 48H
ORG 0000H
JMP MAIN
ORG 0003H
LJMP INT_0
ORG 0000BH
LJMP TIMER0
ORG 0001BH
LJMP TIMER1
ORG 0030H
MAIN:
MOV SP,#60H
MOV P0,#0FFH
MOV P2,#0FFH
MOV TMOD,#011H
MOV TH0,#0FCH
MOV TL0,#017H
MOV TH1,#0DCH
CLR A
MOV TL1,A
MOV CONVERT,#00H
MOV CONVERT+1 ,#00H
MOV CONVERT+2,#00H
MOV CONVERT+3 ,#00H
CLR A
MOV MIN,#20
MOV SEC,A
MOV SEC100,A
MOV BUF_MIN_H,#0A4H
MOV BUF_MIN_L,#0C0H
MOV BUF_SEC_H,#0C0H
MOV BUF_SEC_L,#0C0H
MOV DIS_BUF+4,#0C0H
MOV DIS_BUF+5,#0C0H
MOV DIS_BUF+6,#0C0H
MOV DIS_BUF+7,#0C0H
MOV FLAG ,#00H
MOV K_OLD,#00H
BEEP_BL00: MOV R3,#10
MOV R2,#200
MAIN1100:
CPL p3.7
LCALL DELAY500
LCALL DELAY500
DJNZ R2,MAIN1100
CPL p3.6
LCALL DELAY500
LCALL DELAY500
LCALL DELAY500
MOV R2,#200
MAIN2100:
CPL p3.7
LCALL DELAY500
DJNZ R2,MAIN2100
DJNZ R3,MAIN1100
LJMP START
DELAY500:
MOV R7,#230
LOOP1:
DJNZ R7,LOOP1
RET
START: MOV DIS_DIGIT,#0FEH
CLR A
MOV DIS_INDEX,A
SETB EA
SETB ET0
SETB TR0
SETB IT0
SETB EX0
SETB PT0
MAIN_LP:
CALL KEY_PROG
SJMP MAIN_LP
KEY_PROG:
CALL K_SCAN
MOV A,K_NEW
CJNE A,K_OLD,KEY_P1
JMP END_PROC_KEY
KEY_P1:
MOV R4,#15
KEY_P2:
MOV R7,#10
CALL DELAYMS
DJNZ R4,KEY_P2
CALL K_SCAN
MOV A,K_NEW
CJNE A,K_OLD,KEY_P3
JMP END_PROC_KEY
KEY_P3:
JB ACC.0,PROC_K1
JB ACC.1,PROC_K2
JB ACC.2,PROC_K3
JB ACC.3,PROC_K4
LJMP END_PROC_KEY
PROC_K1:LCALL BEEP_BL001
INC MIN
MOV A,MIN ;
CJNE A, #100,UPDATE_MIN21
MOV MIN,#00H
UPDATE_MIN21:
MOV A,MIN
MOV B,#10
DIV AB ; A = MIN / 10
MOV DPTR,#DIS_CODE
MOVC A,@A+DPTR
MOV BUF_MIN_H,A
MOV A,MIN
MOV B,#10
DIV AB
MOV A,B
MOVC A,@A+DPTR
MOV BUF_MIN_L,A
SJMP END_PROC_KEY
PROC_K2:LCALL BEEP_BL001
DEC MIN
MOV A,MIN
CJNE A, #255, UPDATE_MIN1
MOV MIN,#99
UPDATE_MIN1:
MOV A,MIN
MOV B,#10
DIV AB
MOV DPTR,#DIS_CODE
MOVC A,@A+DPTR
MOV BUF_MIN_H,A
MOV A,MIN L
MOV B,#10
DIV AB
MOV A,B
MOVC A,@A+DPTR
MOV BUF_MIN_L,A
SJMP END_PROC_KEY
PROC_K3: LCALL BEEP_BL001
PUSH PSW
INC FLAG
MOV A ,FLAG
RRC A
JNC STOP
CLR P3.6
SETB ET1
SETB TR1
POP PSW
SJMP END_PROC_KEY
STOP:SETB P3.6
CLR ET1
CLR TR1
POP PSW
SJMP END_PROC_KEY
PROC_K4: LCALL BEEP_BL001
MOV R3,CONVERT+1
MOV CONVERT+1,CONVERT+3
MOV CONVERT+3,R3
MOV R3,CONVERT
MOV CONVERT,CONVERT+2
MOV CONVERT+2,R3
LCALL CONVETER
END_PROC_KEY:
RET
; 键扫描子程序
K_SCAN:
MOV P1,#0FFH
MOV K_NEW,#00H
MOV A,P1
CPL A
ANL A,#0F0H
SWAP A
MOV K_NEW,A
RET
USING 0
TIMER0:
; 定时器0中断服程序, 用于数码管的动态扫描
PUSH ACC
PUSH PSW
PUSH AR0
MOV TH0,#0FCH
MOV TL0,#017H
MOV P2,#0FFH
MOV A,#DIS_BUF
ADD A,DIS_INDEX
MOV R0,A
MOV A,@R0
MOV P0,A
MOV P2,DIS_DIGIT
MOV A,DIS_DIGIT
RL A
MOV DIS_DIGIT,A
INC DIS_INDEX
MOV R5 , DIS_INDEX
CJNE R5,#08H,TT
MOV DIS_INDEX ,#00H
MOV DIS_DIGIT,#0FEH
TT: POP AR0
POP PSW
POP ACC
RETI
TIMER1:
; 定时器1中断服务程序, 产生时基信号10ms
PUSH PSW
PUSH ACC
PUSH B
PUSH DPH
PUSH DPL
MOV TH1,#0DCH
MOV TL1,#00H
INC SEC100
MOV A,SEC100
CJNE A, #100, END_TIMER1
MOV SEC100,#00H
LCALL DEC_SEC
END_TIMER1:
POP DPL
POP DPH
POP B
POP ACC
POP PSW
RETI ;
DEC_SEC:
DEC SEC
MOV A ,MIN
JNZ OBTAIN
CPL P3.6
MOV A ,SEC
JNZ OBTAIN
MOV BUF_SEC_L,#0C0H
CLR TR1
CLR ET1
BEEP_BL: MOV R3,#10
MOV R2,#200
MAIN11:
CPL p3.7
LCALL DELAY500
LCALL DELAY500
DJNZ R2,MAIN11
CPL p3.6
LCALL DELAY500
LCALL DELAY500
LCALL DELAY500
MOV R2,#200
MAIN21:
CPL p3.7
LCALL DELAY500
DJNZ R2,MAIN21
DJNZ R3,MAIN11
LJMP OBTAIN
OBTAIN:
MOV A,SEC
CJNE A, #255,UPDATE_SEC
MOV SEC,#59
LCALL DEC_MIN
UPDATE_SEC:
MOV A,SEC
MOV B,#10
DIV AB
MOV DPTR,#DIS_CODE
MOVC A,@A+DPTR
MOV BUF_SEC_H,A
MOV A,SEC
MOV B,#10
DIV AB
MOV A,B
MOVC A,@A+DPTR
MOV BUF_SEC_L,A
RET
DEC_MIN:
DEC MIN
MOV A,MIN
CJNE A, #255, UPDATE_MIN
MOV MIN,#00H
UPDATE_MIN:
MOV A,MIN
MOV B,#10
DIV AB ; A = MIN / 10
MOV DPTR,#DIS_CODE
MOVC A,@A+DPTR
MOV BUF_MIN_H,A
MOV A,MIN
MOV B,#10
DIV AB
MOV A,B
MOVC A,@A+DPTR
MOV BUF_MIN_L,A
RET
RET
; 中断INT0服务程序
INT_0:
PUSH PSW
PUSH ACC
PUSH B
PUSH DPH
PUSH DPL
JB k1,RKEY1
MOV R7,#30
LCALL DELAYMS
JB k1,RKEY1
LJMP KP1
RKEY1 :JB k2,RKEY2
MOV R7,#30
LCALL DELAYMS
JB k2,RKEY2
LJMP KP2
RKEY2 :JB k3,RKEY3
MOV R7,#30
LCALL DELAYMS
JB k3,RKEY3
LJMP KP3
RKEY3 : JB k4,RKEY4
MOV R7,#30
LCALL DELAYMS
JB k4,RKEY4
LJMP KP4
RKEY4: LJMP KP5
KP1: LCALL BEEP_BL001
INC CONVERT
MOV A,CONVERT
CJNE A,#0AH,KP5
MOV CONVERT ,#00H
INC CONVERT+1
MOV A,CONVERT+1
CJNE A,#0AH,KP5
MOV CONVERT+1,#00H
LJMP KP5
KP2: LCALL BEEP_BL001
DEC CONVERT
MOV A,CONVERT
CJNE A,#255,KP5
MOV CONVERT,#09H
DEC CONVERT+1
MOV A,CONVERT+1
CJNE A,#255,KP5
MOV CONVERT+1,#09H
LJMP KP5
KP3: LCALL BEEP_BL001
INC CONVERT+2
MOV A,CONVERT+2
CJNE A,#0AH,KP5
MOV CONVERT+2 ,#00H
INC CONVERT+3
MOV A,CONVERT+3
CJNE A,#0AH,KP5
MOV CONVERT+3,#00H
LJMP KP5
KP4: LCALL BEEP_BL001
DEC CONVERT+2
MOV A,CONVERT+2
CJNE A,#255,KP5
MOV CONVERT+2 ,#09H
DEC CONVERT+3
MOV A,CONVERT+3
CJNE A,#255,KP5
MOV CONVERT+3,#09H
LJMP KP5
KP5:LCALL CONVETER
POP DPL
POP DPH
POP B
POP ACC
POP PSW
RETI
DELAYMS:
; 延时子程序
DLY_LP1:
MOV R6,#185
DLY_LP2:
NOP
NOP
NOP
DJNZ R6,DLY_LP2
DJNZ R7,DLY_LP1
END_DLYMS:
RET
;蜂鸣器响一声子程序
BEEP_BL001: MOV R3,#1
PUTOFF: ;
MOV R2,#30
MAIN11001:
CPL p3.7
LCALL DELAY500
LCALL DELAY500
DJNZ R2,MAIN11001
DJNZ R3,PUTOFF
RET
;显示缓冲区代码转码子程序
CONVETER:
MOV A,CONVERT
MOV DPTR,#DIS_CODE
MOVC A,@A+DPTR
MOV DIS_BUF+7,A
MOV A,CONVERT+1
MOV DPTR,#DIS_CODE
MOVC A,@A+DPTR
MOV DIS_BUF+6,A
MOV A,CONVERT+2
MOV DPTR,#DIS_CODE
MOVC A,@A+DPTR
MOV DIS_BUF+5,A
MOV A,CONVERT+3
MOV DPTR,#DIS_CODE
MOVC A,@A+DPTR
MOV DIS_BUF+4,A
RET
查表指令
DIS_CODE:
DB 0C0H
DB 0F9H
DB 0A4H
DB 0B0H
DB 099H
DB 092H
DB 082H
DB 0F8H
DB 080H
DB 090H
DB 0FFH
END
总 结
这次课程设计虽然只有短短的两周时间,但我受益匪浅。刚开始时觉得自己的课题无处入手,但通过老师的讲解和查询资料,开始有了自己的思路,整理出了总体方案,然后设计出硬件原理图,源程序等。在这次设计中困难最大的就是调试,收获最多的也是调试,因为调试的时候你必须对程序相当的熟悉,对每一条指令相当了解,并且硬件的连接也要清晰的印在脑海里,只有这样你才能让软件和硬件结合在一起,实现预期功能。在编程结束时需要编写END指令,这也是初学者编程时经常忘记的。
总之,在课程设计中遇到了不少的困难,在老师的细心讲解和辅导下,最终完成了本次设计。在此,由衷感谢老师的指导和帮助。
参考文献
[1] 、《单片微型计算机原理及应用》张毅坤 陈善久 编 西安电子科技大学出版社
[2]、《微型计算机接口技术及应用》刘乐善编 华中理工大学出版社 [3]、《计算机硬件技术基础试验教程》邹逢兴编 高等教育出版社
[4]、《16位微型计算机原理接口及其应用》周佩玲编中国科学技术大学出版社
[5]、《微型计算机原理与接口技术》吴秀清编 中国科学技术出版社
[6]、《微型计算机接口技术》邓亚平编 清华大学出版社
[7]、《单片机应用程序设计技术》 周航慈 著 北京航空航天大学出版社
[8]、《单片机实用技术问答》 谢宜仁 主编 人民邮电出版社