2简易比赛计分器

合集下载

体育比赛计分器

体育比赛计分器

单片机课程设计体育比赛计分器一、设计目的1.掌握单片机定时器的设计方法2.掌握单片机扩展显示器、键盘的方法二、技术指标1.系统可适用于多项体育比赛的计分;2.键盘设置比赛的最高分数,达到最高分数时能够进行声光显示;3.能够显示比赛时间(比赛暂停时能够显示暂停间)时间到时能够进行声光显示;4.LED显示比赛分数。

三、方案对比方案一:采用计时芯片针对计算机系统对计时芯片的要求,各大芯片厂家推出了键时钟、倒计时、正计时等各种芯片,可采用自动控制计时芯片,通过触发控制电路使计时器自动计时,达到预定时间后芯片重新开始计时(实现倒计时功能);也可通过触发控制电路使计时器不计时,达到预定时间后芯片重新开始计时(实现暂停功能),不需要程序干预。

计算机可通过中断或查询方式读取计时器数据,实现计时的暂停功能,并进行显示,计时功能的实现就无需占用CPU的时间,程序简单,控制精度高,因此在工业系统中这一类专用芯片实现计时功能。

方案二:利用AT89C51内部定时器|计数器进行中断定时,配合软件延时实现计时功能。

该方案节省硬件成本,并可综合运用定时器、计数器及程序设计的知识,因此本设计采用软件实现计时。

四、方案概述本系统采用单片机AT89C51作为本设计的核心元件,利用七段共阳LED作为显示器件,并用74LS573作为驱动芯片。

在此设计中共接入10个七段共阳LED显示器,其中六个用于记录甲乙两队的分数,每队三个,显示分数范围可达0-999,可满足各种体育比赛需要。

另外四个用于记录比赛时间,其中两个用于显示分钟,两个用于显示秒钟,显示时间范围可达0-99分钟,也可满足各种比赛需要。

比赛分两种模式,一种为限定比赛时间,即赛前需设定比赛用时,比赛开始后进行倒计时,倒计时为零时停止比赛;另一种为限定比赛最高分数,即赛前需设定最高比赛分数,一方到达该分数即停止比赛。

为方便实现计时器和计分器调整时间和比分,设置了键盘,其中按键T和S分别代表两种模式,根据具体情况选择比赛模式。

单片机篮球比赛记分器 精品

单片机篮球比赛记分器 精品

DACHANGCHUN INSTITUTE OF TECHNOLOGY篮球比赛记分器The Game Of Basketball Scoring Device设计题目:篮球比赛记分器学院名称:电气与信息工程学院专业名称:电子信息工程任务分配表班级学号姓名完成主要任务电子104208 PCB的绘制仿真与实现电子1042 13 程序的修改PCB的绘制仿真与实现PROTEUS原理图绘制与仿真电子1042 35 文档的编写程序的修改PROTEUS原理图绘制与仿真篮球比赛记分器摘要:本文设计了一个篮球比赛记分器主要利用单片机AT89C51作为核心元件,利用3组4位共阳极的数码管作为显示器件,以C语言作为编程语言,在Protues和Keil搭建的软件仿真平台下进行仿真,本设计包含了AT89C51系列单片机的最小系统的构成,同时在此基础上扩展了一些实用性强的外围接口,可以进一步了解译码器74LS247的应用,LED七段数码管的结构和工作原理,主要实现了计时和显示A/B队的分数,并能及时进行加分,减分,鸣笛警示等功能。

本系统具有成本低廉、性能稳定、高准确度显示、操作方便且易携带等特点。

广泛适合各类学校和小团体作为赛程计分。

关键词:AT89C51单片机;74LS247;七段数码管;仿真;嵌入式0 引言进入21世纪,伴随着电子,信息通信技术的应用与普及开发,人们对电子技术的要求也越来越高,目前嵌入式单片机渗透到我们生活的各个领域。

单片机是一种集成在电路芯片,是采用超大规模集成电路技术,把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能集成到一块硅片上构成的一个小而完善的计算机系统。

按照历史性、本质性、普遍性要求,嵌入式系统应定义为:“嵌入到对象体系中的专用计算机系统”,可分软件部分和硬件部分,而当代单片机系统已经不再只在裸机环境下开发和使用,大量专用的嵌入式操作系统被广泛应用在单片机上。

篮球比赛计时计分器

篮球比赛计时计分器

设计任务:1、显示内容,队名用英文名,3个大写字母20分队名1-A:队名2-B =xxx:xxx第x节剩余时间:XX分XX秒2、串口控制20分A+1% A队加1分,%为结束符A+2% A队加2分,%为结束符A+3% A队加3分,%为结束符B+1% B队加1分,%为结束符以此类推3、串口控制交换场地5分A-B% AB队交换4、20 分PAUSE% 计时暂停按键1-定义为PAUSE按键用ZLG7290RESTART%重新计时按键2-定义为RESTARTRESET%重新比赛按键3-定义为RESET5、存储近5场的成绩到AT24C02 格式:1-队名1队名2=90:100类推20分RECALL1% 提取存储的第1场成绩,在数码管上显示,只显示比分,串口传回队名+比分&整场结束,提示是否保存成绩,按键4-存储键按键5-放弃键15分源代码:接线说明:PSB-VCC RS-P1.0 RW-P1.1 P1.3-E INT-P3.2 TXD-P3.1 RXD-P3.0 SDA-P1.6 SCL-P1.7 I2C 总线的ABC》别接键盘的ABCD以程序为准凭记忆写出来的)主程序#include<reg51.h>#include<intrins.h>#include<string.h>#include<I2C.h>#include <ZLG7290.h>#define unchar unsigned char #define unit unsigned int #define Lcd_Bus P0#define unchar unsigned char unsigned char KeyValue,FlagINT; int ney;// 纪录第及场比赛sbit RS=P1A0;//LCD 显示屏sbit RW=P1A1;sbit E=P1A3;unchar code lcddata[]={"0123456789:"};unchar code duiming[]={'1','H','O','U',':','2','C','H','I','='};unchar bifen[7];unchar fen1;unchar fen2;unchar jie;unchar min;unchar sec;unchar control;unchar table[10];************** 延时函数***********************void delay(unsigned int t) { unsigned int i,j;for(i=0;i<t;i++) for(j=0;j<10;j++)/* ------------ 写命令到LCD ---------------------- */void write_com(unsigned char cmdcode) {//chk_busy();RS = 0; // 置零RW = 0;E = 1;Lcd_Bus = cmdcode;delay(10); // 在数据写入的时候加入适当的延时 E = 0;}/* ------------ 写数据到LCD ---------------------- */void write_data(unsigned char Dispdata){//chk_busy();RS = 1; // 写数据RW = 0;E = 1;Lcd_Bus = Dispdata;delay(10); // 在数据写入的时候加入适当的延时 E = 0;/******* 函数名称:Write_Char* 功能描述:写字符******/ void write_char(unsigned int num){// chk_busy();RS = 1;RW = 0;E = 1;Lcd_Bus = lcddata[num];E = 0;}/* ------------ 显示字符串----------------- */void hzkdis(unsigned char code *s){ while(*s>0){ write_data(*s);// 选择基本指令集 (30H )// 点设定,游标右移// 开显示控制 (无游标、不反白 )// 清除显示,并且设定地址指针为 00H //unchar duiming[]= "1-HOU:2-CHI";// 队名数组//unchar bifen[7];// 比分数组unchar k;// 记录第几场比赛void timer0init(void) {TMOD=0X21;TH0=0X31;TL0=0XB0;ET0=1;EA=1;TR0=1;//IT0=1;// EX0=1;}/***** 用作串口通信 ****/ void timer1init(void){TH1=0xf3;TL1=0XF3;SCON=0X50;EA=1;ES=1;TR1=1;}/**** 保存成绩 */void save(int ney){ s++;/* ------------ 初始化 LCD 屏 ----------------- */ /*** 用作计时***/void lcdreset() { write_com(0x30);delay(16); write_com(0x04);delay(16);write_com(0x0f); delay(16);write_com(0x01);delay(16);}(同时地址归为 )int i;unchar buff[7];// ney++;ZLG7290_Download(i,0,0,0X0A); bifen[2]=fen2/100;bifen[1]=(fen2%100-fen2%10)/10;bifen[0]=fen2%10;bifen[3]=0X1F;bifen[6]=fen1/100;bifen[5]=(fen1%100-fen1%10)/10;bifen[4]=fen1%10;for(i=0;i<7;i++){x24c02_write(i+7*ney,bifen[i]);}for(i=0;i<7;i++){buff[i]=x24c02_read(i+7*ney); delay(12);}for(i=0;i<7;i++){ZLG7290_Download(i,0,0,buff[i]);}/********** 将存储在at24c02 的数据通过串口通信发还给电脑**/ void fahuan(unsigned char k){unchar buff[7],i;for(i=0;i<10;i++){SBUF=duiming[i];while(!TI){;}TI=0;}for(i=0;i<7;i++){buff[i]=x24c02_read(i+7*k);delay(12);}for(i=0;i<7;i++){ZLG7290_Download(i,0,0,buff[i]);}for(i=6;i>3;i--){SBUF=buff[i]+48;while(!TI){;}TI=0;}SBUF=':';while(!TI){;}TI=0;SBUF=buff[2]+48;while(!TI){;}TI=0;SBUF=buff[1]+48; while(!TI){;} TI=0;SBUF=buff[0]+48; while(!TI){;} TI=0;P2=0xf0;}/**** 定时器中断用作计时**/ void timer0(void) interrupt 1 using 1 {static unchar count=0; unchar i;TH0=0X3C;TL0=0XB0; count++;if(count==20){count=0;sec--;if(sec==-1){sec=59; min--; if(min==-1) {if(jie<=3) {write_com(0x01); jie++;min=1; } else { // TR0=0;control=0; //save();}}}}/**** 主要用作显示比分**/void show_fen1(void){ write_com(0x80); hzkdis("2-CHI:1-HOU=");write_com(0x90); delay(16);write_char(fen2/ 100); delay(16);write_char((fen2%100-fen2% 10)/10); delay(16);write_char(fen2% 10); delay(16);write_char( 10 ); delay(16) ;write_char(fen1/ 100); delay(16);write_char((fen1%100-fen1% 10)/10); delay(16);write_char(fen1% 10); delay(16);}/**** 显示比分队名顺序相反**/void show_fen0(void){write_com(0x80);hzkdis("1-HOU:2-CHI=");write_com(0x90); delay(16);write_char(fen1/ 100); delay(16);write_char((fen1%100-fen1% 10)/10); delay(16);write_char(fen1% 10);write_char( 10 ); delay(16) ;write_char(fen2/ 100); delay(16); write_char((fen2%100-fen2%10)/10); delay(16);write_char(fen2% 10); delay(16);}/*** 显示时间**/void show_time(void){write_com(0x88);if(jie%10==1)hzkdis("第 1 节”);if(jie%10==2)hzkdis("第 2 节");if(jie%10==3)hzkdis("第 3 节");if(jie%10==4)hzkdis("第 4 节");write_com(0x8c);hzkdis("剩余时间");write_com(0x9a);delay(16);write_char( min / 10 );delay(16);write_char( min % 10 );delay(16);write_char( 10 );delay(16);write_char( sec / 10 );delay(16);write_char( sec % 10 );}void show(){write_com(0x80);hzkdis("是否保存成绩?”);write_com(0x90);hzkdis("y press butter 4"); write_com(0x88);hzkdis("n press butter 5 "); write_com(0x98);hzkdis(" ");}/***** 串口中断处理来自串口助手的命令*/ void chuanko() interrupt 4 {unchar i=0;unchar buff[]="wrong";while(1){ while(!RI);RI=0; if(SBUF=='%') break; table[i]=SBUF;i++;} if(table[0]=='A'&&table[1]=='+'&&table[2]=='1') fen1++;else if(table[0]=='A'&&table[1]=='+'&&table[2]=='2') {fen1++;fen1++;}else if(table[0]=='A'&&table[1]=='+'&&table[2]=='3') {fen1++;fen1++;fen1++;}else if(table[0]=='B'&&table[1]=='+'&&table[2]=='1')fen2++;else if(table[0]=='B'&&table[1]=='+'&&table[2]=='2'){fen2++;fen2++;}else if(table[0]=='B'&&table[1]=='+'&&table[2]=='3'){fen2++;fen2++;fen2++;}else if(table[0]=='A'&&table[1]=='-'&&table[2]=='B'){control=2;// 交换场地}elseif(table[0]=='P'&&table[1]=='A'&&table[2]=='U'&&table[3]=='S'&&table[4]=='E'){TRO=(~TRO);〃暂停}elseif(table[0]=='R'&&table[1]=='E'&&table[2]=='S'&&table[3]=='T'&&table[4]=='A'&&table[5]==' R'& &table[6]=='T'){TR0=0;min=11;sec=59;TR0=1;〃重新计时}elseif(table[0]=='R'&&table[1]=='E'&&table[2]=='S'&&table[3]=='E'&&table[4]=='T'){ timer0init();// TR0=0;min=11;sec=59;jie=1;fen1=0;fen2=0;TR0=1;〃重新开始write_com(0x01);control=1;}elseif(table[0]=='R'&&table[1]=='E'&&table[2]=='C'&&table[3]=='A'&&table[4]=='L'&&table[5]==' L'& &table[6]=='1'){ ZLG7290_Download(i,0,0,0X0E);fahuan(0);//shuma(1);}elseif(table[0]=='R'&&table[1]=='E'&&table[2]=='C'&&table[3]=='A'&&table[4]=='L'&&table[5]=='L'& &table[6]=='2'){ fahuan(1);//shuma(2);}elseif(table[0]=='R'&&table[1]=='E'&&table[2]=='C'&&table[3]=='A'&&table[4]=='L'&&table[5]==' L'& &table[6]=='3'){ fahuan(2);//shuma(3);}elseif(table[0]=='R'&&table[1]=='E'&&table[2]=='C'&&table[3]=='A'&&table[4]=='L'&&table[5]==' L'& &table[6]=='4'){ fahuan(3);//shuma(4);}elseif(table[0]=='R'&&table[1]=='E'&&table[2]=='C'&&table[3]=='A'&&table[4]=='L'&&table[5]==' L'& &table[6]=='5'){ fahuan(4);//shuma(5);}else{ for(i=0;i<6;i++) {SBUF=buff[i]; while(!TI); TI=0;/**** 外部中断初始化响应按键中断**/void SystemInit(){I2C_Init();EA = 0;IT0 = 1; // 负边沿触发中断EX0 = 1; // 允许外部中断EA = 1; // 等待ZLG7290 复位完毕}/***** 外部中断函数响应各个按键**/void INT0_SVC() interrupt 0 {unchar i; ZLG7290_ReadReg(ZLG7290_Key,&KeyValue);// 显示键值DispValue(0,KeyValue); if(KeyValue==0x09) {TRO=(~TRO);//暂停} if(KeyValue==0x0a){TR0=0;min=11;sec=59;TR0=1;//重新计时} if(KeyValue==0x0b)timer0init(); write_com(0x01);TR0=0;min=11;sec=59;jie=1;fen1=0;fen2=0;control=1;TR0=1;〃重新开始} if(KeyValue==0x0c) { save(ney);ney++;timer0init();// 响应完中断记得重新初始化不然可能会出错timer1init();SystemInit();}main(){min=11;sec=59;fen1=0;fen2=0;jie=1;control=1;ney=0;timer0init();timer1init();lcdreset();SystemInit();//系统初始化while(1){if(control==1){show_fen0(); show_time();}if(control==0){show();// 比赛结束提示}if(control==2){show_fen1();// 交换场地show_time();}I2C.C标准80C51单片机模拟I2C总线的主机程序Copyright (c) 2005,广州周立功单片机发展有限公司All rights reserved.本程序仅供学习参考,不提供任何可靠性方面的担保;请勿用于商业目的*/#i nclude "I2C.h"//定义延时变量,用于宏l2C_Delay()un sig ned char data I2C_Delay_t;/*宏定义:I2C_Delay()功能:延时,模拟I2C总线专用*/#defi ne I2C_Delay()\{\I2C_Delay_t = (I2C_DELAY_VALUE);\ while ( --I2C_Delay_t != 0 );\/*函数:I2C_I nit()功能:I2C总线初始化,使总线处于空闲状态说明:在main()函数的开始处,通常应当要执行一次本函数*/void I2C_I nit(){I2C_SCL = 1;I2C_Delay();I2C_SDA = 1;I2C_Delay();/*函数:I2C_Start()功能:产生I2C 总线的起始状态说明:SCL处于高电平期间,当SDA出现下降沿时启动I2C总线不论SDA和SCL处于什么电平状态,本函数总能正确产生起始状态本函数也可以用来产生重复起始状态本函数执行后,I2C总线处于忙状态*/void I2C_Start(){I2C_SDA = 1;I2C_Delay();I2C_SCL = 1;I2C_Delay();I2C_SDA = 0;I2C_Delay();I2C_SCL = 0;I2C_Delay();} /* 函数:I2C_Write()功能:向I2C总线写1个字节的数据参数:dat:要写到总线上的数据*/ void I2C_Write(char dat){unsigned char t = 8;do{I2C_SDA = (bit)(dat & 0x80);dat <<= 1;I2C_SCL = 1;I2C_Delay();I2C_SCL = 0;I2C_Delay();} while ( --t != 0 );/*函数:I2C_Read() 功能:从从机读取 1 个字节的数据返回:读取的一个字节数据*/char I2C_Read(){char dat;unsigned char t = 8;I2C_SDA = 1; //在读取数据之前,要把SDA拉高do {I2C_SCL = 1;I2C_Delay();dat <<= 1;if ( I2C_SDA ) dat |= 0x01;I2C_SCL = 0;I2C_Delay();} while ( --t != 0 ); return dat;}/*函数:I2C_GetAck() 功能:读取从机应答位返回:0:从机应答1 :从机非应答说明:从机在收到每个字节的数据后,要产生应答位从机在收到最后 1 个字节的数据后,一般要产生非应答位*/bit I2C_GetAck(){bit ack;I2C_SDA = 1;I2C_Delay();I2C_SCL = 1;I2C_Delay();ack = I2C_SDA; I2C_SCL = 0;I2C_Delay();return ack;/*函数:I2C_PutAck() 功能:主机产生应答位或非应答位参数:ack=O:主机产生应答位ack=1 :主机产生非应答位说明:主机在接收完每一个字节的数据后,都应当产生应答位主机在接收完最后一个字节的数据后,应当产生非应答位*/void I2C_PutAck(bit ack){I2C_SDA = ack;I2C_Delay();I2C_SCL = 1;I2C_Delay();I2C_SCL = 0;I2C_Delay();}/*函数:I2C_Stop()功能:产生I2C 总线的停止状态说明:SCL处于高电平期间,当SDA出现上升沿时停止I2C总线不论SDA和SCL处于什么电平状态,本函数总能正确产生停止状态本函数执行后,I2C总线处于空闲状态*/void I2C_Stop(){unsigned int t = I2C_STOP_WAIT_VALUE;I2C_SDA = 0;I2C_Delay();I2C_SCL = 1;I2C_Delay();I2C_SDA = 1;I2C_Delay();while ( --t != 0 ); // 在下一次产生Start 之前,要加一定的延时} /*函数:I2C_Puts()功能:I2C总线综合发送函数,向从机发送多个字节的数据参数:SlaveAddr:从机地址(7位纯地址,不含读写位)SubAddr:从机的子地址SubMod:子地址模式,0—无子地址,1 —单字节子地址,2—双字节子地址*dat :要发送的数据Size:数据的字节数返回:0:发送成功1 :在发送过程中出现异常说明:本函数能够很好地适应所有常见的I2C 器件,不论其是否有子地址当从机没有子地址时,参数SubAddr 任意,而SubMod 应当为0*/bit I2C_Puts(unsigned char SlaveAddr, unsigned int SubAddr, unsigned char SubMod, char *dat, unsigned int Size){// 定义临时变量unsigned char i;char a[3];// 检查长度if ( Size == 0 ) return 0;// 准备从机地址a[0] = (SlaveAddr << 1);// 检查子地址模式if ( SubMod > 2 ) SubMod = 2;// 确定子地址switch ( SubMod ){case 0: break;case 1:a[1] = (char)(SubAddr);break;case 2:a[1] = (char)(SubAddr >> 8);a[2] = (char)(SubAddr);break;default: break;}// 发送从机地址,接着发送子地址(如果有子地址的话) SubMod++;I2C_Start();for ( i=0; i<SubMod; i++ ){I2C_Write(a[i]);if ( I2C_GetAck() ){I2C_Stop(); return 1;}}// 发送数据do{I2C_Write(*dat++);if ( I2C_GetAck() ) break;} while ( --Size != 0 );//发送完毕,停止I2C总线,并返回结果I2C_Stop();if ( Size == 0 ){return 0;}else{return 1;}}/*函数:I2C_Gets()功能:I2C总线综合接收函数,从从机接收多个字节的数据参数:SlaveAddr:从机地址(7位纯地址,不含读写位)SubAddr:从机的子地址SubMod:子地址模式,0—无子地址,1 —单字节子地址, *dat :2—双字节子地址保存接收到的数据Size:数据的字节数返回:0:接收成功1 :在接收过程中出现异常说明:本函数能够很好地适应所有常见的I2C 器件,不论其是否有子地址当从机没有子地址时,参数SubAddr 任意,而SubMod 应当为0 */bit I2C_Gets(unsigned char SlaveAddr, unsigned int SubAddr, unsigned char SubMod, char *dat, unsigned int Size){// 定义临时变量unsigned char i; char a[3];// 检查长度if ( Size == 0 ) return 0;// 准备从机地址a[0] = (SlaveAddr << 1);// 检查子地址模式if ( SubMod > 2 ) SubMod = 2;// 如果是有子地址的从机,则要先发送从机地址和子地址if ( SubMod != 0 ){//确定子地址if ( SubMod == 1 ){a[1] = (char)(SubAddr);}else{a[1] = (char)(SubAddr >> 8); a[2] = (char)(SubAddr);} //发送从机地址,接着发送子地址SubMod++;I2C_Start();for ( i=0; i<SubMod; i++ ){ I2C_Write(a[i]); if ( I2C_GetAck() ) {I2C_Stop();return 1;}}//这里的l2C_Start()对于有子地址的从机是重复起始状态//对于无子地址的从机则是正常的起始状态l2C_Start();// 发送从机地址l2C_Write(a[0]+1);if ( l2C_GetAck() ){l2C_Stop();return 1;}//接收数据for (;;){*dat++ = l2C_Read();if ( --Size == 0 ){ l2C_PutAck(1); break;} l2C_PutAck(0);}//接收完毕,停止I2C总线,并返回结果l2C_Stop();return 0;}/*ZLG7290.c数码管显示与键盘管理芯片ZLG7290的标准80C51驱动程序C文件Copyright (c) 2005,广州周立功单片机发展有限公司All rights reserved.本程序仅供学习参考,不提供任何可靠性方面的担保;请勿用于商业目的*/ #include "I2C.h"#include "ZLG7290.h" /*函数:ZLG7290_WriteReg()功能:向ZLG7290的某个内部寄存器写入数据参数:RegAddr:ZLG7290的内部寄存器地址dat :要写入的数据返回:0:正常1:访问ZLG7290时出现异常*/bit ZLG7290_WriteReg(unsigned char RegAddr, char dat){bit b;b = I2C_Puts(ZLG7290_I2C_ADDR,RegAddr,1,&dat,1); return b;}/*函数:ZLG7290_ReadReg()功能:从ZLG7290的某个内部寄存器读出数据参数:RegAddr:ZLG7290的内部寄存器地址*dat :保存读出的数据返回:0:正常1:访问ZLG7290时出现异常*/bit ZLG7290_ReadReg(unsigned char RegAddr, char *dat){bit b;b = I2C_Gets(ZLG7290_I2C_ADDR,RegAddr,1,dat,1); return b;}/*函数:ZLG7290_cmd()功能:向ZLG7290发送控制命令参数:cmdO :写入CmdBufO寄存器的命令字(第1字节) cmdl :写入CmdBufl寄存器的命令字(第2字节) 返回:0:正常1:访问ZLG7290时出现异常*/bit ZLG7290_cmd(char cmd0, char cmd1){bit b;char buf[2];buf[0] = cmd0;buf[1] = cmd1;b = I2C_Puts(ZLG7290_I2C_ADDR,ZLG7290_CmdBuf,1,buf,2); return b; }/* 函数:ZLG7290_SegOnOff()功能:段寻址,单独点亮或熄灭数码管(或LED)中的某一段参数:seg:取值0〜63,表示数码管(或LED)的段号b:0 表示熄灭, 1 表示点亮返回:0:正常1:访问ZLG7290时出现异常说明:在每一位数码管中,段号顺序按照“ a,b,c,d,e,f,g,dp ”进行*/bit ZLG7290_SegOnOff(char seg, bit b){char cmd;cmd = seg & 0x3F;if ( b ) cmd |= 0x80;return ZLG7290_cmd(0x01,cmd);}/*函数:ZLG7290_Download() 功能:下载数据并译码参数:addr :取值0〜7,显示缓存DpRamO〜DpRam7的编号dp:是否点亮该位的小数点,0 —熄灭,1—点亮flash:控制该位是否闪烁,0—不闪烁,1—闪烁dat :取值0〜31,表示要显示的数据返回:0:正常1:访问ZLG7290时出现异常说明:显示数据具体的译码方式请参见ZLG7290的数据手册*/bit ZLG7290_Download(char addr, bit dp, bit flash, char dat){char cmd0;char cmd1;cmd0 = addr & 0x0F;cmd0 |= 0x60;cmd1 = dat & 0x1F;if ( dp ) cmd1 |= 0x80;if ( flash ) cmd1 |= 0x40;return ZLG7290_cmd(cmd0,cmd1);} /*I2C.h标准80C51单片机模拟I2C总线的主机程序头文件Copyright (c) 2005,广州周立功单片机发展有限公司All rights reserved. 本程序仅供学习参考,不提供任何可靠性方面的担保;请勿用于商业目的*/#ifndef _I2C_H_ #define _I2C_H_#include <reg51.h>//模拟I2C总线的引脚定义sbit I2C_SCL = P1A6;sbit I2C_SDA = P"7;//定义I2C总线时钟的延时值,要根据实际情况修改,取值1〜255//SCL信号周期约为(I2C_DELAY_VALUE*4+15个机器周期#define I2C_DELAY_VALUE 12//定义I2C总线停止后在下一次开始之前的等待时间,取值1〜65535〃等待时间约为(I2C_STOP_WAIT_VALUE*8个机器周期//对于多数器件取值为 1 即可;但对于某些器件来说,较长的延时是必须的#defineI2C_STOP_WAIT_VALUE 120//I2C 总线初始化,使总线处于空闲状态void I2C_Init();void x24c02_write(unsigned char address,unsigned char info); unsigned charx24c02_read(unsigned char address); //unsigned char x24c02_read(unsigned char address);//I2C 总线综合发送函数,向从机发送多个字节的数据bit I2C_Puts(unsigned char SlaveAddr,unsigned int SubAddr,unsigned char SubMod, char *dat, unsigned int Size);//I2C 总线综合接收函数,从从机接收多个字节的数据bit I2C_Gets(unsigned char SlaveAddr,unsigned int SubAddr,unsigned char SubMod, char *dat, unsigned int Size);#endif //_I2C_H_/*ZLG7290.h数码管显示与键盘管理芯片ZLG7290的标准80C51驱动程序头文件Copyright (c) 2005,广州周立功单片机发展有限公司All rights reserved. 本程序仅供学习参考,不提供任何可靠性方面的担保;请勿用于商业目的*/#ifndef _ZLG7290_H_#define _ZLG7290_H_#include <reg51.h> //ZLG7290 中断请求信号的引脚定义sbit ZLG7290_pi nINT = P3A2;II定义ZLG7290在I2C总线协议中的从机地址// 这是7 位纯地址,不含读写位#define ZLG7290_I2C_ADDR 0x38II定义ZLG7290内部寄存器地址(子地址)#define ZLG7290_SystemReg 0x00 II系统寄存器#define ZLG7290_Key 0x01 II 键值寄存器II#define ZLG7290_RepeatCnt 0x02 II 连击次数寄存器II#define ZLG7290_FunctionKey 0x03 II 功能键寄存器#define ZLG7290_CmdBuf 0x07 II 命令缓冲区起始地址#define ZLG7290_CmdBuf0 0x07 II 命令缓冲区0#define ZLG7290_CmdBuf1 0x08 //命令缓冲区 1//#define ZLG7290_FlashOnOff 0x0C //闪烁控制寄存器#define ZLG7290_ScanNum 0x0D //扫描位数寄存器#define ZLG7290_DpRam 0x10 // 显示缓存起始地址#define ZLG7290_DpRam0 0x10 //显示缓存0/#define ZLG7290_DpRam10x11 //显示缓存 1#define ZLG7290_DpRam2 0x12 //显示缓存 2#define ZLG7290_DpRam3 0x13 //显示缓存 3#define ZLG7290_DpRam5 0x15 //显示缓存 5#define ZLG7290_DpRam6 0x16 //显示缓存 6#define ZLG7290_DpRam7 0x17 //显示缓存7//向ZLG7290的某个内部寄存器写入数据bit ZLG7290_WriteReg(unsigned char RegAddr, char dat);//从ZLG7290的某个内部寄存器读出数据bit ZLG7290_ReadReg(unsigned char RegAddr, char *dat);//向ZLG7290发送控制命令bit ZLG7290_cmd(char cmd0, char cmd1);//段寻址,单独点亮或熄灭数码管(或LED)中的某一段bit ZLG7290_SegOnOff(char seg, bit b);//下载数据并译码bit ZLG7290_Download(char addr, bit dp, bit flash, char dat);〃闪烁控制指令(Fn应当是字节型)//Fn 的8 个位分别控制数码管的8 个位是否闪烁,0-不闪烁,1-闪烁#define ZLG7290_Flash(Fn) ZLG7290_cmd(0x70,(Fn))#endif //_ZLG7290_H_#include <reg51.h>#include <intrins.h>#include <I2C.h>//sbit dula=P2A6;//sbit wela=P2A7; unsigned char j,c;void de(unsigned char i) // 延时程序{for(j=i;j>0;j--)for(c=125;c>0;c--);}/*24C02 读写驱动程序*/void flash()// 短时间的延时,几微秒左右{ ; ;}void init() //24c02 初始化子程序{I2C_SCL=1;flash();I2C_SDA=1;flash();}void start() // 启动I2C 总线{I2C_SDA=1;flash();I2C_SCL=1;flash();I2C_SDA=0;flash();// scl=0;// flash();}void stop() // 停止I2C 总线{I2C_SDA=0;flash();I2C_SCL=1;flash();I2C_SDA=1;flash();}void writex(unsigned char j) // 写一个字节{ unsigned char i,temp;temp=j;for (i=0;i<8;i++){ temp=temp<<1; I2C_SCL=0; flash(); I2C_SDA=CY; flash(); I2C_SCL=1; flash();}I2C_SCL=0;flash();I2C_SDA=1;flash();} unsigned char readx() // 读一个字节{unsigned char i,z;I2C_SCL=0;flash();I2C_SDA=1;for (i=0;i<8;i++){ flash(); I2C_SCL=1; flash();if (I2C_SDA==1) j=1; else j=0;z=(z<<1)|j;// 先左移,然后在最低位读入值I2C_SCL=0;}flash();return(z);}void clock() //I2C 总线时钟响应{unsigned char i=0;I2C_SCL=1;flash();while ((I2C_SDA==1)&&(i<255))i++;I2C_SCL=0;flash();//////// 从24c02 的地址address 中读取一个字节数据///// unsigned charx24c02_read(unsigned char address) {unsigned char i; start();writex(0xa8);//A1 A2 A3 全部低电平// clock();writex(address);clock();start(); writex(0xa9);clock(); i=readx();stop(); de(10);return(i); }////// 向24c02 的address 地址中写入一字节数据info///// void x24c02_write(unsigned char address,unsigned char info) {EA=0;start(); writex(0xa8);clock(); writex(address);clock(); writex(info);clock();stop();de(50);。

篮球计分器

篮球计分器

篮球比赛数字计分牌引言该系统采用可逆计数器74LS192D和74LS161作为该设计的核心原件。

以七段共阴数码管作为显示器件,CD4511作为数码管驱动器。

在该设计中共有三个数码管用于显示该队的分数,数码管U10,U9,U8分别显示百位,十位,个位,可以显示0~999的分数。

按下S3,百位,十位和个位复位;当球员得分或扣分为1分,则在加减一分模块进行开关按键操作;当球员得分或减分为2分时,则在加减2分模块进行按键操作。

该系统构造简单,易于制作,可普遍应用于篮球比赛或各类运动。

由于制作简单,益于安装在各类球场中,也可用于学生篮球赛计分,可以取代纸质记分牌。

经过适当的改造,也可以用于其他类型的比赛。

关键字74LS192D〔可逆十进制计数器〕七段共阴数码管74LS161计数器CD4511数码管驱动器NE555定时器1 设计意义与目的篮球比赛是根据在规定时间两篮球队的得分高低来确定哪一支篮球队获胜,应用动态的电子篮球计分牌能够动态的反应两支队伍的得分情况,吸引观众的眼球,提高观众的兴趣。

篮球数字计分牌设计简单,能应用于各种不同场合的篮球赛,能客观的正确的记录篮球比赛双方的得分情况。

根据目前高水平比赛的要求,完善后的篮球计分牌能够时与现场的电子设备实现现场成绩处理,大屏幕转播,实现表演娱乐观众的目的。

1.2设计目的1.熟悉集成电路的引脚安排;2.熟悉芯片的逻辑功能以及使用方法;3.加强焊接技术和接线方面的提高;4.熟悉74LS192D等芯片的的逻辑功能和设计制作;2 总体方案的设计1.由于篮球计分牌需要从零开始计分,要求可清零重新比赛,要求有一开关控制数码管的清零,用作复位开关。

2.记分牌的百位,十位,个位用三个数码管显示;3.百位,十位,个位的加减由十进制计数器74LS192D,74LS161实现;4.利用防抖动的按键开关控制计数器的出发信号;3 模块设计3.1 计数编码电路在该模块中,核心元件是可逆加减计数器74LS192D和74LS161。

比赛计时计分器课程设计

比赛计时计分器课程设计

比赛计时计分器课程设计一、课程目标知识目标:1. 学生能够理解比赛计时计分器的基本原理,掌握其计时和计分的方法。

2. 学生能够运用所学知识,设计并制作一个简单的比赛计时计分器。

3. 学生能够了解计时计分器在各类比赛中的应用和重要性。

技能目标:1. 学生能够运用编程语言或电子元件,实现计时和计分功能。

2. 学生能够通过团队协作,完成计时计分器的设计、制作和调试。

3. 学生能够运用所学技能解决实际问题,提高创新实践能力。

情感态度价值观目标:1. 学生培养对信息技术和电子制作的兴趣,激发学习热情。

2. 学生在学习过程中,增强团队合作意识,培养沟通协调能力。

3. 学生通过制作比赛计时计分器,体验科技带来的便利,提高社会责任感和创新精神。

课程性质:本课程为信息技术与电子制作的实践课程,结合学生年级特点和教学要求,注重培养学生的动手能力、创新意识和团队协作精神。

学生特点:学生具备一定的信息技术基础,对电子制作感兴趣,善于动手实践,喜欢团队合作。

教学要求:教师应引导学生将理论知识与实践相结合,关注学生的个体差异,鼓励学生积极参与,充分挖掘学生的潜能。

同时,注重培养学生的自主学习能力,提高课程学习效果。

通过本课程的学习,使学生能够将所学知识应用于实际生活,达到学以致用的目的。

二、教学内容1. 理论知识:- 计时计分器的基本原理和功能- 编程语言基础(如Scratch、Python等)- 电子元件知识(如LED、按钮、传感器等)2. 实践操作:- 设计计时计分器的原型- 选择合适的编程语言和电子元件- 搭建电路,编写程序,实现计时和计分功能3. 教学大纲:- 第一课时:介绍计时计分器的基本原理和功能,引导学生思考其应用场景。

- 第二课时:学习编程语言基础,掌握基本的编程思路和技巧。

- 第三课时:了解电子元件知识,学习如何使用各类元件。

- 第四课时:分组讨论,设计计时计分器原型,明确分工和任务。

- 第五课时:搭建电路,编写程序,实现计时和计分功能。

篮球计分器

篮球计分器

第1章系统概述1.1系统功能设计一个甲、乙两队比赛计分器,主要用于各种体育比赛记录分数。

采用矩阵式键盘作为输入。

基于以上思路,本次设计使用80C51实现一基于单片机的电子计分器的设计,其主要具有如下功能:(1)用户可分别对两队比分进行加5、加10、加15和减5,减10,减15操作。

(2)比分通过8个8段共阴极数码管显示器进行显示,每队比分显示三位,中间两个数码管作为分开分数,可以交换两队的比分。

(4)具有复位功能,通过复位键实现。

(5)裁判可通过控制按键对甲乙实现加减分数。

1.2设计内容及要求1.2.1 设计内容:(1)给甲乙两队分别设置一个分数控制按钮,此按钮有7种状态,分别为+5、+10、+15、-5、-10、-15,初始状态置数+50。

(2)设置一个切换状态按钮,可以分别切换每一种状态,然后每一种状态对相应的对加分。

(3)设置一个复位按钮,按下实现甲、乙队总分置0并即时显示。

(4)设置一个交换分按钮,用于交换甲乙比分。

1.2.2 设计要求:1、方案合理、正确,系统稳定、可靠。

2、软件设计要求尽可能精练、简短和运行可靠。

3、硬件电路要求简单明了,以节约成本。

1.3 按钮设置本设计的宗旨是用最少的按键实现最多的功能。

设计中一共用到了9个按钮,分别为:清零按钮、甲的加分减分按钮,乙的加分减分按钮,切换状态按钮和交换比分按钮。

每个按钮的功能如下:控制甲的按钮:实现+5、+10、+15、-5、-10、-15功能;控制乙的按钮:实现+5、+10、+15、-5、-10、-15功能;切换按钮:实现甲乙的各种状态的切换;切换比分按钮:交换甲乙的比分;清零按钮:实现甲乙比分清零;第2章总体方案设计2.1 总体系统框图此次设计80C51单片机为核心,配以一定的外围电路和软件,以实现比赛计分器的功能。

利用8个8段共阴级数码管显示器.采用动态显示输出比分,用户信息输入则采用4×4矩阵式键盘。

用一片单片机可满足本设计的输入输出。

EDA课程设计——篮球球比赛计分器_2

EDA课程设计——篮球球比赛计分器_2

<<电子设计自动化EDA技术>>课程设计报告题目: 篮球比赛记分牌姓名:院系:专业:学号:指导教师:完成时间: 年月日目录1 课程设计题目`内容与要求………………………1.1 设计内容1.2 具体要求2系统设计…………………………2.1 设计思路2.2 系统原理3 系统实现……………………………………………4 系统仿真……………………………………………5硬件验证(操作)说明………………………………6 总结…………………………………………………7参考书目……………………………………………一、课程设计题目、内容与要求1.1课程设计的题目: 篮球比赛记分牌1、1.2课程设计内容:2、根据比赛实际情况记录两队得分, 罚球进的1分, 进球的2分;3、记分牌要具有纠错功能, 能减1分、2分功能;4、利用3个译码显示管输出比赛的分;二、系统设计2.1设计思路:篮球比赛记分牌是记录两队比赛的得分情况, 并能够进行纠错功能;根据系统设计的要求, 篮球记分牌的电路原理框图如下:2.2 系统原理与设计说明系统各个模块的功能如下:1.D触发器电路模块实现翻转功能当出错时, 输出为1, 使电路回到上一个正确的状态。

2.4为二进制全加器电路模块实现加法计数功能。

3、移位寄存器电路模块保存比赛两队得分情况的4个相邻状态, 出错时将调用上一个正确状态。

4.二选一数据选择器电路模块用来控制移位寄存器5. LED数码管驱动电路模块三、系统实现各模块电路的源程序如下:1、D触发器电路模块及程序:set输入(Q=1), 清零应该可以用复位键reset吧(Q=0)。

library ieee;use ieee.std_logic_1164.all;entity sync_rsdff isport(d,clk : in std_logic;set : in std_logic;reset: in std_logic;q,qb : out std_logic);end sync_rsdff;architecture rtl_arc of sync_rsdff isbeginprocess(clk)beginif (clk'event and clk='1') thenif(set='0' and reset='1') thenq<='1';qb<='0';elsif (set='1' and reset='0') thenq<='0';qb<='1';elseq<=d;qb<=not d;end if;end if;end process;end rtl_arc;移位寄存器模块电路及程序:library IEEE;use IEEE.std_logic_1164.all;entity shft_reg isport (DIR : in std_logic;CLK : in std_logic;CLR : in std_logic;SET : in std_logic;CE : in std_logic;LOAD : in std_logic;SI : in std_logic;DATA : in std_logic_vector(3 downto 0);data_out : out std_logic_vector(3 downto 0) );end shft_reg;architecture shft_reg_arch of shft_reg issignal TEMP_data_out : std_logic_vector(3 downto 0);beginprocess(CLK)beginif rising_edge(CLK) thenif CE = '1' thenif CLR = '1' thenTEMP_data_out <= "0000";elsif SET = '1' thenTEMP_data_out <= "1111";elsif LOAD = '1' thenTEMP_data_out <= DATA;elseif DIR = '1' thenTEMP_data_out <= SI & TEMP_data_out(3 downto 1);elseTEMP_data_out <= TEMP_data_out(2 downto 0) & SI;end if;end if;end if;end if;end process;data_out <= TEMP_data_out;end architecture;3.二选一数据选择器电路模块及程序:entity mux isport(do,d1:in bit;sel:in bit;q:out bit);end mux;architecture a of mux isbeginq<=(do and sel)or(not sel and d1);end a;4.加法计数器的电路模块及程序:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY add4 ISPORT(a1,a2,a3,a4:IN STD_LOGIC;b1,b2,b3,b4:IN STD_LOGIC;sum1,sum2,sum3,sum4:OUT STD_LOGIC;cout4:OUT STD_LOGIC);END add4;ARCHITECTURE add_arc OF add4 ISSIGNAL cout1,cout2,cout3:STD_LOGIC;COMPONENT halfaddPORT(a,b:IN STD_LOGIC;sum,hcarry:OUT STD_LOGIC);END COMPONENT;COMPONENT fulladdPORT(in1,in2,cin:STD_LOGIC;fsum,fcarry:OUT STD_LOGIC);END COMPONENT;BEGINu1:halfadd PORT MAP(a=>a1,b=>b1,sum=>sum1,hcarry=>cout1);u2:fulladd PORT MAP(in1=>a2,in2=>b2,cin=>cout1,fsum=>sum2,fcarry=>cout2);u3:fulladd PORT MAP(in1=>a3,in2=>b3,cin=>cout2,fsum=>sum3,fcarry=>cout3);u4:fulladd PORT MAP(in1=>a4,in2=>b4,cin=>cout3,fsum=>sum4,fcarry=>cout4);END add_arc;5.七段译码电路及程序:library ieee;use ieee.std_logic_1164.all;entity deled isport(datain:in std_logic_vector(3 downto 0);qout:out std_logic_vector(6 downto 0));end deled;architecture func of deled isbeginprocess(datain)beginif datain= "0000" then qout<="1111110";elsif datain= "0001" then qout<="0110000";elsif datain= "0010" then qout<="1101101";elsif datain= "0011" then qout<="1111001";elsif datain= "0100" then qout<="0110011";elsif datain= "0101" then qout<="1011011";elsif datain= "0110" then qout<="1011111";elsif datain= "0111" then qout<="1110000";elsif datain= "1000" then qout<="1111111";elsif datain= "1001" then qout<="1111011";else null;end if;end process;end func;四、系统仿真1.D触发器电路模块仿真波形:2.移位寄存器模块电路仿真波形:3.二选一数据选择器电路模块仿真波形:4.加法计数器的电路模块仿真波形:5.七段译码电路仿真波形:五﹑硬件验证说明这次设计采用的硬件电路有芯片EP1K10TC100-3,实验板上标准时钟电路、LED 显示等, 六、总结七、参考书目[1]《PLD与数字系统设计》李辉西安电子科技大学出版社 2005[2]《EDA技术及可编程逻辑器件应用实训》沈明山北京科学出版社 2004[3]《VHDL数字系统设计与高层次综合》林敏方颖立著北京: 电子工业出版社2002[4]《VHDL程序设计》曾繁泰陈美金著北京: 清华大学出版社 2001[5]《EDA技术实验与课程设计》曹昕燕周风臣清华大学出版社 2005[6]《PLD器件与EDA技术》李冬梅北京广播学院出版社2000。

简单设计篮球积分计时器

简单设计篮球积分计时器

目录一、前言二、设计任务与要求三、总体方案四、单元模块设计五、程序六、操作说明七、设计总结八、参考文献九、附:(仿真电路图)一、前言1、引言在当今社会随着物质生活的提高,人们对精神文化的需求也越来越高。

篮球竞技就是其中非常重要的一个方面,而计时记分系统在竞赛中更是重中之重。

在篮球比赛中,总的倒计时是必需的,规定为12 min。

除此以外,为了加快比赛节奏,还规定了队员的持球时间不能超过24 s,否则就犯规。

这里所设计的计时器涵盖了以上要求,可用于篮球比赛中。

用于对总时间和持球时间24 s 的限制。

2、设计简介本设计是采用AT89C52单片机设计的一个用于篮球比赛的篮球计时计分器。

本设计采用定时器T0中断进行计时,显示部分分为计时显示和计分显示两部分,均采用LCD液晶显示屏显示,用于显示整个比赛赛程的比赛时间和两队的比分情况。

采用六个键盘和外部中断0实现输入功能,用于调节时间开始与暂停、比赛过程中计分、比赛时间结束以后报警及复位等功能。

本设计采用AT89C52单片机作为核心部件,整个系统结构简单、实用性强、操作简便、具有低功耗,可靠性,安全性以及低成本等特点,该设计方案完全满足篮球计分器的设计要求。

现在篮球比赛计时器的设计大都比较的复杂,所用芯片太多,造成整体的价格提高,而且软件设计比较的复杂。

导致性价比不是很高,很难得到广泛的推广。

我所设计的这个篮球比赛计时器一改他们的缺点,硬件比较的简单,软件也很容易。

因此,实用性比较大。

二、设计任务与要求1、设计任务:设计并制作一个用1602LCD作为显示篮球比分的记分牌,记分牌上显示A、B对号,两队的比分,能实现每次加、减分和时间开始暂停等操作,显示时间、时间精确到1S。

2、设计要求:(一)采用单片机控制,响应迅速,判别精确;主控台面上有按键控制,可同时对比赛时的分数显示进行加分减分,能显示整个赛程的比赛时间,暂停时间和比赛的节数。

(二)在比赛的过程中能够随时刷新各队在整个赛程中的比分,通过按键输入比分,显示在数码管上;按键分别为加1分、减1分键。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

简易比赛计分器
一、序言
随着单片机在各个领域中的广泛应用,许多用单片机作控制的比赛计时计分系统也应运产生,如用单片机控制LCD液晶显示计时计分器,用单片机控制LED七段显示器计时计分器等。

STC89C58RD+编程OCMJ4*8C-8显示模块(led键盘管理芯片)控制LED七段数码管作显示的比赛时间,利用点阵图形128X64 LCD的良好人机界面来显示球队的名称及比分。

这个系统具有赛程定时设置、赛程时间暂停、及时刷新甲、乙队双方的成绩及赛后成绩暂存等等功能。

它具有价格低廉、性能稳定、功耗低、操作方便且易携带等特点。

主要器件的介绍:
1、STC89C58RD+单片机的简介
STC89C系列的单片机是高速/低功耗的新一代8051单片机,最高工作频率可分别达到25MHZ~50MHZ。

STC89C系列的单片机有较宽的工作电压,此外,STC89C系列的单片机在完全兼容8052芯片(在标准8051基础上增加了T2定时器和128字节内部RAM)的基础上,新增了许多实用功能。

STC89C58RD+是一种低功耗高性能的8位单片机,STC89C58RD+系列是全球第一片掉电模式时典型功耗小于0.1uA的8051单片机。

片内带有一个32k字节的F1ash可编擦除只读存储器(PEROM),它采用了CMOS工艺和STC(宏晶)公司的高密度非易失性存储器(NURAM)技术,而且其输出引脚和指令系统和MCU-51系列单片机兼容。

片内的Flash
存储器允许在系统内可改编程序或用常规的非易失性的存储器编程器来编程。

同时它具有三级程序存储器保密的性能。

在众多的51系列单片机中,要算STC(宏晶)公司的STC89C58RD+最实用,因为它不仅和MCU-51系列单片机指令、管脚完全兼容,而且它支持ISP(在系统可编程),无需高价的编程器,可轻松通过串口实现程序下载和远程升级,加上其片内的32k程序存储器是Flash工艺的,这种工艺的存储器用户可以用电的方式瞬间擦除、改写。

此外,它有1280字节的RAM,8K以上的E2PROM,内置看门狗。

在ISP下载编程时就可以任意设置6时钟/机器周期或12时钟/机器周期,STC单片机ISP引导码出厂时已有,不需要用户烧录。

该单片机对开发设备要求很低,开发时间也大大缩短。

2、OCMJ4*8C-8显示模块的简介
C系列中文模块可以显示字母、数字符号、中文字型及图形,有绘图及文字画面混合显示功能。

提供三种控制接口,分别是8位微处理器接口,4位微处理器接口及串行接口。

所有的功能,包含显示RAM,字型产生器,都包含在一个芯片里面,只要一个最小的微处理系统,摩洛哥以方便操作模块。

内置2M-位中文字型ROM(CGRAM)总共提供8192个中文字形(16*16点阵),16K-位半宽字型ROM(HCGROM)总共提供126个符号字型(16*8点阵),64*16-位字型产生RAM (CGRAM),另外绘图显示画面提供一个64*256点的绘图区域(GDRAM),可以和文字画面混合和显示。

提供多功能指令:画面清除、光标归位、显示打开/关闭、光标显示/隐藏、显示字符闪烁、光标
移位、显示移位、垂直画面卷动、反白显示、待命模式。

主要参数:
工作电压(VDD):4.5~5.5V
逻辑电平:2.7~5.5
LCD驱动电压(VO):0~7V
二、系统功能及使用方式的描述
1、设计任务及设备
设计任务:设计并制作一个用于比赛计时计分器,实现能用七段式LED显示各种比赛时间,LCD显示比赛比分,能实现每次+1分、+2分、+3分操作
设备:AT89S52基本实验单元、计算机设备系统、键盘操作单元、数码显示单元、LCM模块。

2、设计要求
(1)采用单片机主控,响应迅速,判别精确;主控台面上有键盘控制,可同时对比赛时的分数显示器进行加分减分能记录整个赛程的比赛时间,并能修改比赛时间、暂停比赛时间;
(2)在比赛的过程中能够随时刷新各队在整个赛程中的比分,通过键盘输入比分,显示在LCD上;开关分别为加1、加2、加3、减1和改变当前记分球队功能键;
(3)在比赛的过程中如果交换比赛场地时,能交换各队的队比分的位置;
(4) 设置倒计时时间需要重新设置倒计时时间,可按“倒计时设置”键,屏幕显示“10”起始倒计时时间,可通过“倒计时设置”键对倒计时时间进行重设,设定完后按下复位键进行确认生效;
(5)比赛的倒计时时间可以任意设置,比赛倒计时的时间到有声音提示,比赛时间结束时,能发出报警指令,并且可以中途提前退出倒计时;
3、所需条件和要求:
(1)七段式LED显示译码电路原理
(2)加法电路原理
(3)进位电路原理
(4)lcd显示原理
4、系统构成框图
基于单片机系统的比赛计时计分器的系统构成框图如下图所示:
比赛计时计分器的系统图
以篮球比赛为例篮球计时计分器程序流程图:
计时计分器程序流程图
三.小组成员分工合作计划
段倩倩负责元器件采购,硬件焊接及调试。

樊伟良负责PCB板设计,及后期软件编写调试。

徐菲负责文档组织,功能划分,报告撰写。

相关文档
最新文档