电气工程学院单片机课程设计实验报告班级:…………姓名:学号:…………设计题目:四位竞赛抢答器设计时间:…………评定成绩:评定教师:1目录摘要...................................................................................................................................................1一、调试过程..................................................................................................................................31.1调试详细步骤和过程..............................................................................................................31.2软件调试遇到的问题及解决过程说明..................................................................................51.3软件仿真运行和硬件实际验证的区别..................................................................................6二、运行效果..................................................................................................................................61、Proteus电路图........................................................................................................................62、滑动变阻器在0%时,倒计时最大时间。...........................................................................63、滑动变阻器在50%时,倒计时最大时间.............................................................................74、滑动变阻器在100%时,倒计时最大时间...........................................................................75、选手进行抢答.........................................................................................................................86、无人抢答,系统警告.............................................................................................................97、硬件仿真..............................................................................................................................10抢答、计分、计时结束...............................................................................................................11三、系统优化................................................................................................................................113.1软件设计...............................................................................................................................113.2硬件设计...............................................................................................................................112摘要单片机自20世纪70年代问世以来,在电子信息、电气工程、工程自动化控制、机电一体化、智能仪器仪表、家用电器等诸多领域得到广泛应用,已对人类社会产生重大影响。由于Intel公司的8051内核单片机获得的巨大成功,以8051内核技术为主导的单片机也是目前我国多数高校都在讲授的机型。尽管各种新型的8位、16位以及32位单片机不断推出,但在目前的应用中,8位单片机尤其是各种8051内核的单片机仍站主导地位。本次设计利用了8051芯片、4*4矩阵键盘(仅用2*3)、串行A\D、D\A转换芯片PCF8591、8位共阴极数码管(仅用4位)、音频放大芯片LM386以及喇叭,实现四位竞赛抢答单片机系统,可同时供4名选手或4个代表队参加比赛,每队均有一个抢答按钮,同时给节目主持人“抢答开始”及“系统清除”按键。本抢答器具有编号锁存、抢答计分、时间显示和音响提示等功能。本次课程设计让我初步掌握了竞赛抢答单片机系统的工作原理和基本思想,同时也让我对书本所学到的知识了解更加深入。关键字:AT89C51单片机;矩阵键盘;数码管;PCF8591;LM386;Keil5软件;Proteus仿真软件3一、调试过程1.1调试详细步骤和过程(1)在Keil中编好程序后,点击编译运行。图1编译运行结果(2)编译运行无错误后,还需要对项目进一步设置,以满足要求。图2晶振频率设置4图3勾选CreateHEXfile图4生成HEX文件(3)生成好HEX文件后,将其导入到Proteus里的AT89C51芯片中。图5导入HEX文件至AT89C51(4)点击运行按钮进行软件仿真。仿真时,显示数值与旋钮抽头电压相关,调动旋钮,按下复位键,数值改变,说明PCF8591工作正常。按下选手抢答按键,系统正常提示2s警告;5主持人按下开始后,选手抢答正确计分与显示编号,程序正常;主持人按下系统清除按钮,选手编号与分数消失,显示倒计时最大时间,程序正常。(5)记录软件仿真结果,同时去机房进行硬件调试。1.2软件调试遇到的问题及解决过程说明(1)PCF8591芯片与单片机通信发生错误,无论程序使用应答还是非应答,在I2C调试器里,都显示进行的是应答,同时发送的数据最后一位均不正确。图6I2C调试器发现错误后经过仔细排查,发现代码中的一处for循环i=1,程序出错,修改后,发送数据正确,但应答位仍然不正确。再次进行排查错误,发现是Noack程序里,sda没有设成1,修改为0后,I2C调试器显示符合预期。(2)仿真后,发现音响完全没声音,无论给它什么频率,都不发出声音。图7使用该器件无声音后检查电路,发现电路没有问题,想到可能是元器件的问题,后将其改为SPEAKER,发现声音正常发出,问题解决。(3)七段数码管显示错误,发现使用了不是实验箱上的共阴极数码管,修改位7SEG-MPX4-CC-BLUE后,问题解决。61.3软件仿真运行和硬件实际验证的区别Proteus仿真软件使用起来十分顺手,但是在程序比较复杂,定时器溢出频率高时,仿真容易卡、慢。Proteus仿真软件进行仿真时,不需要画晶振电路和复位电路,是有效减少工作量,还可以使用虚拟示波器、I2C调试器等器件进行问题查找、结果确认,十分方便与快捷。但其仅仅运行在理想的条件下,缺少了现实里的许多因素影响,容易导致我们思考问题简单化。硬件实际验证时,发现了很多软件仿真时没发现的问题,执行程序时,速度比仿真软件快很多,反应十分迅速,无论定时器溢出频率多高,都不会卡、慢,相比之下,结果更舒适。硬件实际验证时,需要考虑到硬件的局限性,进行程序与实际晶振频率的匹配,I/O口与相应模块的连线,总体需要考虑更多因素,不再是理想情况。二、运行效果1、Proteus电路图图8Proteus接线图2、滑动变阻器在0%时,倒计时最大时间。Time=20+255*30/255=507图9倒计时最大时间3、滑动变阻器在50%时,倒计时最大时间Time=20+128*30/255=344、滑动变阻器在100%时,倒计时最大时间Time=20+0*30/255=2085、选手进行抢答图10一号选手抢到9图11三号选手抢到图12三号选手第二次抢到6、无人抢答,系统警告10图13倒计时结束无人抢答,系统警告7、硬件仿真图14旋钮调到最小,显示20图15调节旋钮,时间改变11抢答、计分、计时结束硬件仿真时,实际晶振频率与程序中所使用的不同,导致倒计时的速度很快。后修改程序,时间正常。三、系统优化3.1软件设计刚开始设计时,在主函数里发送方波以驱动扬声器发声,后发现声音频率变化,可能是每次主函数执行时间不同。后修改为使用定时器T1产生方波信号来驱动扬声器发声,修改后,声音频率正常,仿真却很卡。询问老师后,了解到是仿真软件发出脉冲的时间变慢了,这没法去除。本来准备使用独立式键盘,后翻阅实验指导书了解到,实验箱上只有4个独立按键可供使用,后调整为2*3矩阵键盘,修改相应程序以便完成硬件验证。3.2硬件设计一开始,使用Proteus里的电路图进行硬件连接,连接好后硬件验证发现数码管的a段一直亮,仔细检查后发现是实验箱I/O口出现故障,之后连续换了三12四个实验箱,终于找到了一个实验箱数码管显示正确,但却有一个数码管不亮,确认是I/O口故障后,将程序里的循环变量0x7f改为0x77,将第一位线接到另一个I/O口后,数码管显示正确。之后程序正常运行起来,但是倒计时却不符合要求,仔细检查后,发现实验箱晶振频率为11.0592Mhz,我的程序里面用的是12Mhz,修改了各个定时器的初值,重新硬件验证,现象变为正常。由于实际的运行有很多不确定的因素,因此软件仿真不能完全符合实际要求,具体的优化还需要进行实际电路验证来完成。四、设计总结这次课程设计,成功的实现了四位竞赛抢答器的功能,并对I2C通信协议有了更深刻的理解,也更清晰的了解到了Proteus软件仿真的局限性,以及硬件验证的复杂性。本次课程设计,使用的AT89C51芯片虽然已经较为老旧,但是也能实现像这种简单而又实用的功能,也让我明白了程序的书写更为重要。其次也了解了74LS244和74LS240芯片的作用和用法,虽然在编写程序过程中有很多不会的点,但通过查找资料和反复修改,最终成功的编写出了源程序并实现了设计所要求的功能。对一些典型的算法及应用也有了更加深刻的理解,对之后的编程有着很大的帮助,大大促进了对单片机及C51编程的学习。本次设计,我分了4个模块进行分析,第一部分是矩阵键盘的扫描、第二部分是倒计时功能的实现、第三部分是音响提示功能、第四部分是模数转换功能。这四部分中,只有第四部分模数转换比较困难,花费了我大量的时间,才得以完成,其他三个部分单独实现都比较简单,但是组合起来实现时,各个程序之间的关系就变得复杂起来,这让我花费了许多时间使其成功组合在一起。过程中虽然出现很多问题但