单片机课程设计 八路抢答器(C语言)
- 格式:docx
- 大小:539.87 KB
- 文档页数:13
单片机八路抢答器课程设计一、课程目标知识目标:1. 让学生掌握单片机的基本原理,理解并运用I/O口进行输入输出控制。
2. 使学生了解抢答器的功能和工作原理,掌握其设计与实现方法。
3. 帮助学生掌握定时器/计数器的使用,以及在中断处理中的应用。
技能目标:1. 培养学生运用所学知识设计并实现单片机八路抢答器的实际操作能力。
2. 培养学生分析问题和解决问题的能力,提高编程和调试单片机系统的技能。
3. 培养学生的团队协作能力,提高沟通与表达技巧。
情感态度价值观目标:1. 培养学生对单片机及电子制作的兴趣,激发创新意识。
2. 培养学生具有实践操作中的安全意识,养成良好的实验习惯。
3. 培养学生面对挑战,勇于尝试,不断调整和优化设计方案的态度。
课程性质:本课程为实践性较强的课程,结合理论知识,以实际操作为核心。
学生特点:学生已具备一定的单片机基础知识和编程能力,具有较强的求知欲和动手能力。
教学要求:教师需引导学生主动探索,鼓励学生提出问题、解决问题,关注学生在实践中的个性化发展。
在教学过程中,将课程目标分解为具体的学习成果,以便进行有效的教学设计和评估。
二、教学内容1. 理论知识:- 单片机基础原理回顾:I/O口控制原理,中断系统原理。
- 定时器/计数器原理及其在抢答器中的应用。
- 抢答器工作原理及设计要求。
2. 实践操作:- 单片机硬件连接及电路设计。
- 编写抢答器程序,实现基本功能。
- 调试与优化:程序调试,硬件测试,故障排查。
3. 教学大纲:- 第一周:回顾单片机基础知识,讲解抢答器工作原理。
- 第二周:学习定时器/计数器应用,设计单片机I/O口控制电路。
- 第三周:分组讨论设计方案,编写程序,搭建硬件电路。
- 第四周:调试与优化,展示成果,总结经验。
4. 教材关联:- 理论知识:教材第3章单片机原理,第4章中断与定时器。
- 实践操作:教材第5章单片机接口技术,第6章单片机应用实例。
教学内容安排和进度根据课程目标和学生的学习情况调整,确保学生能够逐步掌握单片机八路抢答器的设计与实现。
#include<reg51.h>#define uchar unsigned char#define uint unsigned intsbit k1=P1^0;sbit k2=P1^1;sbit k3=P1^2;sbit k4=P1^3;sbit k5=P1^4;sbit k6=P1^5;sbit k7=P1^6;sbit k8=P1^7; //选手按键sbit beep=P3^6; //蜂鸣器uchar code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77}; //0-9代码(共阴极)uchar shiwei,gewei,xuanshou,count,i,second;uchar score1,score2,score3,score4,score5,score6,score7,score8;//选手1~8的分数uint t,m,n,a,a1,a2,a3,a4,a5,a6,a7,a8;void Timer(){TMOD|=0x01;TH0=0xd8; //初值55536,计数10000次,每次1US,总计10msTL0=0xf0;IE=0x82; //这里是中断优先级控制EA=1(开总中断),ET0=1(定时器0允许中断),这里用定时器0来定时TR0=1;}void tim(void) interrupt 1 using 1 //为定时中断TR0{TH0=0xd8; //重新赋值TL0=0xf0;count++;if(count==100) //100*10ms=1秒{count=0;second--; //秒减1}}void delay(uint z) //延时函数{uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);//延时1ms}void display (uchar shiwei,gewei,xuanshou) //显示函数{P2=0xfe; //打开显示时间十位的位选低电平有效1111 1110 P0=shiwei;//显示十位delay(5);P2=0xfd; //个位位选1111 1101P0=gewei;delay(5);P2=0xf7; //选手位选1111 0111P0=xuanshou;delay(5);}void dis(void)//调用显示函数{shiwei=tab[second/10];gewei=tab[second%10];xuanshou=tab[i];display (shiwei,gewei,xuanshou);}void init() //初始化函数{P2=0x04;//0000 0100P0=0x3f;//数码管共阴0011 1111显示0t=0;beep=0;//蜂鸣器i=0;second=29;score1=60;score2=60;score3=60;score4=60;score5=60;score6=60;score7=60;score8=60;a1=1;a2=1;a3=1;a4=1;a5=1;a6=1;a7=1;a8=1;}void main()//主函数{init();//调用初始化函数if(k==1){ m=0; if(k1==0) {delay(5);if(k1==0);while(!k1);beep=1;delay(500);beep=0;} // 违规抢答显示号码报警while(t){if(m==0) //开关,保证程序只执行一次{switch(t){case 1:{TR0=0;i=1;second=score1;beep=1;delay(500);beep=0;a1=0;a2=1;a3=1;a4=1;a5=1;a6=1;a7=1;a8=1;m=1;break; //有选手抢答时显示选手号码蜂鸣器响,时间为0,t和i对应}}} }if(k2==0) {delay(5);if(k1==0);while(!k1);t=2;beep=1;delay(500);beep=0;}if(k3==0) {delay(5);if(k1==0);while(!k1);t=3;beep=1;delay(500);beep=0;}if(k4==0) {delay(5);if(k1==0);while(!k1);t=4;beep=1;delay(500);beep=0;}if(k5==0) {delay(5);if(k1==0);while(!k1);t=5;beep=1;delay(500);beep=0;}if(k6==0) {delay(5);if(k1==0);while(!k1);t=6;beep=1;delay(500);beep=0;}if(k7==0) {delay(5);if(k1==0);while(!k1);t=7;beep=1;delay(500);beep=0;}if(k8==0) {delay(5);if(k1==0);while(!k1);t=8;beep=1;delay(500);beep=0;}}if(k==0){Timer();//中断定时器打开delay(10);while(!k);while(1){dis();m=0;n=0;if (second==29){beep=1;delay(500);beep=0;}if(second==0){TR0=0;n=1;if(k1==0){delay(5);if(k1==0);while(!k1);t=1;beep=1;delay(500);beep=0;} // 违规抢答显示号码报警if(k2==0){delay(5);if(k1==0);while(!k1);t=2;beep=1;delay(500);beep=0;}if(k3==0){delay(5);if(k1==0);while(!k1);t=3;beep=1;delay(500);beep=0;}if(k4==0){delay(5);if(k1==0);while(!k1);t=4;beep=1;delay(500);beep=0;}if(k5==0){delay(5);if(k1==0);while(!k1);t=5;beep=1;delay(500);beep=0;}if(k6==0){delay(5);if(k1==0);while(!k1);t=6;beep=1;delay(500);beep=0;}if(k7==0){delay(5);if(k1==0);while(!k1);t=7;beep=1;delay(500);beep=0;}if(k8==0){delay(5);if(k1==0);while(!k1);t=8;beep=1;delay(500);beep=0;}if(k==0){beep=1;delay(500);beep=0;second=29;TR0=1;m=1;}}//如果再次按下开始按钮,蜂鸣器响0。
单片机课程设计八路抢答器一设计要求:①如果想调节抢答时间或答题时间,按“抢答时间调节”键或“答题时间调节”键进入调节状态,此时会显示现在设定的抢答时间或回答时间值,如想加一秒按一下“加1s”键,如果想减一秒按一下“-1s”键,时间LED上会显示改变后的时间,调整范围为0s~99s, 0s时再减1s会跳到99,99s时再加1s会变到0s。
②主持人按“抢答开始”键,会有提示音,并立刻进入抢答倒计时(预设30s抢答时间),如有选手抢答,会有提示音,并会显示其号数并立刻进入回答倒计时(预设60s抢答时间),不进行抢答查询,所以只有第一个按抢答的选手有效。
倒数时间到小于5s会每秒响一下提示音。
③如倒计时期间,主持人想停止倒计时可以随时按“停止”按键,系统会自动进入准备状态,等待主持人按“抢答开始”进入下次抢答计时。
④如果主持人未按“抢答开始”键,而有人按了抢答按键,犯规抢答,LED上不断闪烁FF和犯规号数并响个不停,直到按下“停止”键为止。
⑤P3.0为开始抢答,P3.1为停止,p1.0-p1.7为八路抢答输入数码管段选P0口,位选P2口低3位,蜂鸣器输出为P3.6口。
P3.2抢答时间调整结,P3.3回答时间调整,P3.4为时间加1调整,P3.5为时间减1调整。
⑥当参赛选手在回答问题时要求使用锦囊,则主持人按下抢答开始键,计时重新开始。
二设计思路:系统设计主要包括硬件和软件两大部分,依据控制系统的工作原理和技术性能,将硬件和软件分开设计。
硬件设计部分包括电路原理图、合理选择元器件、绘制线路图,然后对硬件进行调试、测试,以达到设计要求。
软件设计部分,首先在总体设计中完成系统总框图和各模块的功能设计,拟定详细的工作计划;然后进行具体设计,包括各模块的流程图,选择合适的编程语言和工具,进行代码设计等;最后是对软件进行调试、测试,达到所需功能要求。
在系统设计中设计方法的选用是系统设计能否成功的关键。
硬件电路是采用结构化系统设计方法,该方法保证设计电路的标准化、模块化。
电子系统课程设计姓名:___________ 周康学号:___________ 24号_______________专业班级:_________ 嵌入式10指导教师:一=朱水金设计题目:八路抢答器完成时间:2013年07月01日功能(20%实训(60%设计报告(20%总评简易难度(10%控制方式(10%原理图(10%装配图(10%元器件焊接(10%自控质量(10%功能实现(10%质量评估(10%格式(5%内容(15%应用科学学院电子系统课程设计数字抢答器由主体电路与扩展电路组成。
用控制电路和主持人开关启动报警电路,以上两部分组成主体电路。
通过定时电路和译码电路将秒脉冲产生的信号在显示器上输出实现计时功能,构成扩展电路。
经过布线、焊接、调试等工作后数字抢答器成形。
单片机体积小价格低,应用方便,稳定可靠。
单片机系统的硬件结构给予了抢答系统“身躯”,而单片机的应用程序赋予了其新的“生命”,使其在传统的抢答器面前具有电路简单、成本低、运行可靠等特色。
关键字:抢答电路报警电路倒计时电路目录第一章八路抢答器的概述及制作要求 (4)1.1 数字抢答器的概述 (4)1.2 设计任务与要求 (4)第二章单片机芯片的选择及抢答器方案 (5)2.1单片机芯片的选择 (5)2.2模块性能分析 (7)第三章硬件电路设计 (8)3.1总体设计 (8)3.2外部振荡电路 (9)3.3复位电路的设计 (9)3.4显示电路的设计 (9)3.5按钮输入电路的设计 (9)3.6报警电路的设计 (9)第四章系统软件设计 (12)4.1抢答器流程图 (12)4.2抢答器程序 (12)-1 -第五章产品的样品 (25)4.1实物图 (12)4.2 PCB 版图 (12)4.1实物焊接图 (12)结束语 (25)参考文献 (28)引言:单片机的发展史单片机诞生于20世纪70年代末,经历了SCM MCU SoC三大阶段。
1.SCM即单片微型计算机(Single Chip Microcomputer )阶段,主要是寻求最佳的单片形态嵌入式系统的最佳体系结构。
单片机八路抢答器课程设计一、引言随着科技的发展和应用越来越广泛,单片机在各个领域的应用日益普遍。
其中,抢答器是一种常见且有趣的单片机应用。
本课程设计将介绍如何使用单片机设计一个八路抢答器,帮助学生更好地理解和掌握单片机的原理和应用。
二、系统框图八路抢答器系统主要由以下几个部分组成: 1. 单片机主控模块:负责系统的整体控制和数据处理。
2. 八个抢答器按键模块:提供用户按键输入功能。
3. 抢答器显示模块:展示抢答器的按键状态和抢答结果。
4. 蜂鸣器模块:用于发出抢答成功或失败的音频提示。
三、系统功能设计八路抢答器的主要功能如下: 1. 抢答器按键功能:每个抢答器都具有独立的按键,当按下按键时,抢答器将发送信号给主控模块。
2. 抢答器显示功能:通过显示模块,实时显示每个抢答器的抢答状态,如按下、未按下等。
3. 抢答器抢答功能:在系统开始抢答后,只有首先按下按键的抢答器才能获得抢答资格。
4. 抢答结果显示功能:在抢答结束后,显示抢答结果,并通过蜂鸣器模块发出音频提示。
四、硬件设计4.1 单片机主控模块主控模块是整个系统的核心,它接收抢答器按键模块发送的信号,并对抢答结果进行处理。
可以选择常用的单片机,如STC89C51等。
### 4.2 抢答器按键模块抢答器按键模块包括八个独立的按键,用于用户进行抢答操作。
按下按键时,将通过IO口发送信号给主控模块。
### 4.3 抢答器显示模块抢答器显示模块采用LED或LCD等显示器件,用于显示八个抢答器的状态,如按下、未按下等。
### 4.4蜂鸣器模块蜂鸣器模块用于发出抢答成功或失败的音频提示。
可以选择适合的蜂鸣器模块并通过IO口控制。
五、软件设计5.1 系统初始化在系统初始化过程中,需要对硬件进行初始化,包括IO口设置、定时器设置等。
### 5.2 抢答逻辑处理通过编程实现抢答逻辑处理,包括按键检测、抢答结果判断等。
当检测到抢答按键按下时,判断该抢答器是否首次按下,并显示相应的抢答结果。
单片机综合实验报告、实验内容:以单片机为核心,设计一个8位竞赛抢答器:同时供8名选手或8个代表队比赛,分别用8个按钮SO〜S7表示。
本实验有Protues软件仿真。
分别设置一个抢答控制开关S1和复位开关S2,由主持人控制。
抢答器具有锁存与显示功能。
即选手按按钮抢答时,锁存相应的编号,并且优先抢答选手的编号一直保持显示在显示器上,直到主持人将系统复位为止。
抢答器具有定时抢答功能,且一次抢答的时间由主持人设定为30秒。
当主持人启动“开始”键后,定时器进行减计时,同时绿色LED灯亮。
二、实验电路及功能说明分别设置一个抢答控制开关S1和复位开关S2,由主持人控制。
抢答器具有锁存与显示功能。
即选手按按钮抢答时,锁存相应的编号,并且优先抢答选手的编号一直保持显示在显示器上,直到主持人将系统复位为止。
参赛选手在设定的时间内进行抢答,抢答有效,定时器停止工作,显示器上显示选手的编号和抢答的时间,并保持到主持人将系统复位为止。
复位后参赛队员可继续抢答。
如果定时时间已到,无人抢答,本次抢答无效,系统报警红色LED灯亮,并禁止抢答,定时显示器上显示00。
三、实验程序流程图:主程序;非法抢答序;抢答时间调整程序;回答时间调整程序;倒计时程序;正常抢答处理程序;犯规处理程序;显示及发声程序。
主流程图如下图所示子程序四、实验结果分析五、心得体会六、程序清单#in elude <reg51.h>#defi ne uchar un sig ned char#defi ne uint un sig ned intsbit wela_a=P3A0;sbit wela 1=卩3人1;sbit wela2=P3A7;sbit rest=P3A5;sbit host=P3A6;sbit led 仁P3A4;〃绿灯sbit led2=P3A3;〃红灯sbit led3=P3A2;〃黄灯sbit key1=P1A0;sbit key2=P1Al;sbit key3=P1A2;sbit key4=P1A3;sbit key5=P1A4;sbit key6=P1A5;sbit key7=P1A6;sbit key8=P1A7;uchar x,q,d,s,ge,tO,t1,start,flag;uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};void init();/* 初始函数申明*/void display(uchar s,uchar ge,uchar a); void delay( uint z); void keysca n();void mai n(){in it();display(s,ge,a);while(1){if(host==0) // 主持人控制开关{delay(5);if(host==0){flag=1;start=1;dela y(5); 延时while(!host); 检测开关}}if(rest==0) // 复位{delay(5);if(rest==0){q=30;led2=1;led3=1;x=0;delay(5);start=1;} }void init()/* 初始化 */{ t0=0; t1=0; flag=0; q=30; d=10; wela_a=0; a=0; TMOD=0x11;TH0=(65536-50000)/256; TL0=(65536-50000)%256;TH1=(65536-50000)/256; TL1=(65536-50000)%256; EA=1; ET0=1; ET1=1; TR0=0; TR1=0; }void display(uchar s,uchar ge,uchar a)/*数码管动态扫描*/ { wela1=1; P0=table[ge]; delay(5); wela2=1;delay(5);while(!rest); } }if(flag==1) { if(start==O)〃 选手按下,倒计10秒开始{led3=0; wela1=0; wela2=0; delay(1); TRO=O; TR1=1; display(s,ge,a); delay(1);} if(start==1)//主持人按下,倒计时 30秒 { led 仁0; wela1=0; wela2=0; delay(1); TR0=1; TR1=0; display(s,ge,a); delay(1); keysca n();}PO=table[s];delay(5);wela_a=O;P2=table[a];delay(5);}void keyscan()/* 按键扫描函数*/ {if(key1==O){delay(5);if(key1==0){a=1;P2=table[a];start=0;TR1=1;TR0=0;delay(5);while(!key1);}}if(key2==0){delay(5);if(key2==0){a=2;P2=table[a];delay(5); while(!key2);}}if(key3==0){delay(5);if(key3==0){a=3;P2=table[a]; start=0;delay(5); while(!key3);}}if(key4==0){delay(5);if(key4==0){a=4;P2=table[a]; start=0;delay(5); while(!key4);}}if(key5==0)delay(5);if(key5==0){a=5;P2=table[a]; start=0;delay(5); while(!key5); }start=0;}if(key6==0){delay(5);if(key6==0){a=6;P2=table[a]; start=0;delay(5); while(!key6); } }if(key7==0){delay(5);if(key7==0){a=7;P2=table[a];start=0;delay(5);while(!key7);}}if(key8==0){delay(5);if(key8==0){a=8;P2=table[a];start=0;delay(5);while(!key8);}}}void delay(uint z)/* 延时函数*/{uint i,j;for(i=z; i>0;i--)for(j=110;j>0;j--);}void time0() interrupt 1/* 定时器0*/ {TH0=(65536-50000)/256;TL0=(65536-50000)%256;s=q/10;ge=q%10;t0++;if(t0==20){to=o;q--;s=q/10;ge=q%10;if(q==0){while(1){q=0;a=0;led1=1;led2=0;wela1=0;wela2=0;delay(1);display(s,ge,a);}}}}void time1() in terrupt 3/* {TH1=(65536-50000)/256; TL1=(65536-50000)%256; s=d/10;ge=d%10;t1++;{t仁0;d--;s=d/10;ge=d%10;if(d==0){while(1){d=0;a=0;led1=1;led3=1;led2=0;wela1=0;wela2=0;delay(1);display(s,ge,a);}}}}定时器1*///最后,给朋友们一点点提示,本程序有一点点小问题,有个中断没关,当主持人复位之后,后面的选手回答问题的时间就没有10秒了(可怜啊)。
1 任务要求(1)实现多路抢答器功能。
(2)用LED 显示屏显示抢答提示、哪组抢答、哪组犯规、加减分情况以及每组的得分。
(3)数码显示抢答和答题时间,时间到调用LED 模块显示“时间到!”。
(4)主持人通过按钮控制抢答功能:抢答、复位、加分和减分。
2硬件设计2.1硬件分析(1)LED 显示屏模块设计LED 显示屏是用了16块8×8点阵模块,把每一行的行线连起来,每一列的列线连起来级联成64×16点阵显示屏。
通过8个74HC273锁存器把每一行的64列数据锁存起来,通过4线-16线译码器74159控制每一行打开。
4块8×8点阵模块级联成16×16点阵模块示意图如图3.1所示:图3.1 4块8×8点阵级联示意图64×16点阵模块由16块8×8点阵模块以及8块74HC273锁存器组成,锁存器负责把每一行的数据锁存起来,电路图如图3.2所示:8条行线连在一起组成16行8条列线连在一起组成16列图3.2 64×16点阵电路图(2)按键模块设计八路抢答器顾名思义有8个抢答按钮,故八路抢答器应由8个抢答键及4个功能键组成。
每一组的按键判断有相应的LED指示灯,用来指示抢答与犯规操作。
按键模块电路如图3.3及图3.4所示:图3.3 抢答按钮图3.4 主持人控制按钮(3)数码显示模块设计数码显示模块由两位数码管组成,可以显示00~99,通过位扫描显示两位数字。
数码管用来显示抢答时间以及答题时间。
数码显示模块电路如图3.5所示:图3.5 数码显示模块2.2硬件电路原理图八路抢答器由LED显示模块、数码显示模块、按键模块以及译码电路,锁存电路组成。
电路原理图如图3.6所示:图3.6 硬件电路原理图3 软件设计3.1主要模块流程图(1)开始程序流程图如图4.1所示图4.1 开始程序流程图(2)开始抢答程序流程图如图4.2所示图4.2 开始抢答程序流程图(3)判断犯规程序流程图如图4.3所示图4.3 判断犯规程序流程图(4)答题程序流程图如图4.4所示图4.4 答题程序流程图(5)加减分流程图如图4.5所示图4.5 加减分流程图3.2主要模块的程序分析本程序主要分为四部分:(1)主程序模块、(2)显示模块、(3)计时模块、(4)按键中断模块。
毕业论文基于单片机的8路抢答器专业院系: 信息工程系班级名称: 计算机硬件与外设****: *******: ***完成时间: 2011年12月28日湖南铁道职业技术学院信息工程系2012届毕业设计任务书专业:硬件与外设班级:硬件091 填表日期:2011年11月20日指导教师王昱煜职称讲师联系电话159****7341学生姓名周俊兵课题名称基于单片机的8路抢答器的设计课题工作内容介绍单片机的选型、引脚功能等,然后分析抢答器的设计原理,从各个硬件的总体设计到局部电路设计,分析并阐述设计思路;再进行软件的设计,从程序总体流程图到关键部分的设计思路以及中断处理,最后附上程序代码。
该论文的主要内容应包括:1、单片机芯片选择(1)单片机选择(2)模块性能分析2、硬件设计(1)总体设计(2)外部振荡电路设计(3)复位电路设计(4)显示电路设计(5)按键电路设计(6)报警电路设计3、系统软件设计(1)程序总体结构图(2)程序流程图(3)主程序(4)中断处理4、总结本论文的撰写需要先设计出产品的电路图及软件系统,然后再自己焊接组装成产品,然后根据自己的设计思路及产品焊接组装流程用文字加图片的形式在文章中展示出来。
要求指标(目标)通过毕业设计,应达到以下要求:(1)熟悉单片机的型号及各引脚功能。
(2)熟悉单片机硬件电路设计。
(3)熟练单片机C语言程序设计。
(4)用C语言实现软件系统,并在仿真环境下调试运行。
(5)熟练电子元器件的焊接。
(6)根据硬件电路图和程序代码将产品制作出来并调试。
(7)撰写符合规范的毕业设计论文,对毕业设计所做的工作表达出来。
(8)掌握团队合作开发的方法。
(9)进一步积累实际的单片机产品的开发和研究经验。
进程安排(1)第1周:落实毕业设计任务,明确工作内容,部署毕业设计各项工作。
(2)第2周:查阅与课题相关或针对性强的文献5~10篇,阅读并进行归纳、总结。
(3)第3周:根据课题要求进行资料收集、整理,并写出分析报告。
单片机课程设计8路抢答器指导老师:宋*******学号:************ 班级:12电子卓越班目录一绪论 (3)二基本设计方案 (4)三具体设计 (5)四电路板的制作 (7)五电路功能测试与调试 (7)六心得体会 (8)附录 (9)一绪论1.1单片机抢答器的背景二十世纪跨越了三个“电”的时代,即电气时代、电子时代和现已进入的电脑时代。
不过,这种电脑,通常是指个人计算机,简称PC机。
它由主机、键盘、显示器等组成。
还有一类计算机,大多数人却不怎么熟悉。
这种计算机就是把智能赋予各种机械的单片机(亦称微控制器)。
顾名思义,这种计算机的最小系统只用了一片集成电路,即可进行简单运算和控制。
因为它体积小,通常都藏在被控机械的“肚子”里。
它在整个装置中,起着有如人类头脑的作用,它出了毛病,整个装置就瘫痪了。
现在,这种单片机的使用领域已十分广泛,如智能仪表、实时工控、通讯设备、导航系统、家用电器等。
各种产品一旦用上了单片机,就能起到使产品升级换代的功效,常在产品名称前冠以形容词——“智能型”,如智能型洗衣机等。
现在有些工厂的技术人员或其它业余电子开发者搞出来的某些产品,不是电路太复杂,就是功能太简单且极易被仿制。
究其原因,可能就卡在产品未使用单片机或其它可编程逻辑器件上。
在知识竞赛中,特别是做抢答题时,在抢答过程中,为了更确切的知道哪一组或哪一位选手先抢答到题,必须要有一个系统来完成这个任务。
若在抢答中,只靠人的视觉(或者是听觉)是很难判断出哪一组(或哪一个选手)先抢答到题的。
利用单片机编程来设计抢答器,可以使以上问题得以解决,即使两组的抢答时间相差几微秒,也能轻松的分辨出哪一组(或哪个选手)先抢答到题的。
本文主要介绍了抢答器的工作原理及设计,以及它的实际用途。
1.2设计要求:一、基本功能:1、六路抢答,抢答有效时相应的灯亮,并有音乐提示;2、每轮抢答需主持人按“开始”后,抢答才有效;3、抢答无效时,有相应的灯及音乐提示;二、扩展功能:1、扩展到8路或以上;2、抢答倒计时提示;3、各路的参赛者有得分显示;4、其他自行增加的功能;二基本设计方案2.1 单片机的选择我选择STC89C52单片机芯片的理由如下:1、在设计过程中可能会出现很多问题,89C52可重复烧程序;2、是80C51的增强型,功能与我们所学的51单片机基本相同;3、学校配套发的单片机开发板用的就是89C52,有很多相关教程,程序的测试与烧写都十分方便;4、器材室很方便就能领到。
单片机综合实验报告题目: 8路抢答器实验班级:姓名:学号:指导老师:时间:一、实验内容:以单片机为核心,设计一个8位竞赛抢答器:同时供8名选手或8个代表队比赛,分别用8个按钮S0~S7表示。
本实验有Protues软件仿真。
分别设置一个抢答控制开关S1和复位开关S2,由主持人控制。
抢答器具有锁存与显示功能。
即选手按按钮抢答时,锁存相应的编号,并且优先抢答选手的编号一直保持显示在显示器上,直到主持人将系统复位为止。
抢答器具有定时抢答功能,且一次抢答的时间由主持人设定为30秒。
当主持人启动“开始”键后,定时器进行减计时,同时绿色LED灯亮。
二、实验电路及功能说明分别设置一个抢答控制开关S1和复位开关S2,由主持人控制。
抢答器具有锁存与显示功能。
即选手按按钮抢答时,锁存相应的编号,并且优先抢答选手的编号一直保持显示在显示器上,直到主持人将系统复位为止。
参赛选手在设定的时间内进行抢答,抢答有效,定时器停止工作,显示器上显示选手的编号和抢答的时间,并保持到主持人将系统复位为止。
复位后参赛队员可继续抢答。
如果定时时间已到,无人抢答,本次抢答无效,系统报警红色LED灯亮,并禁止抢答,定时显示器上显示00。
三、实验程序流程图:主程序;非法抢答序;抢答时间调整程序;回答时间调整程序;倒计时程序;正常抢答处理程序;犯规处理程序;显示及发声程序。
主流程图如下图所示子程序四、实验结果分析五、心得体会六、程序清单#include <reg51.h>#define uchar unsigned char#define uint unsigned intsbit wela_a=P3^0;sbit wela1=P3^1;sbit wela2=P3^7;sbit rest=P3^5;sbit host=P3^6;sbit led1=P3^4;//绿灯sbit led2=P3^3;//红灯sbit led3=P3^2;//黄灯sbit key1=P1^0;sbit key2=P1^1;sbit key3=P1^2;sbit key4=P1^3;sbit key5=P1^4;sbit key6=P1^5;sbit key7=P1^6;sbit key8=P1^7;uchar x,q,d,s,ge,t0,t1,start,flag;uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};void init();/*初始函数申明*/void display(uchar s,uchar ge,uchar a); void delay(uint z);void keyscan();void main(){init();display(s,ge,a);while(1){if(host==0) //主持人控制开关{delay(5);if(host==0){flag=1;start=1;delay(5); 延时while(!host); 检测开关}}if(rest==0) //复位{delay(5);if(rest==0){q=30;led2=1;led3=1;x=0;delay(5);start=1;delay(5);while(!rest);}}if(flag==1){if(start==0)//选手按下,倒计10秒开始 {led3=0;wela1=0;wela2=0;d elay(1);T R0=0;T R1=1;display(s,ge,a);delay(1);}if(start==1)//主持人按下,倒计时30秒{led1=0;w ela1=0;w ela2=0;delay(1);T R0=1;TR1=0;display(s,ge,a);delay(1);keyscan();}}}}void init()/*初始化*/{t0=0;t1=0;flag=0;q=30;d=10;wela_a=0;a=0;TMOD=0x11;TH0=(65536-50000)/256;TL0=(65536-50000)%256;TH1=(65536-50000)/256;TL1=(65536-50000)%256;EA=1;ET0=1;ET1=1;TR0=0;TR1=0;}void display(uchar s,uchar ge,uchar a)/*数码管动态扫描*/{wela1=1;P0=table[ge];delay(5);wela2=1;P0=table[s];delay(5);wela_a=0;P2=table[a];delay(5);}void keyscan()/*按键扫描函数*/ {if(key1==0){delay(5);i f(key1==0){a=1;P2=table[a];start=0;TR1=1;TR0=0;delay(5);while(!key1);}}if(key2==0){delay(5);i f(key2==0){a=2;P2=table[a]; start=0;delay(5);while(!key2);}}if(key3==0){delay(5);i f(key3==0){a=3;P2=table[a]; start=0;delay(5);while(!key3);}}if(key4==0){delay(5);i f(key4==0){a=4;P2=table[a]; start=0;delay(5);while(!key4); }}if(key5==0){delay(5);i f(key5==0){a=5;P2=table[a]; start=0;delay(5);while(!key5);}}if(key6==0){delay(5);i f(key6==0){a=6;P2=table[a]; start=0;delay(5);while(!key6);}}if(key7==0){delay(5);if(key7==0){a=7;P2=table[a];start=0;delay(5);while(!key7);}}if(key8==0){delay(5);i f(key8==0){a=8;P2=table[a];start=0;delay(5);while(!key8);}}}void delay(uint z)/*延时函数*/{uint i,j;for(i=z;i>0;i--)for(j=110;j>0;j--);}void time0() interrupt 1/*定时器0*/{TH0=(65536-50000)/256;TL0=(65536-50000)%256;s=q/10;ge=q%10;t0++;if(t0==20){t0=0;q--;s=q/10;ge=q%10;if(q==0){while(1){q=0;a=0;led1=1;led2=0;wela1=0;wela2=0;delay(1);display(s,ge,a);}}}}void time1() interrupt 3/*定时器1*/{TH1=(65536-50000)/256;TL1=(65536-50000)%256;s=d/10;ge=d%10;t1++;if(t1==20){t1=0;d--;s=d/10;ge=d%10;if(d==0){while(1){d=0;a=0;led1=1;led3=1;led2=0;wela1=0;wela2=0;delay(1);display(s,ge,a);}}}}//最后,给朋友们一点点提示,本程序有一点点小问题,有个中断没关,当主持人复位之后,后面的选手回答问题的时间就没有10秒了(可怜啊)。
课程设计报告课程名称:单片机课程设计报告题目:8位竞赛抢答器的设计学生姓名:所在学院:信息科学与工程学院专业班级:学生学号:指导教师:2021 年12月25日课程设计任务书摘要抢答器作为一种工具,已普遍应用于各类智力和知识竞赛场合。
但抢答器的利用频率较低,且有的要么制作复杂,要么靠得住性低。
作为一个单位,若是专门购一台抢答器尽管在经济上能够经受,但每一年利用的次数极少,往往因长期寄存使(电子器件的)抢答器损坏,再购买的麻烦和及时性就会阻碍活动的开展,因此设计了本抢答器。
本设计是以八路抢答为大体理念。
考虑到依需设定限时回答的功能,利用AT89C52单片机及外围接话柄现的抢答系统,利用单片机的按时器/计数器按时和记数的原理,将软、硬件有机地结合起来,使得系统能够正确地进行计时,同时使数码管能够正确地显示时刻。
用开关做键盘输出,扬声器发生提示。
同时系统能够实现:在抢答中,只有开始后抢答才有效,若是在开始抢答前抢答为无效;抢答限按时刻和回答下列问题的时刻可在1-30s设定;能够显示是哪位选手有效抢答,正确按键后有5s的音乐提示(即扬声器发出响声);抢答时刻和回答下列问题时刻倒记时显示,满时后系统计时自动复位及主控强制复位;按键锁定,在有效状态下,按键无效非法。
关键词:89c52;电路;显示;按键目录一、概述 (1)二、方案设计 (1)三、硬件电路设计 (2)1、抢答器的电路框图 (2)2、单元电路 (3)、抢答器电路 (3)、时序操纵电路 (3)、复位电路 (3)3、时钟震荡电路 (3)4、报警电路 (3)四、软件设计 (4)1、系统主程序 (4)2、系统程序 (5)五、结论与心得 (10)六、参考文献 (10)一、概述本实验电路由抢答电路、译码显示电路、主持人操纵电路、按时电路、报警电路组成。
通过复位按键FW,电路进入预备就绪状态。
将抢答时刻设定在30S,然后按下开始键开始抢答。
,在电路中“S0-S7”为8路抢答器的8个按键,当有键按下,程序锁定信号,从P2口输出抢答者号码的七段码值,送到数码管显示,并封锁按键,维持适才按键按下时刻的时刻,禁止其他人按键的输入,从而实现了抢答的功能。
#include <reg52.h>/*-----------------------------------------------------------宏定义------------------------------------------------------------*/#define uint unsigned int#define uchar unsigned char/*-----------------------------------------------------------共阴极数码管编码表0 - f显示------------------------------------------------------------*/unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};/*-----------------------------------------------------------音乐程序------------------------------------------------------------*/unsigned char timer1h,timer1l,time; //世上只有妈妈好数据表code unsigned char sszymmh[]={ 6,2,3, 5,2,1, 3,2,2, 5,2,2, 1,3,2, 6,2,1, 5,2,1,6,2,4, 3,2,2, 5,2,1, 6,2,1, 5,2,2, 3,2,2, 1,2,1,6,1,1, 5,2,1, 3,2,1, 2,2,4, 2,2,3, 3,2,1, 5,2,2,5,2,1, 6,2,1, 3,2,2, 2,2,2, 1,2,4, 5,2,3, 3,2,1,2,2,1, 1,2,1, 6,1,1, 1,2,1, 5,1,6, 0,0,0}; // 音阶频率表高八位code unsigned char FREQH[]={ 0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0xF8,0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,0xFC, //1,2,3,4,5,6,7,8,i0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF,} ;// 音阶频率表低八位code unsigned char FREQL[]={ 0x42,0xC1,0x17,0xB6,0xD0,0xD1,0xB6,0x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B,0x8F, //1,2,3,4,5,6,7,8,i0xEE,0x44,0x6B,0xB4,0xF4,0x2D,0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16,}; /*-----------------------------------------------------------变量定义------------------------------------------------------------*/sbit key1 = P1^0;sbit key2 = P1^1;sbit key3 = P1^2;sbit key4 = P1^3;sbit key5 = P1^4;sbit key6 = P1^5;sbit key7 = P1^6;sbit key8 = P1^7;sbit state = P3^4;sbit beep = P3^5;sbit start_stop = P3^6;sbit reset = P3^7;bit start_stop_flag = 0;bit key1_flag = 0;bit key2_flag = 0;bit key3_flag = 0;bit key4_flag = 0;bit key5_flag = 0;bit key6_flag = 0;bit key7_flag = 0;bit key8_flag = 0;bit reset_flag = 0;bit action = 0;uchar second = 10;uchar timer0_count = 0;uchar number = 0;uchar number_display = 0;/*-----------------------------------------------------------延时函数------------------------------------------------------------*/ void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}/*----------------------------------------------------------- 数码管显示驱动函数------------------------------------------------------------*/ void display(uchar number,uchar second){uchar second_first,second_second;second_first = second / 10;second_second = second % 10;P2 = 0xfe;P0 = table[number];delay(2);P2 = 0xfd;P0 = 0x40;delay(2);P2 = 0xfb;P0 = table[second_first];delay(2);P2 = 0xf7;P0 = table[second_second];delay(2);}/*----------------------------------------------------------- 开始键扫描函数------------------------------------------------------------*/ void start_stop_keyscan(){if(start_stop == 0){delay(8);if((start_stop == 0)&&(!start_stop_flag)){start_stop_flag = 1;action = 1;TR0 = 1;state = 0;}}else{start_stop_flag = 0;}}/*----------------------------------------------------------- 八位抢答键扫描函数------------------------------------------------------------*/ uchar key_scan8(){if(key1 == 0){delay(8);if((key1 == 0)&&(!key1_flag)){key1_flag = 1;number = 1;beep=0;delay(400);beep=1;number_display = number;}}else{key1_flag = 0;number = 0;}if(key2 == 0){delay(8);if((key2 == 0)&&(!key2_flag)){key2_flag = 1;number = 2;beep=0;delay(400);beep=1;number_display = number;}}else{key2_flag = 0;number = 0;}if(key3 == 0){delay(8);if((key3 == 0)&&(!key3_flag)){key3_flag = 1;number = 3;beep=0;delay(400);beep=1;number_display = number;}}else{key3_flag = 0;number = 0;}if(key4 == 0){delay(8);if((key4 == 0)&&(!key4_flag)){key4_flag = 1;number = 4;beep=0;delay(400);beep=1;number_display = number;}}elsekey4_flag = 0;number = 0;}if(key5 == 0){delay(8);if((key5 == 0)&&(!key5_flag)){key5_flag = 1;number = 5;beep=0;delay(400);beep=1;number_display = number;}}else{key5_flag = 0;number = 0;}if(key6 == 0){delay(8);if((key6 == 0)&&(!key6_flag)){key6_flag = 1;number = 6;beep=0;delay(400);beep=1;number_display = number;}}else{key6_flag = 0;number = 0;}if(key7 == 0){delay(8);if((key7 == 0)&&(!key7_flag)){key7_flag = 1;number = 7;beep=0;delay(400);beep=1;number_display = number;}}else{key7_flag = 0;number = 0;}if(key8 == 0){delay(8);if((key8 == 0)&&(!key8_flag)){key8_flag = 1;number = 8;beep=0;delay(400);beep=1;number_display = number;}}else{key8_flag = 0;number = 0;}if(number_display != 0){return 1;}else{return 0;}}/*----------------------------------------------------------- 复位键扫描函数------------------------------------------------------------*/ void reset_keyscan(){if(reset == 0){delay(8);if((reset == 0)&&(!reset_flag)){reset_flag = 1;number_display = 0;state = 1;}}else{reset_flag = 0;}}void delay_fm(unsigned char t){ unsigned char t1;unsigned long t2;for(t1=0;t1<t;t1++){ for(t2=0;t2<8000;t2++){ ; }}TR1=0;}void time1() interrupt 3{TR1=0;beep=!beep;TH1=timer1h;TL1=timer1l;TR1=1;}void song(){ TH1=timer1h;TL1=timer1l;TR1=1;delay_fm(time);}/*-----------------------------------------------------------主函数------------------------------------------------------------*/void main(){TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=0;while(1){start_stop_keyscan();reset_keyscan();while(action){while(!key_scan8()){unsigned char k,i;TMOD=0x11; //置CT0定时工作方式1EA=1;ET1=1;//IE=0x82 //CPU开中断,CT0开中断i=0;while(i<100){ //音乐数组长度,唱完从头再来k=sszymmh[i]+7*sszymmh[i+1]-1;timer1h=FREQH[k];timer1l=FREQL[k];time=sszymmh[i+2];i=i+3;song();second = 10;break;}}TR0 = 0;second = 10;display(number_display,second);action = 0;break;}display(number_display,second);}}/*-----------------------------------------------------------中断服务函数------------------------------------------------------------*/void timer0() interrupt 1{TH0=(65536-50000)/256;TL0=(65536-50000)%256;timer0_count ++;if(timer0_count == 20){timer0_count = 0;second --;if(second == 0){TR0 = 0;number_display = 0;state = 1;action = 0;}}}。
单片机八路抢答器课程设计课程设计概述:本课程设计是针对单片机的八路抢答器的设计。
抢答器是一种常见的竞赛工具,可以用于比赛、竞赛等活动中实现精准的答题和排名。
本设计旨在实现一个基于单片机的八路抢答器系统,通过使用单片机和相应的电路设计实现对八路玩家的快速、准确的答题判断和排名结果的显示。
设计思路:本设计采用基于单片机的设计,将每个玩家的回答结果作为输入信号,通过对输入信号进行处理后,实现对八个回答结果的判断和排名。
其中,每个玩家的输入信号通过一个按键输入到单片机的IO口中,然后将IO口信号处理后,向显示屏发送相应的排名信息。
电路设计:1、按键输入电路按键输入电路是将每个玩家的回答结果输入到单片机中的重要电路。
每个按键连接到一个IO口,并通过一个上拉电阻连接到VCC。
当玩家按下按键时,IO口信号被拉低,单片机检测到信号后,将其处理为按键按下事件。
2、显示屏输出电路显示屏输出电路是将排名结果以数字方式输出的电路。
选用数码管进行数字显示,驱动数码管的芯片采用共阳极显示方式。
将多个数码管的ANODE和COM端分别与单片机的IO口连接,通过发送不同的电平信号,实现各位玩家排名结果的显示。
程序设计:首先,需要对IO口进行初始化,使其适应按键输入电路和显示屏输出电路。
接着,需要编写轮流扫描每个IO口并检测是否有按键被按下的程序,检测到按键按下后,将其加入到一个答题人员回答顺序队列中,并更新相应的显示屏。
当八个玩家答题完毕后,根据答题顺序队列进行排名,并更新显示屏显示排名结果。
总结:本设计实现了一个基于单片机的八路抢答器系统,通过使用按键输入电路、显示屏输出电路和相应的程序设计,实现了快速、准确的答题判断和排名结果的显示。
摘要本次课程设计是采用7端数码管显示结果,以AT89C51单片机为核心,由八个抢答按钮,两个锁存器,开始按钮,复位按钮组成。
八位智能定时抢答器可靠性高,反应速度灵敏,抢答器具有PC接口,可以对系统进行初始化、工作方式、显示时间的集中设置,使用人机界面操作,使操作简单易行。
单片机应用的重要意义在于从根本上改变了传统的控制系统设计思想和设计方法,以前必须由模拟电路或数字电路实现大部分功能,现在已能用单片机通过软件方法来实现了。
1目录一、课程设计目的: (3)二、课程设计内容: (3)三、硬件设计: (3)3.1、硬件总原理图(见附录1) (3)3.2、主要硬件介绍 (4)3.2.1 AT89C51简介 (4)3.2.2 74HC573简介 (10)3.2.3 LED数码管简介 (11)四、软件设计、 (13)4.1主程序流程图 (13)4.2 定时器T0\T1中断服务处理 (13)4.3 抢答处理设计 (14)4.4键盘扫描程序流程图 (15)4.5 抢答数码显示软件程序设计 (17)4.6软件程序(见附录2) (18)五、设计总结: (18)参考文献: (19)附录1 (20)附录2 (21)2单片机原理及接口技术课程设计(8位智能定时抢答器)一、课程设计目的:1、熟悉单片机仿真软件Proteus,单片机开发环境Keil的应用;2、增进对单片机的感性认识,加深对单片机理论方面的理解;3、使学生了解和掌握单片机应用系统的软硬件设计过程、方法及实现,为以后设计和实现单片机应用系统打下良好基础。
二、课程设计内容:此倒计时抢答器可容纳8组参赛的数字式抢答器,它们的编号分别是1、2、3、4、5、6、7、8,首先按下电源开关,指示灯亮,再按下启动按钮SB1,抢答器可以进行20秒倒计时,选手必须在20秒之内进行抢答,八个选手,谁先按下自己手中的按钮,LED显示器SM就会显示相对应的选手号码,如果20秒还没有人抢答,那么抢答器自锁,本次抢答无效,按下复位按钮S10后可继续抢答。
单片机课程设计8路抢答器指导老师:宋*******学号:************ 班级:12电子卓越班目录一绪论 (3)二基本设计方案 (4)三具体设计 (5)四电路板的制作 (7)五电路功能测试与调试 (7)六心得体会 (8)附录 (9)一绪论1.1单片机抢答器的背景二十世纪跨越了三个“电”的时代,即电气时代、电子时代和现已进入的电脑时代。
不过,这种电脑,通常是指个人计算机,简称PC机。
它由主机、键盘、显示器等组成。
还有一类计算机,大多数人却不怎么熟悉。
这种计算机就是把智能赋予各种机械的单片机(亦称微控制器)。
顾名思义,这种计算机的最小系统只用了一片集成电路,即可进行简单运算和控制。
因为它体积小,通常都藏在被控机械的“肚子”里。
它在整个装置中,起着有如人类头脑的作用,它出了毛病,整个装置就瘫痪了。
现在,这种单片机的使用领域已十分广泛,如智能仪表、实时工控、通讯设备、导航系统、家用电器等。
各种产品一旦用上了单片机,就能起到使产品升级换代的功效,常在产品名称前冠以形容词——“智能型”,如智能型洗衣机等。
现在有些工厂的技术人员或其它业余电子开发者搞出来的某些产品,不是电路太复杂,就是功能太简单且极易被仿制。
究其原因,可能就卡在产品未使用单片机或其它可编程逻辑器件上。
在知识竞赛中,特别是做抢答题时,在抢答过程中,为了更确切的知道哪一组或哪一位选手先抢答到题,必须要有一个系统来完成这个任务。
若在抢答中,只靠人的视觉(或者是听觉)是很难判断出哪一组(或哪一个选手)先抢答到题的。
利用单片机编程来设计抢答器,可以使以上问题得以解决,即使两组的抢答时间相差几微秒,也能轻松的分辨出哪一组(或哪个选手)先抢答到题的。
本文主要介绍了抢答器的工作原理及设计,以及它的实际用途。
1.2设计要求:一、基本功能:1、六路抢答,抢答有效时相应的灯亮,并有音乐提示;2、每轮抢答需主持人按“开始”后,抢答才有效;3、抢答无效时,有相应的灯及音乐提示;二、扩展功能:1、扩展到8路或以上;2、抢答倒计时提示;3、各路的参赛者有得分显示;4、其他自行增加的功能;二基本设计方案2.1 单片机的选择我选择STC89C52单片机芯片的理由如下:1、在设计过程中可能会出现很多问题,89C52可重复烧程序;2、是80C51的增强型,功能与我们所学的51单片机基本相同;3、学校配套发的单片机开发板用的就是89C52,有很多相关教程,程序的测试与烧写都十分方便;4、器材室很方便就能领到。
89C52单片机,是增强型RISC内载Flash的单片机,芯片上的Flash存储器附在用户的产品中,可随时编程,再编程,使用户的产品设计容易,更新换代方便。
89C52单片机采用增强的RISC结构,使其具有高速处理能力,在一个时钟周期内可执行复杂的指令,每MHz可实现1MIPS的处理能力。
89C52单片机工作电压为2.7~6.0V,可以实现耗电最优化。
89C52的单片机广泛应用于计算机外部设备,工业实时控制,仪器仪表,通讯设备,家用电器,宇航设备等各个领域.2.2单片机的基本结构MCS-52的引脚说明:MCS-52系列单片机中的8032、8052及8752均采用40Pin封装的双列直接DIP 结构,右图是它们的引脚配置,40个引脚中,正电源和地线两根,外置石英振荡器的时钟线两根,4组8位共32个I/O口,中断口线与P3口线复用。
具体引脚功能不做赘述了(详细请参见《单片机原理与接口技术》宋跃)。
图2-2-1 STC89C52的引脚图2.3基本设计思路因为之前做过单片机最小系统的电路,这次为了节约时间,采取在最小系统的板旁边再焊一块电路。
一看到题目我的基本思路就差不多了,我要实现基本功能好说,倒是拓展不太难,于是选择了拓展到8路和抢答倒计时。
最小系统已经包括了手动复位电路,时钟电路,电源电路和89C52的I/O口排插,这块板上可以用的地方不多,只能焊一个蜂鸣器及其驱动电路了。
在另一块板上需要有8个按键、8个LED灯和一个数码管,并分别对应三个插排。
两块电路板之间高低电平用两根导线连通。
2.4相关功能器材的选择整体电路需要开关的地方:电源的启动,主持人的开始与复位,8名抢答选手用的抢答按钮。
考虑到电源需长时间保持开启或断开状态,故采用可保持按下或不按下状态的开关。
同理主持人的“开始”和“未开始”也需要这样的开关。
8名抢答选手用的抢答按钮,只需用4脚的按键即可,按下即接通,松开就断路。
8个LED灯来显示选手的抢答状况,1个LED灯用来显示电源的状况;一个数码管来显示主持人说“开始”后的倒计时;一个有源蜂鸣器,用一个NPN管来驱动;其他电容和电阻用最小系统的。
三具体设计3.1硬件设计如上所述,该电路部分电路采用之前做出来的单片机最小系统,根据前面的思路可以在ISIS中摆出电路,如下图所示:图3.1 仿真电路图3.2软件设计在ISIS中的89C52可以仿真烧录程序运行,这样可以先在Keil中编程然后烧录看仿真结果,省时省力。
我采用C语言编写程序,详细程序及分析请看附录。
3.3仿真测试在ISIS中调入hex文件后即可开始仿真,仿真结果如下图所示:图3.3 仿真测试结果主持人按下“开始”按钮后,数码管开始倒计时,从9到0一秒减一下,也就是抢答倒计时,在数码管显示0之前,8个开关无论哪一个先按下,对应的灯就会亮(蜂鸣器没响,因为仿真不出来),当这个灯亮起后,不论其他的开关怎样按都不能改变灯亮的情况,也就是实现了抢答的功能。
如果数码管减到0了都没人抢答,则抢答作废,这时无论再怎样抢答都不会有灯亮,实现抢答倒计时的功能。
在主持人再次按下“复位”按钮(和“开始”是同一个)时,数码管和LED都熄灭,同时所有人都不能抢答,实现清零功能。
四电路板的制作4.1元件清单4.2焊接在实际焊接过程中,有很多地方元件以及走线十分密集,如8个按键、8个LED灯、8脚数码管和3个排针的焊接,这需要十分的耐心,稍不注意就将排布密集的锡线焊到了一起,只能用锡枪吸走重新焊。
还有一些问题如元件如何摆放平整,如果不平整其他元件难以放得下;LED 灯和数码管不能用高温焊太久,否则会毁掉,到时候很难检查出问题;元件的排版必须事先计算好,连走线都要想好,不然一步错步步错。
经过一个下午的焊接,最终还是将它做出来了。
五电路功能测试与调试5.1测试测试采用5V电源线接电脑供电,先用开发板将程序烧录进89C52,然后插入到板上的IC座,将剩余的线连好后开启电源,电源指示灯亮,结果数码管不亮,按抢答器也不亮,复位键也无任何作用,蜂鸣器也不响。
5.2调试一下是我遇到的问题及解决的过程。
1、除电源键外,其他键都无反应,蜂鸣器也不响。
仔细检查电路后,我发现是接口接触的问题,而且我NPN管忘了接P0口。
2、通电后,数码管不亮,能实现抢答器的功能,但一旦按下按键蜂鸣器一直响。
后来发现是我程序我的问题,仿真上显示不出来,于是我修改程序。
3、通电后,能实现抢答的功能,蜂鸣器也能正常工作了,但是数码管显示乱码,还是一秒一跳。
后来我发现本身程序有一点问题,仿真程序上的数码管和我自己用的数码管不同,只能修改程序。
最后,经过一系列的调试与修改后,终于实现了预期功能。
六心得体会经过一个星期的努力,我完成了设计任务,通过此次课程设计,我重新认识到了自学的重要性,以及学以致用的道理。
我在图书馆以及网上查阅了大量的资料,同时也认识到了查阅信息的重要作用。
通过此次的抢答器的设计,让我重新拾起了以前所学习的电子知识,及我觉得此次设计让我更加巩固了所学的知识并在设计的过程中学会了与时俱进,让我受益匪浅。
这一次课程设计的练习,很多事情我都不可以独立完成,很多方面都需要同学的帮助,我也深刻认识到自己的不足,知识的欠缺问题很大,需要在编程方面大下功夫。
同时因为我这次课程设计用的是C语言,也希望自己学的更好了以后,能用汇编语言来实现同样的功能。
还有一点很重要,不能依赖仿真软件,软件本身有很多弊端不说,仿真出来的结果也不一定正确,很容易被误导,附录电路板实物图:C程序:#include<reg51.h>unsigned char flag,num1,num2;sbit a1=P3^0;//P3口开关sbit a2=P3^1;sbit a3=P3^2;sbit a4=P3^3;sbit a5=P3^4;sbit a6=P3^5;sbit a7=P3^6;sbit a8=P3^7;sbit b1=P1^0;//P1口蜂鸣器sbit b2=P1^1;sbit b3=P1^2;unsigned char code table[]={0x80,0xf9,0x4c,0x60,0x31,0x22,0x02,0xf0,0x00,0x20};//数码管显示void display(){P2=table[num2]; //P2口数码管void init(){num2=9;TMOD=0X01;TH0=(65536-45872)/256;TL0=(65536-45872)/256;EA=1;ET0=1;TR0=1;flag=1;//全局变量P0=0xff;//P0口LED灯b1=1;P2=0xff;}void delay(int z)//延时程序{int i,j;for(i=0;i<z;i++)for(j=0;j<110;j++);}void main(){init();while(flag){if(a1==0){delay(100);//调用延时程序消除抖动if(a1==0)//判断开关a1是否按下{flag=0;P0=0xfe;//对应LED灯亮b1=0;//蜂鸣器响while(!a1);//按住时持续响b3=0;b1=1;}}if(a2==0)//同理判断a2{delay(100);if(a2==0){flag=0;P0=0xfd;b1=0;while(!a2);b1=1;}}if(a3==0)//同理判断a3 {delay(100);if(a3==0){flag=0;P0=0xfb;b1=0;while(!a3);b1=1;}}if(a4==0)//同理判断a4 {delay(100);if(a4==0){flag=0;P0=0xf7;b1=0;while(!a4);b1=1;}}if(a5==0)//同理判断a5 {delay(10);if(a5==0){flag=0;P0=0xef;b1=0;while(!a5);b1=1;}}if(a6==0)//同理判断a6{delay(10);if(a6==0){flag=0;P0=0xdf;b1=0;while(!a6);b1=1;}}if(a7==0)//同理判断a7{delay(10);if(a7==0){flag=0;P0=0xbf;b1=0;while(!a7);b1=1;}}if(a8==0)//同理判断a8{delay(10);if(a8==0){flag=0;P0=0x7f;b1=0;while(!a8);b1=1;}}}while(!flag){EA=0;if(P3!=0xff)//没有开关按下时不响也不亮{b1=0; b2=0;delay(50);}else b1=1;}}void t0_time() interrupt 1 {TH0=(65536-45872)/256; TL0=(65536-45872)/256; num1++;if(num1==20){num1=0;num2--;display();if(num2==0){EA=0;flag=0;}}}。