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

上传人:b****6 文档编号:7584536 上传时间:2023-01-25 格式:DOCX 页数:29 大小:466.10KB
下载 相关 举报
AVR单片机Atmega48程序设计报告比赛计时计分器.docx_第1页
第1页 / 共29页
AVR单片机Atmega48程序设计报告比赛计时计分器.docx_第2页
第2页 / 共29页
AVR单片机Atmega48程序设计报告比赛计时计分器.docx_第3页
第3页 / 共29页
AVR单片机Atmega48程序设计报告比赛计时计分器.docx_第4页
第4页 / 共29页
AVR单片机Atmega48程序设计报告比赛计时计分器.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

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

《AVR单片机Atmega48程序设计报告比赛计时计分器.docx》由会员分享,可在线阅读,更多相关《AVR单片机Atmega48程序设计报告比赛计时计分器.docx(29页珍藏版)》请在冰豆网上搜索。

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

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

1、设计目的

本设计是基于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按钮实现,并通过蜂鸣器表示是否操作成功。

2、设计思路

本设计中由AVR核心板、数码管、蜂鸣器、3乘3矩阵键盘四部分组成。

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

本设计中的程序主要分为两个部分,即暂停计时时的显示与开始计时时的显示。

暂停计时时与开始计时时都可以对每队加分,初始化。

3、设计电路图

图一接口模块电路

图二蜂鸣器电路

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

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

4、设计过程

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

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

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

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

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

6、在左边的树形结构窗内,选择“工程管理-基本设置-HC595_165”,设置如下:

工作模式:

端口选择:

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

Uint8u8_Number

void

DrawLED

void

Uint8u8_Number,Uint8u8_Point

void

SelectLED函数实现:

voidSelectLED(uint8u8_Number)

{

//HC595_165_Write595Byte(0xff);

//Select595;

//DeSelect595;

DrawLED(255,0);

switch(u8_Number)

{

case0:

A2_SetLow;

A1_SetLow;

A0_SetLow;

break;

case1:

A2_SetLow;

A1_SetLow;

A0_SetHigh;

break;

case2:

A2_SetLow;

A1_SetHigh;

A0_SetLow;

break;

case3:

A2_SetLow;

A1_SetHigh;

A0_SetHigh;

break;

case4:

A2_SetHigh;

A1_SetLow;

A0_SetLow;

break;

case5:

A2_SetHigh;

A1_SetLow;

A0_SetHigh;

break;

case6:

A2_SetHigh;

A1_SetHigh;

A0_SetLow;

break;

case7:

A2_SetHigh;

A1_SetHigh;

A0_SetHigh;

break;

}

}

DrawLED函数实现:

VoidDrawLED(uint8u8_Number,uint8u8_Point)

{

uint8u8_Char=0;

switch(u8_Number)

{

case0:

u8_Char=0xc0;

break;

case1:

u8_Char=0xf9;

break;

case2:

u8_Char=0xa4;

break;

case3:

u8_Char=0xb0;

break;

case4:

u8_Char=0x99;

break;

case5:

u8_Char=0x92;

break;

case6:

u8_Char=0x82;

break;

case7:

u8_Char=0xf8;

break;

case8:

u8_Char=0x80;

break;

case9:

u8_Char=0x90;

break;

case11:

u8_Char=0xff;

break;

case255:

u8_Char=0xFF;

break;

}

if(u8_Point==1)

{

CLRBIT(u8_Char,BIT7);

}

HC595_165_Write595Byte(u8_Char);

Select595;

DeSelect595;

}

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

使用情况

功能选择

输入输出

名称

置高

置低

测试

引脚0

使用

IO

输出

S1

S1_DeSelect

S1_Select

引脚1

使用

IO

输入

R1

R1_Test

引脚2

使用

IO

输出

S2

S2_DeSelect

S2_Select

引脚3

使用

IO

输入

R2

R2_Test

引脚4

使用

IO

输出

S3

S3_DeSelect

S3_Select

引脚5

使用

IO

输入

R3

R3_Test

10、增加功能宏SelectS1、SelectS2、SelectS3设置如下:

功能宏名称

功能宏实现

SelectS1

S1_Select;S2_DeSelect;S3_DeSelect;

SelectS2

S1_DeSelect;S2_Select;S3_DeSelect;

SelectS3

S1_DeSelect;S2_DeSelect;S3_Select;

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

使用情况

功能选择

输入输出

名称

置高

置低

使用

IO

输出

Beep

Beep_Shut

Beep_Open

12、在左边的树形结构窗内,选择“工程管理-用户程序-Main_Logic.c”,在程序编写窗口内输入程序。

13、在左边的树形结构窗内,选择“工程管理-基本操作-生成下载”,点击“生成程序文件”按钮。

14、程序编译成功后,接通硬件实验平台电源,将目标文件下载到硬件实验平台。

四、设计程序

voidMain_Logic(void)

{

/*

**********************

定义局部变量

**********************

*/

uint8a,b,c,d,e,f,g,h,k,i,j;

/*

**************************

初始化输入管脚

**************************

*/

/*

********************************

初始化项目中用到的其它硬件和变量

********************************

*/

Loop5:

for(i=0;i<10;i++)

{

for(j=0;j<5;j++)

{

SelectLED(0);

DrawLED(i,0);

delay_1ms();

SelectLED

(1);

DrawLED(i,0);

delay_1ms();

SelectLED

(2);

DrawLED(i,0);

delay_1ms();

SelectLED(3);

DrawLED(i,0);

delay_1ms();

SelectLED(4);

DrawLED(i,0);

delay_1ms();

SelectLED(5);

DrawLED(i,0);

delay_1ms();

SelectLED(6);

DrawLED(i,0);

delay_1ms();

SelectLED(7);

DrawLED(i,0);

delay_1ms();

Beep_Open;

delay_10ms();

Beep_Shut;

}

}

a=0;

b=11;

c=0;

d=11;

e=0;

f=0;

g=0;

h=4;

/*

*************************

后台主循环

*************************

*/

while

(1)

{

/*

*****************************

在这里完成自己的项目逻辑

*****************************

*/

/*定时显示*/

Loop8:

for(k=0;k<1;)

{

SelectLED(0);

DrawLED(h,0);

delay_1ms();

SelectLED

(1);

DrawLED(g,0);

delay_1ms();

SelectLED

(2);

DrawLED(f,0);

delay_1ms();

SelectLED(3);

DrawLED(e,0);

delay_1ms();

SelectLED(4);

DrawLED(d,0);

delay_1ms();

SelectLED(5);

DrawLED(c,0);

delay_1ms();

SelectLED(6);

DrawLED(b,0);

delay_1ms();

SelectLED(7);

DrawLED(a,0);

delay_1ms();

SelectS1;

R1_Test

{

}

else

{

delay_20ms();

R1_Test

{

}

else

{

Beep_Open;

delay_300ms();

Beep_Shut;

c++;

gotoLoop6;

}

}

R2_Test

{

}

else

{

delay_20ms();

R2_Test

{

}

else

{

Beep_Open;

delay_100ms();

Beep_Shut;

delay_100ms();

Beep_Open;

delay_100ms();

Beep_Shut;

c=c+2;

gotoLoop6;

}

}

R3_Test

{

}

else

{

delay_20ms();

R3_Test

{

}

else

{

Beep_Open;

delay_30ms();

delay_30ms();

Beep_Shut;

delay_30ms();

delay_30ms();

Beep_Open;

delay_30ms();

delay_30ms();

Beep_Shut;

delay_30ms();

delay_30ms();

Beep_Open;

delay_30ms();

delay_30ms();

Beep_Shut;

c=c+3;

gotoLoop6;

}

}

SelectS2;

R1_Test

{

}

else

{

delay_20ms();

R1_Test

{

}

else

{

Beep_Open;

delay_300ms();

Beep_Shut;

a++;

gotoLoop7;

}

}

R2_Test

{

}

else

{

delay_20ms();

R2_Test

{

}

else

{

Beep_Open;

delay_100ms();

Beep_Shut;

delay_100ms();

Beep_Open;

delay_100ms();

Beep_Shut;

a=a+2;

gotoLoop7;

}

}

R3_Test

{

}

else

{

delay_20ms();

R3_Test

{

}

else

{

Beep_Open;

delay_30ms();

delay_30ms();

Beep_Shut;

delay_30ms();

delay_30ms();

Beep_Open;

delay_30ms();

delay_30ms();

Beep_Shut;

delay_30ms();

delay_30ms();

Beep_Open;

delay_30ms();

delay_30ms();

Beep_Shut;

a=a+3;

gotoLoop7;

}

}

SelectS3;

R1_Test

{

}

else

{

delay_20ms();

R1_Test

{

}

else

{

Beep_Open;

delay_200ms();

Beep_Shut;

gotoLoop3;

}

}

R3_Test

{

}

else

{

delay_20ms();

R3_Test

{

}

else

{

gotoLoop5;

}

}

}

/*A队定时得分累计*/

for(b=0;b<10;b++)

{

if(a>9)a=a-10;

for(;a<10;)

{

gotoLoop8;

Loop7:

if(k<1)a=a;

}

if(b==11)b=0;

}

/*B定时队得分累计*/

for(d=0;d<10;d++)

{

if(c>9)c=c-10;

for(;c<10;)

{

gotoLoop8;

Loop6:

if(k<1)c=c;

}

if(d==11)d=0;

}

/*A队计时得分累计*/

for(b=0;b<10;b++)

{

if(a>9)a=a-10;

for(;a<10;)

{

gotoLoop4;

Loop2:

if(k<1)a=a;

}

if(b==11)b=0;

}

/*B队计时得分累计*/

for(d=0;d<10;d++)

{

if(c>9)c=c-10;

for(;c<10;)

{

gotoLoop4;

Loop1:

if(k<1)c=c;

}

if(d==11)d=0;

}

/*倒数计时*/

for(h=3;h<10;h--)

{

for(g=9;g<10;g--)

{

for(f=5;f<10;f--)

{

for(e=9;e<10;)

{

gotoLoop3;

Loop4:

if(k<1)e=e;

}

}

}

}

/*计时显示*/

Loop3:

for(k=0;k<1;)

{

for(i=0;i<112;i++)

{

SelectLED(0);

DrawLED(h,0);

delay_1ms();

SelectLED

(1);

DrawLED(g,0);

delay_1ms();

SelectLED

(2);

DrawLED(f,0);

delay_1ms();

SelectLED(3);

DrawLED(e,0);

delay_1ms();

SelectLED(4);

DrawLED(d,0);

delay_1ms();

SelectLED(5);

DrawLED(c,0);

delay_1ms();

SelectLED(6);

DrawLED(b,0);

delay_1ms();

SelectLED(7);

DrawLED(a,0);

delay_1ms();

SelectS1;

R1_Test

{

}

else

{

delay_20ms();

R1_Test

{

}

else

{

Beep_Open;

delay_300ms();

Beep_Shut;

c++;

e--;

gotoLoop1;

}

}

R2_Test

{

}

else

{

delay_20ms();

R2_Test

{

}

else

{

Beep_Open;

delay_100ms();

Beep_Shut;

delay_100ms();

Beep_Open;

delay_100ms();

Beep_Shut;

c=c+2;

e--;

gotoLoop1;

}

}

R3_Test

{

}

else

{

delay_20ms();

R3_Test

{

}

else

{

Beep_Open;

delay_30ms();

delay_30ms();

Beep_Shut;

delay_30ms();

delay_30ms();

Beep_Open;

delay_30ms();

delay_30ms();

Beep_Shut;

delay_30ms();

delay_30ms();

Beep_Open;

delay_30ms();

delay_30ms();

Beep_Shut;

c=c+3;

e--;

gotoLoop1;

}

}

SelectS2;

R1_Test

{

}

else

{

delay_20ms();

R1_Test

{

}

else

{

Beep_Open;

delay_300ms();

Beep_S

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 工学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1