课程设计(论文)-基于AT89C51单片机的八路抢答器报告.doc_第1页
课程设计(论文)-基于AT89C51单片机的八路抢答器报告.doc_第2页
课程设计(论文)-基于AT89C51单片机的八路抢答器报告.doc_第3页
课程设计(论文)-基于AT89C51单片机的八路抢答器报告.doc_第4页
课程设计(论文)-基于AT89C51单片机的八路抢答器报告.doc_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

单片机课程设计论文单片机课程设计论文题 目 基于单片机的简易抢答器设计 学 院 通信与电子工程学院 专业班级 电子084班 学生姓名 指导教师 2011年 12 月 10 日27摘 要数字抢答器的设计与制作可以通过两种方法来实现,一种是可以采用数字电路的方法实现,但是其电路结构复杂,大概需要十几片数字集成块,其功能也主要依赖于数字电路的各功能模块的组合来实现,而且有成本较高的缺点;相对而言,若使用单片机来设计制作,其功能的实现主要途径是软件编程,由此大大降低了电路的复杂性和成本。所以本次的数字抢答器设计我采用单片机来实现。本设计方案以at89c51单片机为控制核心,采用模块化的设计方案,可以实现8位数字抢答器的各项基本功能,例如定时抢答、显示抢答选手号码,主持人控制等等。 关键词:at89c51; 单片机; 8位; 数字抢答器 目 录摘 要i第1章 绪论11.1 at89c51单片机简介11.2 8位抢答器设计要求3第2章 硬件电路设计42.1 硬件电路的总体框图42.2电路器件的选择42.3硬件电路设计图42.4工作原理6第3章 系统软件设计及仿真93.1 程序设计93.2系统设置流程图103.3 程序代码(见附录)113.4 10秒计时(无人抢答)113.5 10秒计时(有人抢答)113.6 违规时电路图12结论13参考文献14附录15主程序15查询程序16非法抢答处理程序17抢答时间r1调整程序17抢答时间r2调整程序18倒计时程序19整场抢答处理程序21犯规抢答程序23显示程序24延时程序25读抢答按键数据口程序25发声程序26t0口溢出中断(响铃程序)26t1口溢出中断(计时程序)26第1章 绪论1.1 at89c51单片机简介at89c51是一种带4k字节闪烁可编程可擦除只读存储器的低电压,高性能cmos8位微处理器,俗称单片机。89c2051是一种带2k字节闪烁可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除100次。该器件采用atmel高密度非易失存储器制造技术制造,与工业标准的mcs-51指令集和输出管脚相兼容。其管脚图如下图1-1图1-1 at89c51管脚图管脚说明如下: vcc:供电电压。 gnd:接地。 p0口:p0口为一个8位漏级开路双向i/o口,每脚可吸收8ttl门电流。当p1口的管脚第一次写1时,被定义为高阻输入。p0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在fiash编程时,p0 口作为原码输入口,当fiash进行校验时,p0输出原码,此时p0外部必须被拉高。 p1口:p1口是一个内部提供上拉电阻的8位双向i/o口,p1口缓冲器能接收输出4ttl门电流。p1口管脚写入1后,被内部上拉为高,可用作输入,p1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在flash编程和校验时,p1口作为第八位地址接收。 p2口:p2口为一个内部上拉电阻的8位双向i/o口,p2口缓冲器可接收,输出4个ttl门电流,当p2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,p2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。p2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,p2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,p2口输出其特殊功能寄存器的内容。p2口在flash编程和校验时接收高八位地址信号和控制信号。 p3口:p3口管脚是8个带内部上拉电阻的双向i/o口,可接收输出4个ttl门电流。当p3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,p3口将输出电流(ill)这是由于上拉的缘故。 p3口也可作为at89c51的一些特殊功能口。 口管脚 备选功能 p3.0 rxd(串行输入口) p3.1 txd(串行输出口) p3.2 /int0(外部中断0) p3.3 /int1(外部中断1) p3.4 t0(记时器0外部输入) p3.5 t1(记时器1外部输入) p3.6 /wr(外部数据存储器写选通) p3.7 /rd(外部数据存储器读选通) p3口同时为闪烁编程和编程校验接收一些控制信号。 rst:复位输入。当振荡器复位器件时,要保持rst脚两个机器周期的高电平时间。 ale/prog:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在flash编程期间,此引脚用于输入编程脉冲。在平时,ale端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ale脉冲。如想禁止ale的输出可在sfr8eh地址上置0。此时, ale只有在执行movx,movc指令是ale才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ale禁止,置位无效。 /psen:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/psen有效。但在访问外部数据存储器时,这两次有效的/psen信号将不出现。 /ea/vpp:当/ea保持低电平时,则在此期间外部程序存储器(0000h-ffffh),不管是否有内部程序存储器。注意加密方式1时,/ea将内部锁定为reset;当/ea端保持高电平时,此间内部程序存储器。在flash编程期间,此引脚也用于施加12v编程电源(vpp)。 xtal1:反向振荡放大器的输入及内部时钟工作电路的输入。 xtal2:来自反向振荡器的输出。1.2 8位抢答器设计要求本次设计的数字抢答器将具有以下功能:(1)抢答器同时供8名选手或8个代表队比赛,分别用8个按钮s0s7表示。(2)设置一个系统清除和抢答控制开关s,该开关由主持人控制。(3)抢答器具有锁存与显示功能。即选手按动按钮,锁存相应的编号,扬声器发出声响提示,并在led数码管上显示选手号码。选手抢答实行优先锁存,优先抢答选手的编号一直保持到主持人将系统清除为止。此外还有一些扩展功能:(1)抢答器具有定时抢答功能,且一次抢答的时间由主持人设定(如30秒)。当主持人启动“开始”键后,定时器进行减计时。(2) 参赛选手在设定的时间内进行抢答,抢答有效,定时器停止工作,显示器上显示选手的编号和抢答的时间,并保持到主持人将系统清除为止。(3) 如果定时时间已到,无人抢答,本次抢答无效,系统报警并禁止抢答,定时显示器上显示00。第2章 硬件电路设计2.1 硬件电路的总体框图本数字抢答器的硬件电路总体框图如下图2-1:按键与按钮电路复位等辅助电路数码管显示电路总体开关图2-1 数字抢答器电路框图2.2 电路器件的选择本次设计的数字抢答器采用at89c51单片机作为系统的控制单元。就抢答器而言,通常可采用液晶显示或数码管显示。由于一般的段式液晶屏,需要专门的驱动电路,而且液晶显示作为一种被动显示,可视性相对较差;对于具有驱动电路和微处理器接口的液晶显示模块(字符或点阵),一般多采用并行接口,对微处理器的接口要求较高,占用资源多。另外,at89c51本身无专门的液晶驱动接口,因此,本时钟采用数码管显示方式。数码管作为一种主动显示器件,具有亮度高、价格便宜等优点,而且市场上也有专门的时钟显示组合数码管。本次的设计我采用的是7seg-mpx4-cc数码管。此外还有按钮、扬声器、电容、电阻,导线等等。2.3 硬件电路设计图经过以上的种种考虑,我确定了该数字抢答器的硬件电路设计方案,如下页的图2-2:图2-2 数字抢答器硬件电路图2.4 工作原理1.at89c51,其管脚图如下图2-3:图2-3 at89c51管脚图vcc:供电电压。 gnd:接地。 p0口:p0口为一个8位漏级开路双向i/o口,每脚可吸收8ttl门电流。当p1口的管脚第一次写1时,被定义为高阻输入。p0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在fiash编程时,p0 口作为原码输入口,当fiash进行校验时,p0输出原码,此时p0外部必须被拉高。 p1口:p1口是一个内部提供上拉电阻的8位双向i/o口,p1口缓冲器能接收输出4ttl门电流。p1口管脚写入1后,被内部上拉为高,可用作输入,p1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在flash编程和校验时,p1口作为第八位地址接收。 p2口:p2口为一个内部上拉电阻的8位双向i/o口,p2口缓冲器可接收,输出4个ttl门电流,当p2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,p2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。p2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,p2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,p2口输出其特殊功能寄存器的内容。p2口在flash编程和校验时接收高八位地址信号和控制信号。 p3口:p3口管脚是8个带内部上拉电阻的双向i/o口,可接收输出4个ttl门电流。当p3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,p3口将输出电流(ill)这是由于上拉的缘故。 p3口也可作为at89c51的一些特殊功能口。 口管脚 备选功能 p3.0 rxd(串行输入口) p3.1 txd(串行输出口) p3.2 /int0(外部中断0) p3.3 /int1(外部中断1) p3.4 t0(记时器0外部输入) p3.5 t1(记时器1外部输入) p3.6 /wr(外部数据存储器写选通) p3.7 /rd(外部数据存储器读选通) p3口同时为闪烁编程和编程校验接收一些控制信号。 rst:复位输入。当振荡器复位器件时,要保持rst脚两个机器周期的高电平时间。 xtal1:反向振荡放大器的输入及内部时钟工作电路的输入。 xtal2:来自反向振荡器的输出。2.主持人按键,如下图2-4:图2-4 主持人按键当主持人按下开始键,倒计时电路开始计时,选手们可以进行抢答,抢答有效。若主持人未按下开始键,选手抢答,视为犯规,抢答无效并报警。3.选手抢答按键,如下图2-5:图2-5 选手抢答按键在主持人按下开始键时即可抢答,抢答成功便会在数码管上显示相应的数字。4.7seg-mpx4-cc数码管,如下图2-6:图2-6 7seg-mpx4-cc数码管数码管作为一种主动显示器件,具有亮度高、价格便宜等优点,而且市场上也有专门的时钟显示组合数码管。第一位显示5.蜂鸣器,如下图2-7:图2-7 蜂鸣器当有选手抢答时会有提示音,当有选手违规抢答时响个不停,直到主持人按下结束键才会停止。第3章 系统软件设计及仿真3.1程序设计软件任务分析时,应将各执行模块一一列出,并为每一个执行模块进行功能定义和接口定义(输入输出定义)。在各执行模块进行定义时,将要牵扯到的数据结构和数据类型问题也一并规划好。各执行模块规划好后,就可以监控程序了。首先根据系统功能和键盘设置选择一种最适合的监控程序结构。相对来讲,执行模块任务明确单纯,比较容易编程,而监控程序较易出问题。这如同当一名操作工人比较容易,而当一个厂长就比较难了。软件任务分析的另一个内容是如何安排监控软件和各执行模块。整个系统软件可分为后台程序(背景程序)和前台程序。后台程序指主程序及其调用的子程序,这类程序对实时性要求不是太高,延误几十ms甚至几百ms也没关系,故通常将监控程序(键盘解释程序),显示程序和打印程序等与操作者打交道的程序放在后台程序中执行;而前台程序安排一些实时性要求较高的内容,如定时系统和外部中断(如掉电中断)。也可以将全部程序均安排在前台,后台程序为“使系统进入睡眠状态”,以利于系统节电和抗干扰。当抢答完毕时,会在数码管上显示抢答者数字号码提示以表示抢答成功,可以实现8路抢答。在显示时使用的是数码管显示。在本设计中根据实际情况采用的是动态显示方法。软件去抖动,如果“开始键”按下就向下执行,否则就跳到开始。采用发声报警,起到报警作用。主持人按抢答开始键,会有提示音,并立刻进入抢答倒计时(预设10s抢答时间),如有选手抢答,会有提示音,并会显示其号数并立刻进入回答倒计时(预设10s抢答时间),不进行抢答查询,所以只有第一个按抢答的选手有效。 如倒计时期间,主持人想停止倒计时可以随时按停止按键,系统会自动进入准备状态,等待主持人按抢答开始进入下次抢答计时。如果主持人未按抢答开始键,而有人按了抢答按键,犯规抢答,led上不断闪烁“选手号码 f”并响个不停,直到按下停止 键为止。 3.2 系统设置流程图系统设置流程图,如下图3-1: 初始化部分kz= =0启动中断,数码管开始计时若有选手抢答中断停止,数码管显示选手的标号及所用的时间结束开始yynn图3-1 系统流程图抢答器定时器中断流程图,如下图3-2: 定时器0中断1秒时间到?中断返回n秒加1数码管显示秒值y图3-2 抢答器定时器中断流程图3.3 程序代码(见附录)3.4 10秒计时(无人抢答)主持人按下开始抢答键后,进入抢答10s倒计时,显示仿真电路如下图3-3:图3-3 10秒计时(无人抢答)3.5 10秒计时(有人抢答)主持人按下抢答开始键,若有选手进行抢答,显示其号码,并进入10秒倒计时的仿真电路图如下图3-4:图3-:4 10秒计时(有人抢答)3.6 违规时电路图主持人按下抢答开始键之前,抢答选手若按下抢答键,视为违规,并显示其号码,同时报警。例如若6号选手抢答违规,则仿真电路如下图3-5:图3-5违规时电路图结论为期十几天的课程设计转瞬即逝。回顾向这些天来的点点滴滴,我感触颇多:首先我对基础知识的掌握远没有我想象的那么好;然后在课程设计实践中会碰到一些问题是光靠书本知识解决不了的;还有就是虽然有一些困难和辛苦,但每当解决一个新问题的时候,那种自豪感的确美妙。最终经过自己的努力,在指导老师和同学们的大力帮助下,我较好地完成了本次的课程设计。通过这次的课程设计,我获益匪浅:(1)通过本次课程设计进一步理解和掌握了以前所学的基础课程知识和原理;(2)本次课程设计提高了我独立思考和分析问题解决问题的能力;(3)对wave、proteus等软件的使用有了进一步的了解,熟悉了印刷电路板设计的步骤和方法;(4)熟悉了常用电子器件的型号,类别,性能以及使用;(5)通过理论分析、设计计算、制作电路图、在图书馆和互联网查资料等活动,基本养成了我仔细严谨的工作和学习作风。 在此,我对我们的指导老师周喜权老师和热心帮助过我的同学表示衷心的谢意。参考文献1 余发山.单片机原理机机及应用技术.中国矿业大学出版社1998.3.2 张迎新.单片机初级教程-单片机基础.北京航空航天大学出版社2006.83 李广第.单片机基础.北京航空航天大学出版社 1998.3.附录本次数字抢答器的软件设计方案,即汇编语言程序如下:ok equ 20h;抢答开始标志位 ring equ 22h;响铃标志位 org 0000h ajmp main org 0003h ajmp int0sub org 000bh ajmp t0int org 0013h ajmp int1sub org 001bh ajmp t1int org 0040h主程序main: mov r1,#30;初设抢答时间为30s mov r2,#60;初设答题时间为60s mov tmod,#11h;设置未定时器/模式1 mov th0,#0f0h mov tl0,#0ffh;越高发声频率越高,越尖 mov th1,#3ch mov tl1,#0b0h;50ms为一次溢出中断 setb ea setb et0 setb et1 setb ex0 setb ex1;允许四个中断,t0/t1/int0/int1 clr ok clr ring setb tr1 setb tr0;一开始就运行定时器,以开始显示fff.如果想重新计数,重置th1/tl1就可以了查询程序start: mov r5,#0bh mov r4,#0bh mov r3,#0bh acall display;未开始抢答时候显示fff jb p3.0,next;ddddddd acall delay jb p3.0,next;去抖动,如果开始键按下就向下执行,否者跳到非法抢答查询 acall bark;按键发声 mov a,r1 mov r6,a;送r1-r6,因为r1中保存了抢答时间 setb ok;抢答标志位,用于count只程序中判断是否查询抢答 mov r7,#01h ;读抢答键数据信号标志,这里表示只读一次有用信号 mov r3,#0ah;抢答只显示计时,灭号数 ajmp count;进入倒计时程序,查询有效抢答的程序在count里面next: jnb p1.0,false1 jnb p1.1,false2 jnb p1.2,false3 jnb p1.3,false4 jnb p1.4,false5 jnb p1.5,false6 jnb p1.6,false7 jnb p1.7,false8 ajmp start非法抢答处理程序false1: mov r3,#01h ajmp errorfalse2: mov r3,#02h ajmp errorfalse3: mov r3,#03h ajmp errorfalse4: mov r3,#04h ajmp errorfalse5: mov r3,#05h ajmp errorfalse6: mov r3,#06h ajmp errorfalse7: mov r3,#07h ajmp errorfalse8: mov r3,#08h ajmp error抢答时间r1调整程序int0sub:mov a,r1 mov b,#0ah div ab mov r5,a mov r4,b mov r3,#0ah acall display;先在两个时间led上显示r1 jnb p3.4,inc0;p3.4为+1s键,如按下跳到inco jnb p3.5,dec0;p3.5为-1s键,如按下跳到deco jnb p3.1,back0;p3.1为确定键,如按下跳到backo ajmp int0subinc0: mov a,r1 cjne a,#63h,add0;如果不是99,r2加1,如果加到99,r1就置0,重新加起。 mov r1,#00h acall delay1 ajmp int0subadd0: inc r1 acall delay1 ajmp int0subdec0: mov a,r1 jz setr1;如果r1为0, r1就置99, dec r1 acall delay1 ajmp int0subsetr1: mov r1,#63h acall delay1 ajmp int0subback0: reti 抢答时间r2调整程序int1sub: mov a,r2 mov b,#0ah div ab mov r5,a mov r4,b mov r3,#0ah acall display jnb p3.4,inc1 jnb p3.5,dec1 jnb p3.1,back1 ajmp int1subinc1: mov a,r2 cjne a,#63h,add1 mov r2,#00h acall delay1 ajmp int1subadd1: inc r2 acall delay1 ajmp int1subdec1: mov a,r2 jz setr2 dec r2 acall delay1 ajmp int1subsetr2: mov r2,#63h acall delay1 ajmp int1subback1: reti 倒计时程序repeat:mov a,r2 ;使用锦囊时重新计时 mov r6,a clr ring count: mov r0,#00h;重置定时器中断次数 mov th1,#3ch mov tl1,#0b0h;重置定时器recount:mov a,r6;r6保存了倒计时的时间,之前先将抢答时间或回答时间给r6 mov b,#0ah div ab;除十分出个位/十位 mov 30h,a;十位存于(30h) mov 31h,b;个位存于(31h) mov r5,30h;取十位 mov r4,31h;取个位 mov a,r6 subb a,#07h jnc larger;大于5s跳到larger,小于等于5s会提醒 mov a,r0 cjne a,#0ah,full;1s中0.5s向下运行 clr ring ajmp checkfull: cjne a,#14h,check;下面是1s的情况,响并显示号数并清r0,重新计 setb ring mov a,r6 jz quit;计时完毕 mov r0,#00h dec r6;一秒标志减1 ajmp checklarger: mov a,r0 cjne a,#14h,check;如果1s向下运行,否者跳到查停/显示 dec r6;计时一秒r6自动减1 mov r0,#00hcheck: jnb p3.1,quit;如按下停止键退出 jnb ok,checkk ;只在回答倒计时才有效 ajmp nexttcheckk: jnb p3.0,repeat ;判断是否使用锦囊nextt: acall display jb ok,accout;如果是抢答倒计时,如是则查询抢答,否者跳过查询继续倒数(这里起到锁抢答作用) ajmp recountaccout: mov a,36h jnb acc.0,true1 jnb acc.1,true2 jnb acc.2,true3 jnb acc.3,true4 jnb acc.4,true5 jnb acc.5,true6 jnb acc.6,tz1 jnb acc.7,tz2 ajmp recounttz1: jmp true7tz2: jmp true8 quit: clr ok;如果按下了停止键执行的程序 clr ring ajmp start整场抢答处理程序true1: acall bark mov a,r2 mov r6,a;抢答时间r2送r6 mov r3,#01h clr ok;因为答题的计时不再查询抢答,所以就锁了抢答 ajmp counttrue2:acall bark mov a,r2 mov r6,a mov r3,#02h clr ok ajmp counttrue3:acall bark mov a,r2 mov r6,a mov r3,#03h clr ok ajmp counttrue4:acall bark mov a,r2 mov r6,a mov r3,#04h clr ok ajmp counttrue5:acall bark mov a,r2 mov r6,a mov r3,#05h clr ok ajmp counttrue6: acall bark mov a,r2 movr6,a mov r3,#06h clr ok ajmp counttrue7:acall bark mov a,r2 mov r6,a mov r3,#07h clr ok ajmp counttrue8:acall bark mov a,r2 mov r6,a mov r3,#08h clr ok ajmp count犯规抢答程序error: mov r0,#00h mov th1,#3ch mov tl1,#0b0h mov 34h,r3;犯规号数暂存与(34h)here: mov a,r0 cjne a,#06h,flash;0.3s向下运行-灭并停响 clr ring mov r3,#0ah mov r4,#0ah mov r5,#0ah;三灯全灭 ajmp check1flash: cjne a,#0ch,check1;下面是0.8s的情况,响并显示号数并清r0,重新计 setb ring mov r0,#00h mov r3,34h;取回号数 mov r5,#0bh mov r4,#0bh;显示ff和号数 ajmp check1check1: jnb p3.1,quit1 acall display ajmp herequit1: clr ring clr ok ajmp start显示程序display: mov dptr,#dat1;查表显示程序,利用p0口做段选码口输出/p2低三位做位选码输出, mov a,r3 movc a,a+dptr mov p2,#0feh mov p0,a acall delay

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论