篮球比赛计时记分电路Proteus仿真说明

篮球比赛计时记分电路Proteus仿真说明,第1张

        如图所示为篮球比赛计时记分电路的Proteus仿真图。该仿真使用ATmega128作为控制核心、LGM12864作为计时记分器的显示装置、矩阵键盘作为输入设备实现篮球比赛的计时记分功能。

        ATmega128是ATMEL公司的 8位系列单片机的最高配置的一款单片机,稳定性极高,被广泛的应用在了汽车电车管理、门禁系统、遥控器、智能家居、以及计量电表等领域。Atmega128A是AVR8位微处理器芯片,采用先进的RISC结构,采用AVR内核,拥有16MHz工作频率,工作电压为2.7-5.5V。

        仿真运行后会利用LGM12864显示比赛时间、两队分数及比赛的小节数等。显示部分采用中文显示。

        按下开始按键后比赛时间会开始进行倒计时。在此期间可以对A队和B队的比赛分数进行修改。

        按下暂停后比赛时间停止倒计时,此时可以按下设定按钮对比赛时间进行修改。设定按钮按下后对应的修改位置会进行闪烁提示。设定按钮分别可以修改比赛时间的分钟和秒钟,修改完秒数据后,再次按下设定按钮,就可以退出设定模式。复位按键可以比赛设计和比赛分数进行复位。

        程序使用ICCAVR7.22进行开发。部分程序代码如下:

void main(void)
{
    uint key_store=0x01;
	DDRC=0x0f;                        			//PC口上拉电阻使能
    PORTC=0xf0;      
	DDRB=0xff;                        			//PB口上拉电阻使能
    PORTB=0xff;  
    system_init();                              //系统初始化,设置IO口属性
	delay_nms(100);                             //延时100ms
	//************************************************************
	LCDchushihua();								//液晶显示器初始化
  	LCDQingPing();								//液晶显示器清屏
	DDRB|=0x20 ;								
	Display(); 									//显示初始化函数
	timer1_init();								//定时器初始化
	TIMSK=0x04;									//定时器中断设置
	SEI();										//开中断
	Display_Score(scorea,scoreb);				//显示初始分数
	vision_tab();								//显示比赛小节数		
	beer0();			
	while(1)
	{
	 		
	 		if(update==1)						//如果更新标志位
			{
			 	update = 0 ;					//清除标志位
				if(time_fen==0&byte_tab==4)		//如果比赛省最后一分钟,且为最后一节
				{
				 Display_Number(time_miao,cnt); //进行快速倒计时
				}else
				{
				 Display_Number(time_fen,time_miao);			//其他情况下显示正常时间倒计时
				}
				//delay_nms(100);                                //延时100ms
				//Display_Number(time_fen,time_miao,byte_tab);
			}
	 		keyboardscan();                         		  //键盘扫描,看是否有按键按下
    		if(key!=0xff&flag==0)                        	  //如果有按键按下,则显示该按键键值0~15
      		{    
				 flag = 1 ;
				 switch(key)								  //根据按键对比赛分数、比赛时间进行调整
				 {
				  case 1 : if(start==1){if(scoreb<200)scoreb=scoreb+1;else scoreb = 0 ;} Display_Score(scorea,scoreb);break ;//B队分数+1
				  case 2 : if(start==1){if(scoreb<200)scoreb=scoreb+2;else scoreb = 0 ;} Display_Score(scorea,scoreb);break ;//B队分数+2
				  case 3 : if(start==1){if(scoreb<200)scoreb=scoreb+3;else scoreb = 0 ;} Display_Score(scorea,scoreb);break ;//B队分数+3
				  case 4 : if(start==0){								   //对时间进行加调整
				  if(mode==1)
				  {
				   if(time_fen<59) time_fen++;else time_fen = 0 ;
				  }else if(mode==2)
				  {
				   if(time_miao<59) time_miao++;else time_miao = 0 ;
				  }
				  }
				  break ;//
				  case 5 : if(start==1){if(scorea<200)scorea=scorea+1;else scorea = 0 ;}Display_Score(scorea,scoreb); break ;//A队分数+1
				  case 6 : if(start==1){if(scorea<200)scorea=scorea+2;else scorea = 0 ;}Display_Score(scorea,scoreb); break ;//A队分数+2
				  case 7 : if(start==1){if(scorea<200)scorea=scorea+3;else scorea = 0 ;}Display_Score(scorea,scoreb); break; //A队分数+3
				  case 8 : 
				  if(start==0)
				  {
				  if(mode==1)
				  {
				   if(time_fen>0) time_fen--;else time_fen = 59 ;
				  }else if(mode==2)
				  {
				   if(time_miao>0) time_miao--;else time_miao = 59 ;
				  } 
				  }break ; //时间进行减调整
				  case 9 : start = 1 ;mode=0; break ;//开始按键
				  case 10 : if(start!=1){beer0();start = 0 ; time_miao=0;time_fen=2;byte_tab=1;scorea=0;scoreb=0;}Display_Score(scorea,scoreb);vision_tab();
				  break ;//复位按键,只有在暂停状态下可进行复位 *** 作
				  case 0 : start = 0 ;break ;//暂停按键
				  case 11 : if(start==0){if(mode<2)mode++;else mode = 0 ;}break ;//模式选择,在暂停模式下才能对时间进行调整
				 }
			}else if(key==0xff)
			{
			 flag = 0 ;
			}
	}
}

基于Atmega128单片机的LCD12864中文显示篮球比赛计时记分器仿真电路-单片机文档类资源-CSDN文库https://download.csdn.net/download/xitianqu/85297696

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/874895.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-13
下一篇 2022-05-13

发表评论

登录后才能评论

评论列表(0条)

保存