收藏 分销(赏)

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

上传人:二*** 文档编号:4511219 上传时间:2024-09-26 格式:DOC 页数:15 大小:568KB
下载 相关 举报
AVR单片机Atmega48程序设计报告——比赛计时计分器.doc_第1页
第1页 / 共15页
本文档共15页,全文阅读请下载到手机保存,查看更方便
资源描述
一、 设计目的 本设计是基于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数码管显示器显示,每队得分显示两位数,显示X围为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、 在左边的树形结构窗内,选择“工程管理-基本操作-功能描述&开发日志”,进行项目功能的描述。 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 Uint8 u8_Number void DrawLED void Uint8 u8_Number,Uint8 u8_Point void SelectLED函数实现: - 15 - / 15 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函数实现: VoidDrawLED(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; } 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、 程序编译成功后,接通硬件实验平台电源,将目标文件下载到硬件实验平台。 四、设计程序 void Main_Logic(void) { /* ********************** 定义局部变量 ********************** */ uint8 a,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++; goto Loop6; } } 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; goto Loop6; } } 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; goto Loop6; } } SelectS2; R1_Test { } else { delay_20ms(); R1_Test { } else { Beep_Open; delay_300ms(); Beep_Shut; a++; goto Loop7; } } 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; goto Loop7; } } 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; goto Loop7; } } SelectS3; R1_Test { } else { delay_20ms(); R1_Test { } else { Beep_Open; delay_200ms(); Beep_Shut; goto Loop3; } } R3_Test { } else { delay_20ms(); R3_Test { } else { goto Loop5; } } } /*A队定时得分累计*/ for (b=0;b<10;b++) { if(a>9) a=a-10; for (;a<10;) { goto Loop8; 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;) { goto Loop8; 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;) { goto Loop4; 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;) { goto Loop4; 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;) { goto Loop3; 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--; goto Loop1; } } 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--; goto Loop1; } } 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--; goto Loop1; } } SelectS2; R1_Test { } else { delay_20ms(); R1_Test { } else { Beep_Open; delay_300ms(); Beep_Shut; a++; e--; goto Loop2; } } 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; e--; goto Loop2; } } 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; e--; goto Loop2; } } SelectS3; R2_Test { } else { delay_20ms(); R2_Test { } else { Beep_Open; delay_200ms(); Beep_Shut; goto Loop8; } } R3_Test { } else { delay_20ms(); R3_Test { } else { goto Loop5; } } } delay_1ms(); delay_1ms(); delay_1ms(); delay_1ms(); delay_1ms(); delay_1ms(); e--; goto Loop4; } /* **************************************** 以下语句为喂狗程序,大部分工程都不应删除 **************************************** */ #ifdef Per_WDT wdt_reset(); #endif } } 五、程序流程
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服