黑龙江东方学院
《单片机原理及应用》结课设计报告
篮球计分器
学 部 计算机科学与电气工程
专 业 计算机科学与技术(软件工程方向) 姓 名 wjg 年 级 10级 学 号 10101135 任课教师 设计周期 3周
1
黑龙江东方学院《单片机原理及应用》结课设计任务书
姓名 hj 学号 10101135 专业班级 10计科1班 设计题目: 篮球计分器 设计内容与指标要求: 1、设计内容 实现基本的计数功能以及液晶屏幕的显示 2、指标要求 准确的、毫无误差的实现计数功能 进度安排: 第一周: 选题,明确设计目标,查找、参考资料,安装Keil集成开发环境和Proteus仿真环境,进行总体设计。 第二周: 详细设计(硬件+软件) ,编辑程序(模块化程序设计)、调试、运行。 第三周:完善功能,完成设计报告
《单片机原理及应用》结课设计报告
目 录
第1章 系统概述 ................................................ - 1 - 1.1 设计目的和意义 .............................................. - 1 - 1.1.1 目的 ....................................................... - 1 - 1.1.2 意义 ...................................................... - 1 - 1.2 设计的主要内容 ............................................... - 1 - 第2章 研究方案 ................................................. - 2 - 2.1 方案实施所需的条件 .......................................... - 2 -
2.1.1 软件条件 ..................................................................................................................... - 2 - 2.1.2 硬件条件 ..................................................................................................................... - 2 -
2.2 设计难点与解决方案 .......................................... - 2 -
2.2.1 设计难点 ..................................................................................................................... - 2 - 2.2.2 解决方案 ..................................................................................................................... - 2 -
第3章 软件设计 ..................................................... 4 3.1 功能模块划分 .................................................... 4 3.2 各模块程序流程及代码 ............................................. 4 第4章 目标系统 .................................................... 13 4.1 仿真系统运行演示 ............................................... 13 4.2系统展望 ........................................................ 14 4.3设计总结 ........................................................ 14 参考文献 ............................................................ 15
《单片机原理及应用》结课设计报告
第1章 系统概述
1.1 设计目的和意义 1.1.1 目的
1) 能随时刷新甲,乙两队在整个赛程中的比分。 2) 能实现甲,乙两队比分加减。 3) 比赛开始时,能发出报警指令。
1.1.2 意义
1) 篮球计分器包含了8051系列单片机的最小应用系统的构成,同时在此
基础上扩展了一些实用性强的外围接口。
2) 掌握键盘接口原理,能正确地把键盘使用到单片机系统中,可以了解到
LCD显示器的结构,工作原理以及这种显示器的接口实例。
3) 掌握液晶屏控制原理,能正确地把液晶屏使用到单片机系统中,可以再
单片机系统中应用自如!
4) 学会调试电路,分析电路故障,积累电路调试经验。
1.2 设计的主要内容
1) 在比赛之前,接通电源,系统自动复位,此时计分电路中的共阴极数码
管全部显示为000 000;
2) 按计时电路中的K1~K4按键来设置比赛比分,例如比赛分数为12 14,
则通过按K1、K2、K3键,使计时数码管显示为“12 14”即可。 3) 设置好时,等待赛程开始,当裁判吹响开始哨声时,立即按K7键,启
动计数。
4) 在整个赛程中,我们还要对两队比分及时刷新;K1 键完成甲队加分、
减分,K2键完成乙队加、减分。K3完成队伍转换,K4完成减分转换。 5) 如果在赛程过程中,一方教练申请暂停时,经裁判批准,我们立即按
K7键,即可以暂停计时,暂停时间到时,再按K7键继续计分,直至比赛结束,扬声器会发出5秒的响声。每一节的操作都是一样。
6) 液晶屏幕上显示要开场的动画,显示比赛开始的规则提示,等等。
- 1 -
《单片机原理及应用》结课设计报告
第2章 研究方案
2.1 方案实施所需的条件
2.1.1 软件条件
Keil 集成开发环境 Proteus Isis电子软件 2.1.2 硬件条件
AT89C52单片机 计算机 12864液晶屏 七段数码管 蜂鸣器
2.2 设计难点与解决方案
2.2.1 设计难点
液晶屏的显示 中断在数码管上的显示
2.2.2 解决方案
有共阴极和共阳极两种,在本实验中采用共阴极数码管。 字形码表的产生
以共阴极为例,LED八段数码管的每一段接低电平时亮,不同的组合可以显示不同的数字,有一定的对应关系。 具体的对应关系如下
图2-1 引脚
- 2 -
《单片机原理及应用》结课设计报告
静态显示
在静态显示方式下,每一位显示器的字段控制线是独立的。当显示某一字时,该位的各字段线和字位线的电平不变,也就是各字段的亮灭状态不变。静态显示方式下LED显示器的电路连接方法是:每位LED的字位控制线门共阴极点或共阳极点连在一起,接地或接 + 5V; 动态显示
利用人眼的视觉暂留效应,通过位选分时显示不同的数码管,这样可以看到正常的显示。本实验采用动态设计,p0口与数码管相连,p0.0—p0.7分别对应数码管的dgfedcba位,p2.0—p2.2为数码管的位控制位,当为高点平时对应的数码管亮。P3.2、p3.3分别控制开始和停止。
图2-2 液晶模块引脚
2864 液晶具有如下的特性:
提供8 位,4 位并行接口及串行接口可选 并行接口适配M6800 时序 自动电源启动复位功能 内部自建振荡源
64×16 位字符显示RAM(DDRAM 最多16 字符×4 行,LCD 显示范围16×2 行)(改为半角输入)
2M 位中文字型ROM(CGROM),总共提供8192 个中文字型(16×16 点阵) 16K 位半宽字型ROM(HCGROM),总共提供126 个西文字型(16×8 点阵) 64×16 位字符产生RAM(CGRAM)
15×16 位总共240 点的ICON RAM(ICONRAM)
- 3 -
《单片机原理及应用》结课设计报告 第3章 软件设计
3.1 功能模块划分
甲队加减 分按键 转换球 队键 8 9 c 5 2 数码管 分数显示 12864 液晶屏 动画显示 蜂鸣器 乙队加减 分按键 加减分 切换键
图3-1 系统功能模块图
3.2 各模块程序流程及代码
#include #define uchar unsigned char #define uint unsigned int #define LCD_databus P0 #define DM P1 uchar num; //sbit speaker = P1^7; sbit speaker=P2^5; sbit key=P2^7; sbit key1=P2^6; sbit RS = P2^2; sbit RW = P2^1; 4 《单片机原理及应用》结课设计报告 sbit EN = P2^0; sbit CS1 = P2^4; sbit CS2 = P2^3; sbit Bai=P3^0; sbit Shi=P3^1; sbit Ge=P3^4; sbit Bai1=P3^5; sbit Shi1=P3^6; sbit Ge1=P3^7; unsigned char i=0,f=0,g=0,n=0,m=0,shiwei=0,b1,b2,b3,b4,b5,b6; unsigned tab[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; void delay1s(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void Delay10ms() //@11.0592MHz { unsigned char i, j; i = 22; j = 145; do { while (--j); } while (--i); } void delay(uint i) { while(--i); } void Delay200ms() //@12MHz { unsigned char i, j, k; _nop_(); i = 2; j = 134; k = 20; do { 5 char 《单片机原理及应用》结课设计报告 do { while (--k); } while (--j); } while (--i); } void Read_busy() { P0 = 0X00; RS = 0; RW = 1; EN = 1; while(P0 & 0x80); EN = 0; } void write_LCD_command(uchar value) { Read_busy(); RS = 0; RW = 0; LCD_databus = value; EN = 1; _nop_(); _nop_(); EN = 0; } void write_LCD_data(uchar value) { Read_busy(); RS = 1; RW = 0; LCD_databus = value; EN = 1; _nop_(); _nop_(); EN = 0; } void Set_page(uchar page) { page = 0xb8|page;//页的首地址 write_LCD_command(page); } void Set_line(uchar startline) { 6 《单片机原理及应用》结课设计报告 startline = 0xc0|startline;//起始行地址 write_LCD_command(startline); } void Set_column(uchar column) { column = column & 0x3f;//列最大值64 column = 0x40|column; //列的首地址 write_LCD_command(column); } void SetOnOff(uchar onoff) { onoff = 0x3e|onoff; write_LCD_command(onoff); } void SelectScreen(char screen) { switch(screen) { case 0:CS1 = 0;CS2 = 0;break; case 1:CS1 = 0;CS2 = 1;break; case 2:CS1 = 1;CS2 = 0;break; default:break; } } void ClearScreen(uchar screen) { uchar i,j; SelectScreen(screen); for(i = 0;i<8;i++) { Set_page(i); Set_column(0); for(j = 0;j<64;j++) { write_LCD_data(0x00); }}} void timer0_init() { TMOD=0x05; TF0=0; TR0=1; EX0=1;EX1=1; EA=1; } void timer0() interrupt 0 7 《单片机原理及应用》结课设计报告 { Delay200ms(); if(n==0) { f++;} if(n==1) { f--;} } void timer1() interrupt 2 { Delay200ms(); if(n==0) {g++;} if(n==1){g--;} } void InitLCD() { Read_busy(); SelectScreen(0); SetOnOff(0); SelectScreen(0); SetOnOff(1); SelectScreen(0); ClearScreen(0); Set_line(0);} void Display(uchar ss,uchar page,uchar column,uchar *p) { uchar i; SelectScreen(ss); Set_page(page); Set_column(column); for(i = 0;i<16;i++) { write_LCD_data(p[i]);} Set_page(page+1); Set_column(column); for(i = 0;i<16;i++) { write_LCD_data(p[i+16]);}} void Display1(uchar ss,uchar page,uchar column,uchar *p) { uchar i; SelectScreen(ss); Set_page(page); Set_column(column); for(i = 0;i<8;i++) { write_LCD_data(p[i]);} 8 《单片机原理及应用》结课设计报告 Set_page(page+1); Set_column(column); for(i = 0;i<8;i++) { write_LCD_data(p[i+8]);} } void suanshu() { b3= f/100 ; b2=f/10%10 ; b1=f%10 ; } void suanshu1() { b6= g/100 ; b5=g/10%10 ; b4=g%10 ; } void display2(b1,b2,b3) { suanshu(); Delay10ms() ; DM=0xff; DM =~ tab[b1]; Ge=1;Shi=0;Bai=0;Ge1=0;Shi1=0;Bai1=0; Delay10ms(); DM=0xff; DM =~ tab[b2]; Ge=0;Shi=1;Bai=0;Ge1=0;Shi1=0;Bai1=0; Delay10ms(); DM=0xff; DM =~ tab[b3]; Ge=0;Shi=0; Bai=1;Ge1=0;Shi1=0;Bai1=0; } void display3(b4,b5,b6) { suanshu1(); Delay10ms() ; DM=0xff; DM =~ tab[b4]; Ge=0;Shi=0;Bai=0;Ge1=1;Shi1=0;Bai1=0; Delay10ms(); DM=0xff; DM =~ tab[b5]; Ge=0;Shi=0;Bai=0;Ge1=0;Shi1=1;Bai1=0; Delay10ms(); DM=0xff; DM =~ tab[b6]; Ge=0; Shi=0; Bai=0;Ge1=0;Shi1=0;Bai1=1; 9 《单片机原理及应用》结课设计报告 } void lcd() { InitLCD(); ClearScreen(0); Display(1,0,0*16,huan); delay1s(200); Display(1,0,1*16,ying); delay1s(200); Display(1,0,2*16,lai); delay1s(200); Display(1,0,3*16,dao); delay1s(200); Display(1,2,1*16,lan); delay1s(200); Display(1,2,2*16,qiu); delay1s(200); Display(1,2,3*16,ji); delay1s(200); Display(2,2,0*16,fen); delay1s(200); Display(2,2,1*16,xi); delay1s(200); Display(2,2,2*16,tong); delay1s(200); ClearScreen(0); Display(1,2,0*16,jiang); Display(1,2,1*16,nan); Display1(1,2,3*16,s); Display1(2,2,0*16,t); Display1(2,2,1*16,y); Display1(2,2,2*16,l); delay1s(50); ClearScreen(0); } void jiangnan() { Display(0,1,1*16,niao); Display(0,1,2*16,shu); Display(0,3,1*16,tu); Display(01,3,2*16,pian); delay1s(1); Display(0,1,1*16,dong); 10 《单片机原理及应用》结课设计报告 Display(0,1,2*16,fang); Display(0,3,1*16,xue); Display(0,3,2*16,yuan); delay1s(1); Display(0,1,1*16,a); Display(0,1,2*16,b); Display(0,3,1*16,c); Display(0,3,2*16,d); } void main() { uint i=1,j=1; speaker = 0; timer0_init(); lcd(); while(1) { jiangnan(); if(key1==0) { m++; n=m%2; Delay200ms() ; key=1; } if(key==0) { i++; j=i%2; Delay200ms(); key=1; } if(j==1) { display2(b1,b2,b3); if(j==0) { display3(b4,b5,b6); } } } 11 } 《单片机原理及应用》结课设计报告 4程序流程图 开始 初始化各数据 进入待机状态 液晶显示 N 按下开始键 Y 开始计分 按下按键 key1 甲队加1 按下按键 key2 乙队加 1 球队切换 按下按键key1 甲队减1 按下按键key2 乙队减1 加减切换键 结束 12 《单片机原理及应用》结课设计报告 第4章 目标系统 4.1 仿真系统运行演示 图4-1 仿真系统运行演示 图4-2仿真系统运行演示 13 《单片机原理及应用》结课设计报告 4.2系统展望 本系统支持大数值计数,适用于1000以内的分数计算,实现分数的加减,球队的切换,以及开场的凤鸣提示!还有动态的液晶屏显示功能,提供舞蹈画面等等的工作! 篮球比赛计分器结构简单,并且具备最小单片机系统的基本构成。通过这个实例,可以明白构成一个最简单,同时也具备实用性的单片机系统需要哪些外围的设备的基本电路。篮球比赛计时器电路中使用了最为常用的输入输出设备:按键开关和数码管。通过对本设计的说明,可以使大家明白单片机系统的最简单的用途和控制方式。 4.3设计总结 在整个设计过程中,自主学习,通过对以前知识的补充和学习。较好的完成了作品,完成了本次课程设计的要求。在最初的设计中,,对于51单片机进行了充分的了解,并与52 相比较,了解了两种单片机的不同,并相互学习、相互讨论、最终决定使用89C52 单片机制作。电路的布局在protel 软件中进行了期间排布,使得期间在板子上尽可能合理分配。电路焊接时大量使用了插针,防止了在在焊接中导线的错误链接,减小电路工程量。达到事半功倍的效果。 程序编写中,由于思路不清晰,开始时遇到了很多的问题,通过和同组员的讨论,以及对大量书籍资料和论坛中成功的品进行借鉴,明白了编程中的的主要算法和实现,从而解决的大部分问题。对于液晶屏幕,开始并不是很了解,在运用时查看了大量的手册资料,并阅读了网友对于12864 液晶的驱动编写代码,从而掌握了12864 液晶的使用。对于单片机的扩展我们以前学习的键盘和1802 对我们很有用,在本次单片机课程设计中对于单片机功能及应用有了充分了认识。充分了解了单片机的应用。 14 《单片机原理及应用》结课设计报告 参考文献 [1]万文略编著.单片机原理及应用. 重庆:重庆大学出版社,2004. [2]孙德文编著.微型计算机技术. 北京:高等教育出版社,2005. [3]张建勋编著.C语言程序设计教程. 北京:清华大学出版社,2008. [4]于海生编著.计算机控制技术. 北京:机械工业出版社,2007. [5]胡建明编著. MCS-51单片机篮球计分器的设计[N]. 期刊论文.广西轻工业.2008-9 [6]金素华,张尉.单片机调试方法的讨论.电子世界,2004-4-25 [7] AT89C51 DATA SHEEP Philips Semiconductors 1999.dec 15 因篇幅问题不能全部显示,请点此查看更多更全内容