AVR单片机Atmega48程序设计报告——比赛计时计分器

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

一、设计目的

本设计是基于ATMEGA48单片机的比赛计时计分器,利用8路7段LED数码管作为显示器件,采用3乘3矩阵式键盘作为输入,主要用于各种体育比赛记录分数,在此设计中共接入了2个四位一体7段LED数码管显示器,第一个显示器为一个倒数计时,第二个显示器为两队得分。

本设计中的倒数计时器时间为40分钟,可以进行开始计时、暂停计时的操作,分别通过S3_1、S3_2按钮实现,并通过蜂鸣器表示是否操作成功,时间通过1个四位一体7段LED 数码管显示器显示,前两位为分钟数,后两位为秒数。

本设计中可以对两队得分进行加1分、加2分、加3分操作,分别通过S1_1、S1_2、S1_3、S2_1、S2_2、S2_3按钮实现,并通过蜂鸣器的不同工作方式表示是否操作成功与所加的分值。得分通过1个四位一体7段LED数码管显示器显示,每队得分显示两位数,显示范围为0~99分。

本设计可以进行清零操作,清零后倒计时恢复40分钟,得分均为0,通过S3_3按钮实现,并通过蜂鸣器表示是否操作成功。

二、设计思路

本设计中由AVR核心板、数码管、蜂鸣器、3乘3矩阵键盘四部分组成。电路中PORT_B 端口连接数码管,显示八位,完成倒计时与记录每队得分,PORT_C与3乘3矩阵键盘相连,由按键控制完成初始化、开始与暂停计时以及加分的功能,PORT_D与蜂鸣器端口相连,根据所加得分的不同,开始与暂停计时,初始化,蜂鸣器有不同的应答方式。

本设计中的程序主要分为两个部分,即暂停计时时的显示与开始计时时的显示。暂停计时时与开始计时时都可以对每队加分,初始化。

三、设计电路图

图一接口模块电路

图二蜂鸣器电路

图三 8路7段LED数码管电路

图四 3*3矩阵控制键盘电路

四、设计过程

1、关闭硬件实验平台电源。

2、将下载器与主控单片机的下载口P5相连。

3、使用3条2*5排线连接P10和P14端口、P11和P19端口、P13和P4端口,从电路图上分析,PB口与LED显示器相连,PC口与3*3矩阵按键相连,PD口与蜂鸣器相连。

4、打开智能开发环境,新建一个新的工程项目。

5、在左边的树形结构窗内,选择“工程管理-基本操作-功能描述&开发日志”,进行项目功能的描述。

工作模式:端口选择:595片选择:595数据输出:时钟:HC595 PORTB BIT0 BIT2 BIT1

7、在左边的树形结构窗内,选择“工程管理-端口设置-端口B”,将引脚3-引脚5设置如下:

使用情况功能选择输入输出名称置高置低

引脚3 使用IO 输出A0 A0_SetHigh A0_SetLow 引脚4 使用IO 输出A1 A1_SetHigh A1_SetLow 引脚5 使用IO 输出A2 A2_SetHigh A2_SetLow

8、增加全局函数SelectLED和DrawLED设置如下:

返回类型函数参数参数类型SelectLED void Uint8 u8_Number void DrawLED void Uint8 u8_Number,Uint8 u8_Point void SelectLED函数实现:

void SelectLED(uint8 u8_Number) {

//HC595_165_Write595Byte(0xff); //Select595;

//DeSelect595;

DrawLED(255,0);

switch (u8_Number)

{

case 0:

A2_SetLow;

A1_SetLow;

A0_SetLow;

break;

case 1:

A2_SetLow;

A1_SetLow;

A0_SetHigh;

break;

case 2:

A2_SetLow;

A1_SetHigh;

A0_SetLow;

break;

case 3:

A2_SetLow;

A1_SetHigh; A0_SetHigh; break;

case 4:

A2_SetHigh; A1_SetLow; A0_SetLow; break;

case 5:

A2_SetHigh; A1_SetLow; A0_SetHigh; break;

case 6:

A2_SetHigh; A1_SetHigh; A0_SetLow; break;

case 7:

A2_SetHigh; A1_SetHigh; A0_SetHigh; break;

}

}

DrawLED函数实现:

Void DrawLED(uint8 u8_Number,uint8 u8_Point) {

uint8 u8_Char=0;

switch (u8_Number)

{

case 0:

u8_Char=0xc0;

break;

case 1:

u8_Char=0xf9;

break;

case 2:

u8_Char=0xa4;

break;

case 3:

u8_Char=0xb0;

break;

case 4:

u8_Char=0x99;

break; case 5:

u8_Char=0x92;

break;

case 6:

u8_Char=0x82;

break;

case 7:

u8_Char=0xf8;

break;

case 8:

u8_Char=0x80;

break;

case 9:

u8_Char=0x90;

break;

case 11:

u8_Char=0xff;

break;

case 255:

u8_Char=0xFF;

break;

}

if (u8_Point==1)

{

CLRBIT(u8_Char,BIT7);

}

HC595_165_Write595Byte(u8

_Char);

Select595;

DeSelect595;

}

相关文档
最新文档