0单片机课程设计报告设计课题:多路抢答器学院:电气与信息工程学院专业班级:测控技术与仪器1002班姓名:学号:日期:2013-6-51目录1.任务及设计要求………………………………………………………………………22.分析和性能分析………………………………………………………………….…23.器件的选择和硬件设计…………………………………………………………34.软件设计和流程图…………………………………………………………………51)总体流程图…………………………………………………………………62)抢答器模块流程图………………………………………………………73)北京时间模块流程图…………………………………………………85.样机仿真调试和目标程序的联机调试……………………………………116.性能测试…………………………………………………………………………………117.程序…………………………………………………………………………………………111)延时函数voiddelay1ms(unsignedinttime)…………………92)PWM发声函数voidbuzzer1000Hz()等…………………………………103)键盘扫描函数unsignedcharkeyscan(void)……………………114)数码管扫函数display(unsignedcharduan,unsignedcharwei)…………………………………………………………………………………………….135)抢答函数voidqiangda()…………………………………………………….146)主函数voidmain(void)…………………………………………………………177)中断函数voidTimerInterrupt()interrupt……………………198.产品使用说明书………………………………………………………………………209.心得体会…………………………………………………………………………………22210.参考文献,教师评语……………………………………………………………25一、任务及设计要求1、任务设计并制作一个多路抢答器,在满足抢答器基本功能要求的同时具有显示和调节北京时间的功能。2、要求1)设计一多路数字抢答器2)设置一个系统清除和抢答控制开关,该开关由主持人控制3)抢答器具有锁存与显示功能。选手按动按扭,锁存相应的编号,并在LED数码管或LCD上显示,同时系统报警。优先抢答选手的编号一直保持到主持人将系统信号清除为止4)抢答器具有定时抢答功能。当主持人启动“开始”键后,计时器进行计时,同时绿灯亮(可蜂鸣器替代或显示对应标志)。参赛选手在设定时间内进行抢答,抢答有效,定时器停止工作,绿灯灭,显示器上显示选手的编号和抢答的时间,并保持到主持人将系统清除为止,如果定时时间已到,无人抢答,本次抢答无效,系统报警。中途可以暂停。5)显示定时时间,可倒数显示6)定时时间进入最后十秒时,可用蜂鸣器提醒7)显示北京时间,可调整二、分析和性能分析1.通过按键实现选手的抢答,主持人的开始,暂停,清零,北京时间调节信号。由于按键是有限的,用较少的按键实现这些功能则需要按键的复用,也就是不同模块中按键的功能是不同的。选手抢答需要在检测到按键时,通过行扫描法分析判断抢答成功选手的按键编号。主持人开始按键按下时倒计时开始。暂停按键按下时,程序进入死循环,同时倒计时暂停,跳出死循环的方法就是按下开始按键。清零按键按下时,抢答程序结束,屏幕显示北京时间,等待下一次抢答。北京时间调节,通过四个按键实现时和分的加减,同时不影响定时器工作。2.警告声音是采用无源蜂鸣器发声。利用PWM给蜂鸣器不同频率的占空比都为50%的脉冲波,再通过延时发出声音。为了声音的不同,采用了不同的频率,有1000Hz,500Hz,333Hz,200Hz.3.北京时间功能采用T0计时器中断来实现。ADuC848的coreclock频率默认为1.572864MHz,定时器0的时钟为coreclock,1572864=65536*24。故将定时器0设置为16位计数模式,且初值为0,无需在定时器溢出中断中给定时器赋初值(中断溢出就开始执行中断程序,计数器为加法计数器,从0加到65536)。每365536个coreclock周期将产生一次中断,在中断处理程序中累计中断次数,当有24次中断产生时即为1秒,进行计时。同时产生中断,在数码管上显示。4.由于矩阵键盘和左边三位数码管I/O口冲突,为了显示的避免误操作,采用了五位数码管显示,用电子手表的形式显示北京时间。抢答器模式下,右起第五位数码管显示选手编号,右起最后两位显示抢答剩余时间,当抢答时间到没选手抢答时,结果显示特殊符号。5.抢答开始提示有一个绿色的LED实现,通过P2^5给高电平时发光。三、元件清单,硬件设计1.元件清单:1)MCU:选用ADUC848芯片,coreclock为1.572864MHz。带PWM脉宽调制功能。2)数码管:五个共阴极的数码管,用作显示数据。由于I/O的驱动能力有限,因此是用PNP来驱动数码管的段,用NPN来进行数码管的位选。段码在低电平有效,位码在高电平有效3)键盘:使用矩阵键盘,使用16个按键,最多可以满足13名选手进行抢答。4)LED:一个绿色的LED,正极接P2^5,阴极接地。5)无源蜂鸣器:采用PWM控制发声。6)下载程序芯片:与PC机的通信使用RS232协议,使用的通信芯片是MAX2322.硬件设计:2.1电源模块2.2最小系统,P0口接上拉电阻42.3下载程序芯片(MAX232)2.4键盘,数码管5S3SW-PBS4SW-PBS5SW-PBS6SW-PBS7SW-PBS8SW-PBS9SW-PBS10SW-PBS11SW-PBS12SW-PBS13SW-PBS14SW-PBS15SW-PBS16SW-PBS17SW-PBS18SW-PBLIE3LIE2LIE1LIE0HANG0HANG1HANG2HANG3DVDDQ12N390620KR71KR5Q42N390620KR121KR10Q72N390620KR171KR15Q102N390620KR221KR20Q22N390620KR81KR6Q52N390620KR131KR11Q82N390620KR181KR16Q112N390620KR231KR21D0D1D2D3D4D5D6D7DS0DS1DS2DS3DS4DS5DS6DS7DVDDDVDDQ32N3904Q62N3904Q92N3904Q122N390410KR910KR1410KR1910KR24Q132N390410KR27DVDDDVDDDISCTRL0DISCTRL1DISCTRL2DISCTRL3DISCTRL4Q142N3904Q152N3904Q162N390410KR2810KR3010KR32LIE0LIE1LIE2BIT0BIT1BIT2BIT3BIT4BIT5BIT6BIT710KR2910KR3110KR3310KR34DVDD10K12345678161514131211109R1D8LED0D7LED0D6LED0D5LED0D4LED0D3LED0D2LED0D1LED0D0D1D2D3D4D5D6D7A11B7C4D2E1F10G5DP3BIT112BIT29BIT38BIT46SEG41DS0DS1DS2DS3DS4DS5DS6DS7A11B7C4D2E1F10G5DP3BIT112BIT29BIT38BIT46SEG42DS0DS1DS2DS3DS4DS5DS6DS7BIT0BIT1BIT2BIT3BIT4BIT5BIT6BIT7四.软件设计和流程图1.软件设计分析了产品需要具有功能及工程任务和指标。这个多路抢答器功能有多路抢答器,北京时间,及其抢答过程中主持人的开始、暂停、清零,报警器的发声,LED显示。因此将抢答器这个小工程分成X个模块:LED显示模块,发声模块及PWM控制模块,数码管显示模块,按键扫描模块,功能选择模块。2.数码管扫描采用动态扫描法。先选中位选,再将七段码送出,延时一段时间,接着是点亮下一个,完成一轮后则扫描程序结束。全过程由display(unsignedcharduan,unsignedcharwei)函数实现。但是,关键在于延时选择多长时间,延时太短则数码管点不亮或是不清晰,延时太长则会不连续或是影响后面的程序的执行如键盘扫描,而这个时间是需要调试的。3.键盘扫描aduc848芯片比较特殊性,其P1口不具备驱动能力只能读入,而且读入前要先将P1口置0,这点与AT89C51完全不同,如果不仔细阅读说明书,按键的的扫描将是永远无解。键盘还有另一个问题,就是使用“闭环”还是“开环”。6“闭环”的按键就是等待按键直到有按键按下才会退出按键扫描,而“开环”则不需要等到按键,只要没有按键就执行其后面的程序但是有一点,他必须用在循环中,而且一般是用在while(1)之中,进行循环扫描。关于延时程序,也是要考虑的,如果程序写了但是没有调用就会占用code和data区,而data区直接寻址仅仅128B,故延时选择合适的延时时间作为单位。4.北京时间运用定时器0,16位计数方式实现。计数器是加一计数器,当加到65535,即1s钟时定时器产生中断,同时对现实的时间进行刷新。由于在本产品的设计中我们只采用了一个中断,因此不存在中断的优先级,中断的嵌套。因此不会对中断的发生时间产生影响。同时coreclock的稳定,保证了时钟的稳定可靠。5.倒计时与报警提示倒计时采用延时程序完成,利用1ms延时函数delay1ms(unsignedchar),执行1000后延时就为1s。每个1s对数码管显示的段码进行刷新。报警功能通过蜂鸣器实现,在特定的时间给蜂鸣器占空比为50%的,频率不相同的脉冲波,发出不同的报警提示音。抢答开始提示有一盏绿色的LED来反映。但允许抢答时刻,给抢答器的控制引脚送高电平,抢答器发光,当抢答暂停、抢答时间到、已抢答中任一种情况发生时,绿灯熄灭。流程图:1.总体流程图开始初始化按键扫描按键判断抢答模式时钟调节北京时间模式模式13号键Else10、1114、15键72.抢答器模块流程图抢答模式初始化限时30s绿灯亮Limit=0?数码管扫描,延时1sLimit=10?发出最后10s警报,响2s按键扫描按键判断Limit——数码管扫描按键判断?按键扫描Led灯熄灭抢答成功提示音响一次数码管扫描Limit=0?时间到30s警告按键判断按键扫描北京时间模式YNYYNNElseElseElse按键0~1214号键13号键15号键返回段码и绿灯灭83.北京时间模块流程图Sec59?NYMin++Min59NMin59Min=0Hour++YHour23NHour=0Hour=0数码管扫描按键扫描按键判断13号Else15号抢答模式10号11号14号Hour23Min59Hour1Min1Hour++Hour=0Min++Min=0Hour--Hour=23Min--Min=59YYYYYYYYNNNNSec++T0初值为0每过1sT0中断一次Y9五、机仿真调试和目标程序的联机调试1.样机仿真调试;编写各个硬件模块的测试程序,测试样机是否有故障如果有故障则进行样机的修改,直到没有故障位置。2.目标程序的联机调试:将编写好的目标程序下载到样机里,观察结果是否与程序中预期的一样,如果不一样则进行程序修改直到没有问题位置。六、综合性能测试用时间准确表与北京时间和抢答器的倒计时进行比较,如果发现误差超出的要求的范围,那么就修改定时器的定时时间或是在程序中加入延时程序,将时间调整到满足性能指标。七、程序程序分模块进行测试,然后将模块整合成函数,和主函数编写在一个文件中。#includeaduc848.h/***蜂鸣器的I/O端口***/sbitfmq=P2^6;//蜂鸣器的控制端口/***LED绿灯的I/O端口***/sbitLED=P2^5;/***北京时