资源描述
通信121班,姓名:康健(八路抢答器) 单片机课程设计项目名称 基于51单片机八路抢答器设计 专业班级 通信121班 学生姓名 康健 指导教师 刘文礼 2014年12 月10日II摘 要本课程设计提出八路抢答器,随着科学技术的不断发展,促使着人民学习科学、学习技术、学习知识的手段多种多样。抢答器已经广泛应用于各种智力和知识竞赛场合。本设计是以八路抢答为基本理念,主要采用单片机为核心器件,利用单片机的定时器/计数器定时和记数的原理,将软、硬有机的结合起来,使得系统能够正确的进行计时完成的设计,同时采用了数字显示器直接指示,自动锁存显示结果,并自动复位的设计思想,用开关做键盘输出,用扬声器发声提示,设计具有系统结构简单、反应快、功能强大、可靠性好、操作简单、实用性强的特点。达到了准确、公平、公正的水平。具有直观的判断出第一抢答者的意义。关键字:抢答器; 单片机; 复位;键盘;扬声器;IIIAbstractThe proposed eight way responder of the curriculum design, with the development of science and technology, a variety of means to urge people to learn science, learning technology, learning knowledge diversity. The contest has been widely applied in all kinds of intelligence and knowledge competitions occasions. The design is based on the eight road as the basic concept, mainly uses the microcontroller as the core device, the use of single-chip timer / counter timing and counting principle, the soft and hard organic combination, so that the system can complete the design time are correct, at the same time adopts digital display direct instructions, automatic latch display results. And design idea of automatic reset, switching to do with the keyboard output using speaker voice prompts, the design has the characteristics of simple structure, fast response, the system of powerful functions, good reliability, simple operation and strong practicability. To achieve an accurate and fair level. With intuitive judgment of the first responder significance.Keywords: responder; MCU; justice;目 录第1章 绪论11.1 数字抢答器的概述11.2 设计要求及目的1第2章 硬件电路设计22.1 总体原理图22.2 时钟频率电路的设计32.3 复位电路的设计42.4 显示电路的设计42.5 键盘扫描电路的设计52.6 发声62.7 系统复位6第3章 系统软件设计83.1 系统方框图83.2 程序流程图83.3 程序10第4章 实物焊接与调试134.1 焊接134.1.1 检测各元件134.1.2 对PCB板进行排版及连线134.1.3 焊接的问题及解决154.1.4 焊接的技巧和注意事项154.2、调试164.2.1 系统的调试164.2.2 具体调试16第5章 实物与仿真.175.1 仿真图.175.2 实物图.17总结19参考文献20附件1 程序.21第1章 绪论1.1 数字抢答器的概述 单片机把我们带入了智能化的电子领域,许多繁琐的系统若由单片机进行设计,便能收到电路更简单、功能更齐全的良好效果。若把经典的电子系统当作一个僵死的电子系统,那么智能化的现代电子系统则是一个具有“生命”的电子系统。而随着技术的进步,单片机与串口通信的结合更多地应用到各个电子系统中已成一种趋势。本设计就是基于单片机设计抢答系统,通过串口通信动态传输数据,使抢答系统有了更多更完善的功能。单片机系统的硬件结构给予了抢答系统“身躯”,而单片机的应用程序赋予了其新的“生命”,使其在传统的抢答器面前具有电路简单、成本低、运行可靠等特色。对于抢答器我们大家都知道那是用于选手做抢答题时用的,选手进行抢答,抢到题的选手来回答问题。抢答器不仅考验选手的反应速度同时也要求选手具备足够的知识面和一定的勇气。选手们都站在同一个起跑线上,体现了公平公正的原则。1.2 设计要求及目的(1)设计一个可供8人进行的抢答器。(2)系统设置复位按钮,按动后,重新开始抢答。(3)抢答器开始时数码管显示序号0,选手抢答实行优先显示,优先抢答选手的编号一直保持到主持人将系统清除为止。抢答后显示优先抢答者序号,同时发出音响。,并且不出现其他抢答者的序号。(4)抢答器具有定时抢答功能,且一次抢答的时间有主持人设定,本抢答器的时间设定为30秒,当主持人启动“开始”开关后,定时器开始减计时,同时蜂鸣器有短暂的声响。(5)设定的抢答时间内,选手可以抢答,这时定时器停止工作,显示器上显示选手的号码和抢答时间。并保持到主持人按复位键。(6)当设定的时间到,而无人抢答时,本次抢答无效,扬声器报警发出声音,并禁止抢答。定时器上显示00。第2章 硬件电路设计一.系统硬件设计为使硬件电路设计尽可能合理,应注意以下几方面:(1) 尽可能采用功能强的芯片,以简化电路,功能强的芯片可以代替若干普通芯片,随着生产工艺的提高,新型芯片的的价格不断下降,并不一定比若干普通芯片价格的总和高。(2) 留有设计余地。在设计硬件电路时,要考虑到将来修改扩展的方便。因为很少有一锤定音的电路设计,如果现在不留余地,将来可能要为一点小小的修改或扩展而被迫进行全面返工。(3) 程序空间,选用片内程序空间足够大的单片机,本设计采用AT89C51单片机。(4) I/O端口,在样机研制出来后进行现场试用时,往往会发现一些被忽视的问题,而这些问题不是靠单纯的软件措施来解决的。如有些新的信号需要采集,就必须增加输入检测端;有些物理量需要控制,就必须增加输出端。如果在硬件电路设计就预留出一些I/O端口,虽然当时空着没用,那么用的时候就派上用场了。2.1 总体原理图 总电路图2-1 2.2 时钟频率电路的设计单片机必须在时钟的驱动下才能工作.在单片机内部有一个时钟振荡电路,只需要外接一个振荡源就能产生一定的时钟信号送到单片机内部的各个单元,决定单片机的工作速度。 外部振荡源电路图2-2 一般选用石英晶体振荡器。此电路在加电大约延迟10ms后振荡器起振,在XTAL2引脚产生幅度为3V左右的正弦波时钟信号,其振荡频率主要由石英晶振的频率确定。电路中两个电容 C1,C2的作用有两个:一是帮助振荡器起振;二是对振荡器的频率进行微调。C1,C2的典型值为30PF。单片机在工作时,由内部振荡器产生或由外直接输入的送至内部控制逻辑单元的时钟信号的周期称为时钟周期。其大小是时钟信号频率的倒数,常用fosc表示。如时钟频率为12MHz,即fosc=12MHz,则时钟周期为1/12s。2.3 复位电路的设计单片机的第9脚RST为硬件复位端,只要将该端持续4个机器周期的高电平即可实现复位,复位后单片机的各状态都恢复到初始化状态,其电路图如图所示: 复位电路图2-3值得注意的是,在设计当中使用到了硬件复位和软件复位两种功能,由上面的硬件复位后的各状态可知寄存器及存储器的值都恢复到了初始值,而前面的功能介绍中提到了倒计时时间的记忆功能,该功能的实现的前提条件就是不能对单片机进行硬件复位,所以设定了软复位功能。软复位实际上就是当程序执行完毕之后,将程序指针通过一条跳转指令让它跳转到程序执行的起始地址。2.4 显示电路的设计显示功能与硬件关系极大,当硬件固定后,如何在不引起操作者误解的前提下提供尽可能丰富的信息,全靠软件来解决。 显示电路图2-42.5 键盘扫描电路的设计键盘是人与微机系统打交道的主要设备。关于键盘硬件电路的设计方法也可以在文献和书籍中找到,配合各种不同的硬件电路,这些书籍中一般也提供了相应的键盘扫描程序。站在系统监控软件设计的立场上来看,仅仅完成键盘扫描,读取当前时刻的键盘状态是不够的,还有不少问题需要妥善解决,否则,人们在操作键盘就容易引起误操作和操作失控现象。在单片机应用中键盘用得最多的形式是独立键盘及矩阵键盘。 键盘图2-5在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式。在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。这样,一个端口(如P1口)就可以构成1乘8的8个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键)。由此可见,在需要的键数比较多时,采用矩阵法来做键盘是合理的。 2.6 发声我们知道,声音的频谱范围约在几十到几千赫兹,若能利用程序来控制单片机某个口线的“高”电平或低电平,则在该口线上就能产生一定频率的矩形波,接上喇叭就能发出一定频率的声音,若再利用延时程序控制“高“”低”电平的持续时间,就能改变输出频率,从而改变音调,使喇叭发出不同的声音。 发声电路图2-62.7 系统复位使CPU进入初始状态,从0000H地址开始执行程序的过程叫系统复位。从实现系统复位的方法来看,系统复位可分为硬件复位和软件复位。硬件复位必须通过CPU外部的硬件电路给CPU的RESET端加上足够时间的高电位才能实现。上电复位,人工按钮复位和硬件看门狗复位均为硬件复位。硬件复位后,各专用寄存器的状态均被初始化,且对片内通用寄存器的内容没有影响。但是,硬件复位还能自动清除中断激活标志,使中断系统能够正常工作,这样一个事实却容易为不少编码人员所忽视。软件复位就是用一系列指令来模拟硬件复位功能,最后通过转移指令使程序从0000H地址开始执行。对各专用寄存器的复位操作是容易的,也没有必要完全模拟,可根据实际需要去主程序初始化过程中完成。而对中断激活标志的清除工作常被遗忘,因为它没有明确的位地址可供编程。有的编程人员用020000(LJMP 0000H)作为软件陷阱,认为直接转向0000H地址就完成了软件复位,就是这类错误的典型代表。软件复位是使用软件陷阱和软件看门狗后必须进行的工作,这时程序出错完全有可能发生在中断子程序中,中断激活标志已置位,它将阻止同级中断响应。由于软件看门是高级中断,它将阻止说要中断响应,由此可见清除中断激活标志的重要性。第3章 系统软件设计软件任务分析和硬件电路设计结合进行,哪些功能由硬件完成,哪些任务由软件完成,在硬件电路设计基本定型后,也就基本上决定下来了。3.1 系统方框图STC89C52主控制器模块电源键盘扫描电路 4位数码管显示模块蜂鸣器报警模块 系统方框图3-1 3.2 程序流程图在本设计中包括了以下八个主要的程序:主程序;非法抢答序;抢答时间调整程序;倒计时程序;正常抢答处理程序;犯规处理程序;显示及发声程序。主流程图如图所示: 图3-23.3 程序#include#include#define uchar unsigned char#define uint unsigned intuchar c=0;uchar sc;uchar code leddata= /共阳数码管的段码 0xc0, /0 0xf9, /1 0xa4, /2 0xb0, /3 0x99, /4 0x92, /5 0x82, /6 0xf8, /7 0x80, /8 0x90, /9 ;void DelayMS(uint ms) /延迟x ms函数uchar t;while(ms-)for(t=0;t120;t+); /计时120次,延时1msvoid main(void)TMOD=0x01;/选择工作方式TH0=0x3c;/定时器T0初始值的高八位TL0=0xaf;/定时器T0初始值的低八位EA=1;/关闭总中断ET0=1;/打开T0中断while(1)P2=0x06;/打开位选P1=leddatasc%10; /显示个位DelayMS(100);/延迟100msP2=0x04; /打开位选DelayMS(100); /延迟100msP2=0x06; /打开位选P2=0x02; /打开位选P1=leddatasc/10;/显示十位DelayMS(100); /延迟100msvoid keyinter() interrupt 1/中断函数EA=0;/打开总中断TH0=0x3c;TL0=0xaf;/50ms定时器装值c+;if(c=20)/如果定时1s时间到c=0;/重新开始定时sc+;/让数码管显示的时间if(sc=30)/如果到30ssc=0;/数码管显示0s第4章 焊接调试过程与问题分析4.1 焊接主要步骤:1.检测各元件2. 对PCB板进行排版及布线3.焊接分步骤完成:4.1.1 检测各元件用万用表检查、了解元件;(1)一般电阻电阻的阻值是可以根据电阻上的色环判断:1)、四环电阻阻值等于前两位对应的数值乘上第三位对应的倍率,第四位为误差范围;2)、五环电阻阻值等于前三位对应的数值乘上第四位对应的倍率,第五位为误差范围。 电阻R0为五环型色环颜色:棕 黑 黑 棕 棕阻值=10010 =1000误差为1%实测阻值为992本实验R1用两个R0的电阻并联成; 图4-1 电阻R0 电阻R2为四环型色环颜色 :绿 棕 红 金阻值=5110 =5100=5.1k误差为5%实测阻值为5.02k 图4-2 电阻R2 光敏电阻A、在光照情况下,测量光敏电阻的阻值,即为光敏电阻的亮阻;B、在遮光情况下,测量光敏电阻的阻值,即为光敏电阻的暗阻;(2)发光二极管发光二极管有两个接线柱,一个长的一个短的,长端为正极,短端为负极。可以利用万用表测量两种接法时的电阻值,可知道当正极接到长端,负极接到短端的时候,发光二极管的阻值比较小,此即是二极管的单向导通特性。(3) 可变电阻可变电阻有三个引脚,它的接法和滑动变阻器的接法一样,有三端接入式和两端接入式,本实验采用两端接入式比较简单。采用两端接入时,其中一端必须接在中间的那个引脚上,另外一个在剩余的两个引脚中,可以任选一个(两者的区别是,滑动头的转动方向不一样)。选择好引脚后,可以将其接在万用表上,测其阻值的大小,转动滑动头,看顺时针转动时阻值是增加还是减小,这样做对调试电路时有好处,可以知道自己旋转的方向是增加电阻还是减小电阻。(4) 蜂鸣器本实验所用的蜂鸣器和平时看到的扬声器、耳机等发声器件有微小的差别,它里边多了一个振荡器,输入电流时振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场。振动膜片在电磁线圈和磁铁的相互作用下,周期性地振动发声。可以尝试的将其正负极接上电源,可看到只有正负极接入正确时,蜂鸣器才会发声。也可根据蜂鸣器上的引线长度按来判断正负极(长正短负)。所以在实验室中要把蜂鸣器的正负极接正确。(5) 三极管三极管有两种,一种是PNP管,一种是NPN管,本实验用的是PNP管。三极管有三个引脚,分别是基极(b),发射极(e),集电极(c)。本实验所用的三极管判断极点的方法是,面对有型号标记的一面,然后看着三个引脚,从左到右依次是,发射极(e),基极(b),集电极(c)。接线时三个极端不能接错,否则三极管就没有起到作用。 图4-3三极管符号、管脚排列集电极和基极之间形成集电结,发射极和基极之间形成发射结,三极管起放大作用的条件,发射结正向偏置,集电结反向偏置。正向偏置时必须达到正向偏置电压,即为导通,否则,为截止状态。4.1.2 对PCB板进行排版及连线本实验所用的面包板的内部链接在破坏背面的绝缘胶带的情况下,可以揭开胶带看其内部线路的构造,以防不知道内部线路差错电路。当然最好的办法是:用测试电路在插孔上来回实验,猜想验证其内部构造。 1)、首先了解面包板在连线和焊接的注意事项。2)、了解实验原件及器材后,按照原理图在面包板上连接电路;3)、焊接要注意,电子电路在焊接时,应遵循的规则。4.1.3 焊接的问题及解决一般来说,造成硬件问题的首要问题就是焊接了,也就是说焊接的好与坏直接响产品的正常运行。造成焊接质量不高的常见原因是:焊锡用量过多,形成焊点的锡堆积;焊锡过少,不足以包裹焊点。冷焊。焊接时烙铁温度过低或加热时间不足,焊锡未完全熔化、浸润、焊锡表面不光亮(不光滑),有细小裂纹(如同豆腐渣一样!)。夹松香焊接,焊锡与元器件或印刷板之间夹杂着一层松香,造成电连接不良。若夹杂加热不足的松香,则焊点下有一层黄褐色松香膜;若加热温度太高,则焊点下有一层碳化松香的黑色膜。对于有加热不足的松香膜的情况,可以用烙铁进行补焊。对于已形成黑膜的,则要吃净焊锡,清洁被焊元器件或印刷板表面,重新进行焊接才行。焊锡连桥。指焊锡量过多,造成元器件的焊点之间短路。这在对超小元器件及细小印刷电路板进行焊接时要尤为注意。焊剂过量,焊点明围松香残渣很多。当少量松香残留时,可以用电烙铁再轻轻加热一下,让松香挥发掉,也可以用蘸有无水酒精的棉球,擦去多余的松香或焊剂。焊点表面的焊锡形成尖锐的突尖。这多是由于加热温度不足或焊剂过少,以及烙铁离开焊点时角度不当浩成的内。最小系统的电路不工作,首先应该确认电源电压是否正常。用电压表测量接地引脚跟电源引脚之间的电压,看是否符合电源电压,常用的是5V左右。接下来就是检测复位引脚的电压是否正常,EA引脚的电压要正常为5V左右。4.1.4 焊接的技巧和注意事项1、焊锡之前应该先插上电烙铁的插头,给电烙铁加热。 2、焊接时,焊锡与电路板、电烙铁与电路板的夹角最好成45度,这样焊锡与电烙铁夹角成90度。3、焊接时,焊锡与电烙铁接触时间不要太长,以免焊锡过多或是造成漏锡;也不要过短,以免造成虚焊。4、元件的腿尽量要直,而且不要伸出太长,以1毫米为好,多余的可以剪掉。5、焊完时,焊锡最好呈圆滑的圆锥状,而且还要有金属光泽。4.2 调试4.2.1 系统的调试系统调试包括硬件调试和软件调试,而且两者是密不可分的。我们设计好的硬件电路和软件程序,只有经过联合调试,才能验证其正确性;软硬件的配人情况以及是否达到设计任务的要求,也只有经过调试,才能发现问题并加以解决、完善,最终开发成实用产品。硬件调试分单元电路调试和联机调试,单元电路试验在硬件电路设计时已经进行,这里的调试只是将其制成印刷电路板后试验电路是否正确,并排除一些加工工艺性错误(如错线、开路、短路等)。这种调试可单独模拟进行,也可通过开发装置由软件配合进行,硬件联机调试则必须在系统软件的配合下进行。软件调试一般包括分块调试和联机调试两个阶段。程序的分块调试一般在单片机开发装置上进行,可根据所调程序功能块的入口参量初值编制一个特殊的程序段,并连同被调程序功能块一起在开发装置上运行;也可配合对应硬件电路单独运行某程序功能块,然后检查是否正确,如果执行结果与预想的不一致,可以通过单步运行或设置断点的方法,查出原因并加以改正,直到运行结果正确为止。这时该 程序功能块已调试完毕,可去掉附加程序段。其它程序功能块可按此法进行调试。程序联机调试就是将已调试好的各程序功能块按总体结构联成一个完整程序,在所研制的硬件电路上运行。从而试验程序整体运行的完整性、正确性和与硬件电路的配合情况。在联调中可能会有某些支路上的程序、功能块因受条件制约而得不到相应的输入参数,这时,调试人员应创造条件进行模拟调试。在联调中如发现硬件问题也应及时修正,直到单片机系统的软件、硬件全部调试成功为止。系统调试完成后,还要进行一段时间的试运行,从而检验系统的稳定性和抗干扰能力,验证系统功能是否达到设计要求,是否达到预期的效果。4.2.2 具体调试1、具有清零装置和抢答控制,可由主持人操纵避免有人在主持人说“开始”前提前抢答违反规则。2、具有定时功能,在60秒内无人抢答表示所有参赛选手获参赛队对本题弃权。3、60秒时仍无人抢答其报警电路工作表示抢答时间耗尽并禁止抢答。4、 显示抢答时间, 按一下减一秒,按一下-1s键,时间LED上会显示改变后的时间,调整范围为0s60s。 5、主持人按抢答开始键,会有提示音,并立刻进入抢答倒计时(预设60s抢答时间),如有选手抢答,会有提示音,并会显示其号数,只有第一个按抢答的选手有效。 6、如倒计时期间,主持人想停止倒计时可以随时按停止按键,系统会自动进入准备状态,等待主持人按抢答开始进入下次抢答计时。 第5章 实物与仿真5.1 仿真图片5.2实物图片结论 经过近两个星期的努力,在老师和同学的讨论和帮助下,我成功地完成了八路抢答器的设计,通过此次课程设计,我重新认识到了对书本上的知识要独立运用的道理。在抢答器设计过程中,发现了很多细节性的问题,也出现了很多错误,经过和同学们研究、商讨最后都解决,感觉团队协作能力是非常有必要的!通过此次的抢答器的设计,让我重新拾起了以前所学习的电子知识和C语言的编程,也使我加深了对单片机及接口技术的理解和应用,由于知识水平的局限,设中可能会存在着一些不足,我真诚的接受老师和同学的批评和指正。参考文献1.C程序设计 ,谭浩强,清华大学出版社,20052.单片机原理及接口技术(第3版),李朝青,北京航空航天大学出版社, 3. 单片机系统设计与实例指导,冯育长,西安电子科技大学出版社,20074. 单片机课程设计实例指导,李光飞,北京航天航空大学出版社,2004附件1:程序#include /调用单片机头文件#define uchar unsigned char /无符号字符型 宏定义变量范围0255#define uint unsigned int /无符号整型 宏定义变量范围065535#include eeprom52.h/数码管段选定义 0 1 2 3 4 56 7 8 9uchar code smg_du=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,/ AB C D E F不显示 0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff; /断码sbit smg_we1 = P33; /数码管位选定义8sbit smg_we2 = P34;sbit smg_we3 = P35;sbit smg_we4 = P36;sbit beep = P37; /蜂鸣器IO口定义 uchar flag_start; /开始抢答标志位uchar flag_weigui; /抢答违规标志位uchar dis_smg4 = 0xc0,0xbf,0xa4,0xb0; /数码管显示缓冲区uchar smg_i = 4; /显示数码管的个位数uchar miao,s_time; /时间uchar flag_num; /号码 uchar menu_1 ; /菜单设置变量bit flag_200ms = 1; /200ms的标志位uchar flag_qd_en; /抢答uchar i;/*把数据从单片机内部eeprom中读出来*/void read_eeprom() /读出保存数据s_time = byte_read(0x2000);a_a = byte_read(0x2058);/*把数据保存到单片机内部eeprom中*/void write_eeprom()/保存数据SectorErase(0x2000);byte_write(0x2000, s_time);byte_write(0x2058,a_a);/*开机自检eeprom初始化*/void init_eeprom() /开始初始化保存的数据read_eeprom(); /读出保存数据if(a_a != 20)a_a = 20;s_time = 30;write_eeprom(); /保存数据/*数码管位选函数*/void smg_we_switch(uchar i)switch(i)case 0: smg_we1 = 0; smg_we2 = 1; smg_we3 = 1; smg_we4 = 1; break;case 1: smg_we1 = 1; smg_we2 = 0; smg_we3 = 1; smg_we4 = 1; break;case 2: smg_we1 = 1; smg_we2 = 1; smg_we3 = 0; smg_we4 = 1; break;case 3: smg_we1 = 1; smg_we2 = 1; smg_we3 = 1; smg_we4 = 0; break;/* 名称 : delay_1ms()* 功能 : 延时1ms函数* 输入 : q* 输出 : 无*/void delay_1ms(uint q) /延时1ms函数uint i,j;for(i=0;iq;i+)for(j=0;j 1)menu_1 = 0;if(key_can1 = 9) /开始抢答键flag_start = 1;for(i=0;i2;i+)beep = beep;delay_1ms(20);if(key_can = 99)s_time = 99;dis_smg0 = smg_dus_time % 10;/显示设置值dis_smg1 = smg_dus_time / 10 % 10;/显示设置值write_eeprom();/保存数据if(key_can = 7)if(s_time 3)s_time - ;/设置倒计时减1dis_smg0 = smg_dus_time % 10; /显示设置值dis_smg1 = smg_dus_time / 10 % 10;/显示设置值write_eeprom();/保存数据/*倒计时处理*/void djs_dis() /倒计时处理static uchar value;if(flag_start = 1) & (flag_weigui = 0)value +;if(value = 5) /1svalue = 0;if(miao != 0)miao -; /倒计时减一 if(miao = smg_i)i = 0;P1 = 0xff; /消隐 smg_we_switch(i);/位选P1 = dis_smgi;/*定时器0初始化程序*/void time_init()/ 定时器0初始化程序EA = 1; /开总中断TMOD = 0X01; /定时器0、工作方式1ET0 = 1; /开定时器0中断 TR0 = 1; /允许定时器0定时/*主程序*/ void main()static uchar value;beep = 0; /开机叫一声 delay_1ms(100);P0 = P1 = P2 = P3 = 0XFF; /IO口全部输出为1init_eeprom(); /开始初始化保存的数据time_init(); / 定时器0初始化程序miao = s_time;while(1)if(flag_weigui = 0)key(); /独立按键程序key_1(); /主持人独立按键程序if(key_can 20) | (key_can1 20)key_with(); /按键处理函数if(flag_200ms = 1)flag_200ms = 0;if(menu_1 = 0)dis_smg3 = smg_dumiao / 10 % 10;/显示设置值dis_smg2 = smg_dumiao % 10;/显示设置值dis_smg1 = 0xbf;dis_smg0 = smg_duflag_num;/显示选手号码if(flag_weigui = 1) /违规了显示FFdis_smg3 = smg_du15;/显示设置值dis_smg2 = smg_du15;/显示设置值if(value = 0) /违规提示报警value = 1;for(i=0;i= 100)value = 0;flag_200ms = 1;30
展开阅读全文