8位电子智能抢答器(单片机)

更新时间:2024-06-04 01:56:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

郑州轻工业学院民族职业学院

单片机课程设计报告

8位电子智能抢答器(单片机)

姓名 学号 专业班级 指导老师

2009年12月22日

目 录

引言??????????????????????????3 1 单片机的应用技术……………………………………?…??3 2 系统设计要点…………………………………………?????3 3 抢答器的硬件设计要求…………………………………?????3 2.2 计分器系统的软件流程?????????????……???3 2.3 计分器的硬件设计要求????????????????5 2.4 人机交互程序设计……………………………………………?????5 2.4.1计分器系统的软件键盘扫描程序流程图???????????.6 2.5 抢答器系统软件的流程图??????????????????7 2.6 抢答数码显示软件程序设计????????????????8 2.7 音乐音频输出程系流程图??????????????????9 3 各模块方案选择和论证…………………………???????10 3.1 抢答器显示模块??????????????????10 3.2 控制器模块????????????????????10 3.3 电源方案的选择????????????????????11 3.4 枪答器键盘的选择??????????????????11 3.5 计分器显示模块????????????????????13 3.6 计分器键盘的选择????????????????????14 4 模块的最终方案……………………………………………………14 5 电子智能抢答器系统的硬件电路设计???????????14 5.1计分器的电路设计……………………………………………………14 5.1.1计分器系统的硬件电路????????????????14 5.1.2计分显示模块???????????????????16 5.2抢答器的电路设计????????????????????16 5.2.1抢答电路模块?????????????????????16 5.2.2抢答按键模块的设计????????????????17 6 单片机干扰防护????????????????????18 6.1 采用隔离技术????????????????????18 6.2 正确的接地措施????????????????????19 结论…………………………………………………………………….19

谢 辞?????????????????????????.19 参考文献??????????????????????…20 计分器显示程序(附1)??????????????????21 抢答器软件程序(附2)??????????????????26

摘 要

随着电子技术的飞速发展,基于单片机的控制系统已广泛应用于工业、农业、电力、电子、智能楼宇等行业,微型计算机作为嵌入式控制系统的主体与核心,代替了传统的控制系统的常规电子线路。同时楼宇智能化的发展与成熟,也为基于单片机的照明控制系统的普及与应用奠定了坚实的基础。

电子智能抢答计分器在抢答过程中,为了知道哪一组或哪一位选手先答题,必须要设计一个系统来完成这个任务。如果在抢答中,靠视觉是很难判断出哪组先答题。利用单片机系统来设计抢答器,使以上问题得以解决,即使两组的抢答时间相差几微秒,也可分辨出哪组优先答题。抢答组数可以在八组以内任意使用,本系统设计为模块形式采用九针插头进行连接,系统工作原理本系统采用AT89S51单片机作为核心。控制系统的五个模块分别为:单片机最小系统(六位并行数码显示、4*4矩阵式键盘)、显示模块、显示驱动模块、抢答开关模块、音乐音频输出模块。

关键词:单片机;矩阵式键盘;显示;驱动;抢答

Abstract

With the rapid development of electronic technology, the control system based on SCM has been widely used in industry, agriculture, electricity, electronics, intelligent buildings, industry, micro-computers embedded control system as the main and core, instead of the traditional control System of conventional electronic circuits. At the same time the development of intelligent buildings and maturity, but also based on the lighting control system MCU and popularity of application laid a solid foundation. Points for electronic smart Qiangda Qiangda in the process, in order to know which group or which one player to answer, we must design a system to complete this task. If the Qiangda, rely on the visual is very difficult to determine which group to answer. SCM system used to design Qiangda, bringing the above problems are resolved, even

if the two groups Qiangda the difference in time a few microseconds, which can also be distinguished group of priority answer. Qiangda group of eight can within the arbitrary use of the system designed to be modular form of a nine-pin plugs to connect the system working principle of the system used AT89S51 SCM as a core. Control system of the five modules are: MCU minimum system (six parallel digital display, 4 x 4 matrix keyboard), modules, display driver module, Qiangda switch modules, music, audio output module.

Key words: SCM,modules, display driver module, Qiangda switch modules

引言

电子技术和微型计算机的迅速发展,促进微型计算机测量和控制技术的迅速发展和广泛应用,单片机(单片微型计算机)的应用已经渗透到国民经济的各个部门和领域,它起到了越来越重要的作用。单片微型计算机就是将中央处理单元、存储器、定时/计数器和多种接口都集成到一块集成电路芯片上的微型计算机。因此一块芯片就构成了一台计算机。它已成为工业控制领域、智能仪器仪表、尖端武器、日常生活中最广泛使用的计算机。

电子智能抢答器分别用两片单片机控制,分别为计分器和抢答器。计分器的工作原理是采用最小系统,用4x4键盘来输入是选手需要加减进行分数的加减输入。主板上的6个数码显示,加几分的数,按确定键后分数值从串口P3.0,P3.1传到计分器显示模块上再通过数码管驱动模块显示。抢答器的工作原理是采用单片机最小系统,用查询式键盘进行抢答。采用串行静态显示组号。

1 单片机的应用技术 单片机由硬件系统与软件系统组成。硬件系统是指构成微机系统的实体与装置,通常由运算器、控制器、存储器、输入接口电路和输入设备、输出接口电路和输出设备等组成。其中运算器和控制器一般做在一个集成芯片上,统称中央处理单元(Central Processing Unit),简称CPU,是微机的核心部件。CPU配上存放程序和数据的存储器、输入/输出(Input/Output,简称I/O)接口电路以及外部设备即构成单片机的硬件系统。软件系统是微机系统所使用的各种程序的总称,人们通过它对微机进行控制并与微机系统进行信息交换,使微机按照人的意图完成预定的任务。软件系统与硬件系统共同构成完整的单片微型计算机系统,两者相辅相成,缺一不可。

2 系统设计要点

系统设计主要包括硬件和软件两大部分,依据控制系统的工作原理和技术性能,将硬件和软件分开设计。硬件设计部分包括电路原理图、合理选择元器件、绘制线路图,然后对硬件进行调试、测试,以达到设计要求。软件设计部分,首先在总体设计中完成系统总框图和各模块的功能设计,拟定详细的工作计划;然后进行具体设计,包括各模块的流程图,选择合适的编程语言和工具,进行代码

- 3 -

设计等;最后是对软件进行调试、测试,达到所需功能要求。

在系统设计中设计方法的选用是系统设计能否成功的关键。硬件电路是采用结构化系统设计方法,该方法保证设计电路的标准化、模块化。硬件电路的设计最重要的选择用于控制的单片机,并确定与之配套的外围芯片,使所设计的系统既经济又高性能。硬件电路设计还包括输入输出接口设计,画出详细电路图,标出芯片的型号、器件参数值,根据电路图在仿真机上进行调试,发现设计不当及时修改,最终达到设计目的。软件设计的方法与开发环境的选取有着直接的关系,本系统由于是采用51系列单片机,因此使用Keil C语言进行开发。此编程工具相比汇编语言具有结构化、适用范围大、可移植性好等特点。本系统软件设计采用模块化系统设计方法,先编写各个功能模块子程序,然后进行组合与调整,经过调试后,达到设计功能要求。 2.1 抢答器的硬件设计要求

抢答器同时供8名选手或8个代表队比赛,分别用8个按钮S1~S8表示。设置一个系统清除和抢答控制按扭,该按扭由主持人控制。抢答器具有锁存与显示功能。即选手按动按钮,锁存相应的编号,并在LED数码管上显示,同时扬声器发出报警声响提示。选手抢答实行优先锁存,优先抢答选手的编号一直保持到主持人将系统清除为止。

2.2 计分器系统的软件流程

- 4 -

开始 初始化 为1全部统一加减分 检测P3.7状态 为0单组加减分 扫描键盘S1~S8是那一个组要加分,并组号显示在主板上(六个数码管) 加分按键S14 减分按键S15 加分按键S12 减分按键S13 键盘录入分值,并显示在主板上(六个数码管) 键盘录入分值,并显示在主板上(六个数码管) 确定S16 P1.7输入一个单次脉冲,并保持高电平(锁存数据由P3.0 P3.1串口输出显示分数) 2.3 计分器的硬件设计要求

图1

加减计分有三位显示,用串行通信口,显示分数,用4*4阵列式键盘进行同时加减和单组加分。 2.4 人机交互程序设计

系统的人机交互程序设计,主要是解决按键的扫描与信息的显示,让操作者

- 5 -

能够灵活地控制系统工作。键盘用来输入指令,发光数码管用来显示单片机的状态,这是一个比较简单的人机交互形式。 2.4.1计分器系统的软件键盘扫描程序流程图

本系统的键盘采用的是4×4矩阵式键盘,矩阵式键盘由行线和列线组成,按键位于行、列线的交叉点上。一个4×4的行、列结构可以构成一个含有16个按键的键盘,显然,在按键数量较多时,矩阵式键盘较之独立式按键键盘要节省很多I/O口。

矩阵式键盘中,行、列线分别连接到按键开关的两端,在进行键盘扫描时,首先把矩阵键盘列线的第一根线置高,然后分别再检测矩阵键盘行线是否有高电平的信号,如果有信号,那么就证明这根行线与第一根列线相交处的按键被按下了,单片机就读入这个键值。如果所有的四根行线都没有信号,那么就把第一根列线置低,把第二根列线置高,再一次检测行线有没有信号,然后依次类推。 由于键盘扫描的速度很快,而人按键总会持续一定的时间,因此只要单片机处在等待输入的状态,这个键盘扫描程序基本上不会错过任何一个按键信号。由于一般人按键会有抖动,抖动信号造成键盘扫描时会出现一些错误的信号,要不就是扫描不进数据,要不就是重复输入很多次数据,因此需要有一个消除抖动的程序。让单片机不响应一些相关的抖动信号,而只响应一次确实存在的按键信号。消抖动程序是这样实现的,当检测到一个脉冲信号时,并不立即认为是一次按键,而是延时一段时间以后再进行检测,如果三次检测都有信号,那么就认为有一次按键动作发生了。延时的选择非常重要,太快了,起不到消除抖动的效果,太慢了又让键盘太不灵活,错过较多的按键信号。键盘扫描程序的流程图如图2所示。

- 6 -

开 始将上一根列线置低将下一根列线置高初始化依次扫描行线将第一根列线置高NN依次扫描行线有信号吗YN延时一次是第四根列线吗Y将第四根列线置低N返回一个值有信号吗Y延时一次有信号吗YN再延时一次有信号吗Y再延时一次有信号吗YN返回对应键值N有信号吗Y返回对应键值

键盘扫描程序流程图2

2.5 抢答器系统软件的流程图

抢答组数可以在八组以内任意使用,其流程如图3

- 7 -

开始 初始化 是 第一组 否 是 第二组 否 第三组 是 显示组号 开音乐 否 第八组是 图3

2.6 抢答数码显示软件程序设计

采用静态显示,显示器由9个共阳极数码管组成。输入只有两个信号,它们是串行数据线DIN和移位信号CLK。9个串/并移位寄存器芯片74LS164首尾相连,了九位共阳极七段数码管,共阳极数码管的8个发光二极管的阳极(二极管正端)连接在一起,通常,公共阳极接高电平(一般接电源),七它管脚接段驱动电路输出端。当某段驱动电路的输出端为低电平时,则该端所连接的字段导通并点亮,根据发光字段的不同组合可显示出各种数字或字符。此时,要求段驱动电路能吸收额定的段导通电流,还需根据外接电源及额定段导通电流来确定相应的限流电阻,这里的限流电阻选为100Ω。数码显示程序流程如图4。

- 8 -

子程序入口初始化查表取段码段码送驱动显示位码送译码器选通低位数码管显示缓冲区左移数字是否显示完NY关显示返回 数码显示程序流程图4

2.7 音乐音频输出程系流程图

音乐音频输出由P3.7输出,如图5

- 9 -

4 各模块方案选择和论证

3.1 抢答器显示模块

在步进电机控制过程中,系统需要对运行的时间和转向、相数做必要的显示。我们考虑有以下两种显示方案。

方案一:使用液晶屏显示时间。液晶显示屏(LCD)具有轻薄短小、低耗电量、无辐射危险,平面直角显示以及影像稳定不闪烁等优势,可视面积大,画面效果好,分辨率高,抗干扰能力强的特点。但由于只需要显示时间和转向、相数这样的数字,信息量比较少,且由于液晶是以点阵的模式显示各种符号,需要利用控制芯片创建字符库,编程工作量大,控制器的资源占用较多,其成本也偏高。在使用时,不能有静电干扰,否则易烧坏液晶显示芯片,不易维护。

方案二:在使用传统的数码管显示。数码管具有:低能耗、低损耗、低压、寿命长、耐老化、防晒、防潮、防火、防高(低)温,对外界环境要求低,易于维护,同时其精度高,称量快,精确可靠,操作简单。数码显示是采用BCD编码显示数字,程序编译容易,资源占用较少。

静态显示,电路图中所示。显示器由9个共阳极数码管组成。输入只有两个信号,它们是串行数据线DIN和移位信号CLK。9个串/并移位寄存器芯片74LS164首尾相连,每片的并行输出作为LED数码管的段码74LS164的引脚图如图6所示:

74LS164为8位串入并出移位寄存器,1、2为串行输入端,Q0-Q7为并行输出端,CLK为移位时钟脉冲上升沿移入一位;MR为清零端,低电平时并行输出为零。

根据以上的论述,采用方案二。

图6

3.2 控制器模块

控制器主要用于各模块控制对显示、抢答、音乐、计分等。控制器的选择有以下两钟方案。

方案一:采用FPGA(现场可编程门列阵)作为系统的控制器。FPGA可以实现各种复杂的逻辑功能,规模大,密度高,它将所有器件集成在一块芯片上,

- 10 -

减小了体积,提高了稳定性,并且可以应用EDA软件仿真、调试,易于进行功能扩展。FPGA采用并行的输入输出方式,提高了系统的处理速度,适合作为大规模实时系统的控制核心。但由于本设计对数据处理的速度要求不高,FPGA的高速处理的优势得不到充分体现,并且由于其集成度高,使其成本偏高,同时由于芯片的引脚较多,实物硬件电路板布线复杂,加重了电路设计和实际焊接的工作。

方案二:采用ATMEL公司的AT89C51作为系统控制器的CPU方案。单片机算术运算功能强,软件编程灵活、自由度大,可以用软件编程实现各种算法和逻辑控制,并且由于其功耗低、体积小、技术成熟和成本低等优点,使其在各个领域应用广泛。基于以上分析拟订方案二。 3.3 电源方案的选择

系统需要多个电源,AT89C51使用5V稳压电源,驱动芯片需要5-50V电压驱动,步进电机等需要12V稳压电源。

方案一:采用升压型稳压电路。用两片MC34063芯片分别将3V的电池电压进行直流崭波调压,得到5V和12V的稳压输出。只需使用两节电池,既节省了电池,又减小系统体积重量但该电路供电电流小,供电时间短,无法使相对庞大的系统稳定运作。

方案二:采用三端稳压集成7805与7812分别得到5V和12V的稳定电压。利用该方法方便简单,工作稳定可靠。

综上所述,选择方案二,采用三端稳压器电路。

3.4 枪答器键盘的选择

键盘是单片机不可缺少的输入设备,是实现人机对话的纽带。键盘按结构形式可以分为非编码键盘和编码键盘,前者用软件方法产生键码,而后者则用硬件方法来产生键码。在单片机中使用的都是非编码键盘,因为非编码键盘结构简单,成本低廉,非编码键盘的类型很多,常用的有独立式键盘,行列式键盘等。

方案一:独立式键盘

键盘接口中使用多少根I/O线,键盘中就有几个按键,键盘接口使用了8根I/O口线,该键盘就有8个按键,这种类型的键盘,其按键比较少,且键盘

- 11 -

中各按键的工作互不干扰。因此可以根据实际需要对键盘中的按键灵活的编码。如图7。

最简单的编码方式就是根据I/O输入口所直接反映的相应按键,按下的状态进行编码,称按键直接状态码,对于这样编码的独立式键盘,CPU可以通过直接读取I/O口的状态来获取按键的直接状态编码值,根据这个值直接进行按键识别,这样形式的键盘结构简单,按键识别容易。

0123P14567独立式键盘 图7 独立式键盘的缺点是需要占用比较多的I/O口线,当单片机应用系统键盘中需要的按键比较少或I/O口线比较富余时,可以采用这样类型的键盘。

方案二:行列式键盘 行列式键盘是用N条I/O线作为行线,M条I/O线作为列线组成的键盘,在行线和列线的每个交叉点上,设置一个按键中按键的个数是M*N个。这种形式的键盘结构,能够有效的提高单片机系统中I/O的利用率,列线接P1.0~P1.3行线接P1.4~P1.7,行列适用于按键输入多的情况。

CPU对键盘的扫描可以采用取程序控制的随机方式,即只有在CPU空闲是时才去扫描键盘,响应操作人员的键盘输入,但CPU在执行应用程序的过程中,不能响应键盘输入,对键盘的扫描可以采用定时方式,即利用单片机内部定时器每隔一定时间对键盘扫描一次,这样控制方式,不管键盘上有无键闭合,CPU总是定时的关心键盘状态。

在大多数情况下,CPU对键盘可能进行空扫描。为了提高CPU的效率而又能及时响应键盘输入,可以采用中断方式,既CPU平时不必扫描键盘,只要当键盘上有键盘闭合时就产生中断请求,向CPU申请中断后,立即对键盘上有键盘进性扫描,识别闭合键,并做相应的处理。

P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.732107654BA98FEDC行列式键盘图8

- 12 -

根据以上的论述,采用方案一,在本系统中采用了独立式键盘,其按键比较少,且键盘中各个按键的工作互不干扰。如图8所示。

3.5 计分器显示模块

显示模块必须要显示三位数为一组,本系统设计为八组,共要显示27位数。采用静态显示,其方案如下:

方案一:不带锁存方式。显示器由9个共阴极数码管组成。输入只有两个信号,它们是串行数据线DIN和移位信号CLK。9个串/并移位寄存器芯片74LS164首尾相连,74LS164为8位串入并出移位寄存器,1、2为串行输入端,Q0-Q7为并行输出端,CLK为移位时钟脉冲上升沿移入一位;MR为清零端,低电平时并行输出为零。实验证明在显示位数超出6位,数码管有闪烁的现象。

方案二:带锁存方式。采用带有锁存功能的移位寄存器74LS595芯片,74595的数据端:QA--QH: 八位并行输出端,可以直接控制数码管的8个段。QH': 级联输出端。我将它接下一个595的SI端。SI: 串行数据输入端。74595的控制端说明:SRCLR(10脚): 低点平时将移位寄存器的数据清零。通常接Vcc。SRCK(11脚):上升沿时数据寄存器的数据移位。QA-->QB-->QC-->...-->QH;下降沿移位寄存器数据不变。(脉冲宽度:5V时,大于几十纳秒就行了。我通常都选微秒级)RCK(12脚):上升沿时移位寄存器的数据进入数据存储寄存器,下降沿时存储寄存器数据不变。(通常我将RCK置为低电平,) 当移位结束后,在RCK端产生一个正脉冲(5V时,大于几十纳秒就行了。我通常都选微秒级),更新显示数据。13脚: 高电平时禁止输出(高阻态)。如果单片机的引脚不紧张,用一个引脚控制它,可以方便地产生闪烁和熄灭效果。比通过数据端移位控制要省时省力。74164和74595功能相仿,都是8位串行输入转并行输出移位寄存器。74164的驱动电流(25mA)比74595(35mA)的要小,14脚封装,体积也小一些。74595的主要优点是具有数据存储寄存器,在移位的过程中,输出端的数据可以保持不变。这在串行速度慢的场合很有用处,数码管没有闪烁感。与164只有数据清零端相比,595还多有输出端时能/禁止控制端,可以使输出为高阻态。 根据以上论证,采用方案二。

- 13 -

3.6 计分器键盘的选择

方案一:行列式键盘

行列式键盘是用N条I/O线作为行线,M条I/O线作为列线组成的键盘,在行线和列线的每个交叉点上,设置一个按键中按键的个数是M*N个。这种形式的键盘结构,能够有效的提高单片机系统中I/O的利用率,列线接P1.0~P1.3行线接P1.4~P1.7,行列适用于按键输入多的情况。

方案二:独立式键盘

键盘接口中使用多少根I/O线,键盘中就有几个按键,键盘接口使用了16根I/O口线,需要占用比较多的I/O口线这种类型的键盘,

根据以上论证,采用方案一。

4 模块的最终方案

主控制器模块:采用AT89C51单片几机控制 抢答器显示模块:数码管显示 电源方案的选择:采用三端稳压器电路 枪答器键盘模块:独立式键盘

计分器显示模块:采用带有锁存功能的移位寄存器74LS595芯片 计分器键盘模块:行列式键盘

5 电子智能抢答器系统的硬件电路设计

5.1 计分器的电路设计

主控制器采用AT89C51单片机作为微处理器,AT89C51是美国ATMEL公司生产的低电压、高性能CMOS 8位单片机,片内含4K bytes的可反复擦写的Flash只读程序存储器和128 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器(CPU)和Flash 存储单元。 5.1.1计分器系统的硬件电路

计分器的工作原理是采用最小系统,用4x4键盘来输入是选手需要加减进行分数的加减输入。主板上的6个数码显示,加几分的数,按确定键后分数值从串口p3.0,p3.1传到计分器显示模块上再通过数码管驱动模块显示。原理图如图

- 14 -

9所示 123456B013591113B1B2B3B4B5DU1A74ALS06U1B74ALS06U1C74ALS06U1D74ALS06U1E74ALS06U1F74ALS06246810R710R810R910R1010R111012R1099999U274ALS245D02D13D24D35D46D57D689A0A1A2A3A4A5A6A7EDIRDS1DS2DS3DS4B0B1B2B3B4B5B6B7VCCabacfbdgeecfdgdpdpDS5VCCabacfbdgeecfdgdpdpVCCabacfbdgeecfdgdpdpVCCabacfbdgeecfdgdpdp191VCC1817161514131211A0A1A2A3A4A5A6A710AA12A23A34A45A56A67A7810AA12A23A34A45A56A67A7810AA12A23A34A45A56A67A7810AA12A23A34A45A56A67A7810AA12A23A34A45A56A67A78VCCabacfbdgeecfdgdpdp10AA12A23A34A45A56A67A78VCCabacfbdgeecfdgdpdpDS6CRESETRDWRS0R9C3VCCSJ1CON2RXDTXDALE/PPSENC130PC2C71730PC61610C011C13029L10uFR510KC41000uFD0R65.6KAC50.1uFLED12- 15 -

R110KS1U989S51S2D0D1D2D3D4D5D6S5P10P11P12P13P14P15P16P17S9INT1INT0T1T0EA/VPX1X2P00P01P02P03P04P05P06P071234567P1.87C313C212C515C414VCC1918R99313938373635343332S6S10S13S14Y1P20P21P22P23P24P25P26P272122232425262728B0B1B2B3B4B5B6B723图9R210KS310KR3S4S7S8S11S12VCCR410K9J287654321C0C1C2C3C4C5C6C7B串口输出S15SW-PBS16J310C621C731.7P8B649B75标题尺寸B图号日期:文件:4523-Jun-2008J:\\抢答器记分器.Ddb修订第 张 共 张制图人:615.1.2计分显示模块

计分显示模块是采用74LS595移位寄存器。并带锁存功能,在数码显示不会闪。具有很好的观看效果。如图10

图10 计分显示模块

5.1 抢答器的电路设计 5.2.1抢答电路模块

抢答器的工作原理是采用单片机最小系统,用查询式键盘进行抢答。通过抢答按键模块,连接按键进行抢答。其工作原理为: 主持人按清零键后,选手可按键抢答,单片机锁存信号,屏蔽外界信号。串显示编号,并有丁冬声输出。抢答选手的编号一直保持到主持人将系统清除为止。抢答器原理如图11。

- 16 -

图11 抢答器原理图

5.2.2抢答按键模块的设计

抢答按键模块的设计是通过利用光电耦合器,光电偶合器的输入/输出之间没有接

触,能有效地防止输入端的电磁干扰以电藕合的方式进入应用系统,而且光电偶合器的输入阻抗很小,干扰源的内阻很大,所以能输入到光电偶合器的干扰电压很小。把单片机信号和按钮的信号隔开,采用+12V电源给单片机开关量的控制。其原理图

如图12。

- 17 -

图12 输入隔离电路

6 单片机干扰防护

单片机应用系统在实际工作过程中,难免会受到各种外部或内部的干扰,使系统发生异常情况。比如,因干扰使程序指针发生错误时,可能会将非操作码执行,造成程序执行的混乱(跑飞)或进入死循环,甚至可能会损坏元器件。

干扰窜入应用系统的主要渠道有三条:通过电磁波辐射窜入系统的空间干扰;通过输入/输出通道窜入的通道干扰;电源的干扰。 6.1 采用隔离技术

对于供电系统的干扰,可以采用交流稳压器、不间断电源(UPS)、隔离变压器、底通虑波器等,以防止电源电压的波动和干扰噪声;在直流电源的抗干扰措施中,对应用系统中的不同等级的直流电源采取集成稳压块单独供电,以避免模块间的互相影响,使直流开关电源、DC-DC变换器以加强隔离提高电源稳定性等。

在单片机应用系统的输入/输出通道中,普遍采用通道隔离技术来防止通道干扰。其中应用较多的是光电耦合器。光电耦合器的输入/输出之间没有接触,能有效地防止输入端的电磁干扰以电耦合的方式进入应用系统,而且光电耦合器的输入阻抗很小,干扰源的内阻很大,所以能输入到光电偶合器的干扰电压很小。

- 18 -

6.2 正确的接地措施

在低频电路中,因寄生电抗的影响不大,常采用一点接地,以减少地线造成的地环路。

在单片机系统中,数字地和模拟地应分别接地,即使一个芯片上有两种地也要分别接地,然后再在一点处把两种分别连接起来。

在研制印刷电路板时,对地线的分布、形状、长度和宽度等也有一定的要求,比如地线要呈辐射状,避免环行,地线要宽,连接旁路电容的地线不要太长等。

单片机应用系统中的数字地、模拟地(低电平电路地)、大功率电气设备等强电设备的地(噪声地)、机壳或其他金属构件的屏蔽地应分开布置并在一点上和电源地相连。每个单元宜采用一个接地点,地线应尽量加粗以减少地线的阻抗。

在采用屏蔽双绞线传递信号时,应将地与工作地连在一起。要注意只能在一个点接地,以免形成回路,在屏蔽体上产生较大的噪声。

结论

通过这次毕业设计。我们小组设计电子智能抢答计分器,采用了单片机技术、数字电子、模拟电子、制作电路板等相关技术。把在学校三年所学知识连成一串。理论联系实践,体现出大学生动手能力。通过查资料和搜集有关的文献,培养了自学

能力和动手能力。并且由原先的被动的接受知识转换为主动的寻求知识,这可以说是学习方法上的一个很大的突破。在以往的传统的学习模式下,我们可能会记住很多的书本知识,但是通过毕业论文,我们学会了如何将学到的知识转化为自己的东西,学会了怎么更好的处理知识和实践相结合的问题。把握重点、攻克难关,学到用到、活学活用。在设计过

程中由于时间仓促有很多地方难免存在不足之处,硬件设计已经完成,在软件设计中有些功能还尚未开发出来。但在以后的工作中,我们会严格要求自己,追求完美。

- 19 -

谢 辞

当我以学子的身份踏入同济大学校门的那天起,便已注定我将在这里度过人生中最美丽的青春年华。提笔写下“谢辞”,我才惊觉自己即将真正离开,人生亦从此展开新的画卷。尽管不舍,却更珍惜,因为我的生命中有那么多可爱的人值得感激。他们使我的大学生活充满了色彩,无论收获、遗憾,对我来说都是一笔宝贵的财富。

三年的大学生活不知不觉中就要结束了,在这段难忘的生活中,有我许多美好的回忆。在这份大学的最后一页里,首先感谢党、感谢学院给我们提供这个能自我展示的平台,感谢我们的指导教师,李佐平、李建兰老师,你们从一开始的论文方向的选定,到最后的整篇文论的完成,都非常耐心的对我进行指导。给我提供了大量数据资料和建议,告诉我应该注意的细节问题,细心的给我指出错误,修改论文。谢谢我们班主任老师,从大一到大三是你的悉心教导、孜孜不倦我们才能顺利的完成学业。我要感谢在我三年的学习中无私传授我知识的各位老师,是你们将自己宝贵的财富无私地奉献给了我们,让我们能在学业上有所成绩;是你们让我倍感教师职业的伟大,交给我们知识,又不忘教育我们如何做人!在此,我还要感谢寝室的兄弟们在我完成论文的过程中给予我的帮助和鼓励,也是他们陪我度过这三年的生活。

- 20 -

参考文献

[1] 康华光,邹寿彬编.电子技术基础数字部分(第四版)[M].北京:高等教育出版

社,2005

[2] 谢自美编.电子线路设计·实验·测试 (第二版) [M].上海:电子工业出版社,2001 [3] 何立民.MCS-51系列单片机应用系统设计系统配置与接口技术[M].北京:北京航空

航天大学出版社,1999年

[4] 陆坤,奚大顺,李之权等,电子设计技术[M].成都:电子科技大学出版社1997年[5]

何立民.MCS-51系列单片机应用系统设计系统配置与接口技术[M].北京:北京航空航天大学出版社,1999年

[5] 胡学海.单片机原理及应用系统设计[M].北京:京电子工业出版社,2005年 [6] 林凌,李刚,丁茹,李小霞.新型单片机接口器件与技术[M].西安:西安电子科技大

学出版社,2005年

- 21 -

附:单片机程序

计分器显示程序(附1)

//抢答器加减记分显示程序2 DBUF EQU 30H ;三位显示缓冲区首址 ORG 0000H AJMP MAIN ORG 0030H MAIN: MOV SP,#60H ACALL KEYSCAN ;调用键盘扫描子程序判断是加分或减分 CJNE A,#0EH,NEXT2 ;不是加分键,则转移判断是减分键? NEXT1: ACALL KEYSZ ;是加分键,调用键盘设置子程序 ACALL DISPLAY ;调用串口静态显示子程序 SJMP MAIN

NEXT2: CJNE A,#0FH,MAIN ;都不是,则转MAIN AJMP NEXT1 ;是减分键,调用键盘设置子程序 ORG 0100H KEYSZ: PUSH PSW ;键盘设置子程序 PUSH ACC SETB RS1 MOV R0,#DBUF ;R0指向显示缓冲区首地址 MOV R7,#3 ;设置键盘输入位数 L1: CLR RS1 ACALL KEYSCAN ;调用键盘扫描子程序取按下键的键号 SETB RS1 CJNE A,#0AH,L2 ;键入数合法性检测(是否大于9) L2: JNC L1 ;大于9,重新键入 MOV R0,A ;键号送显示缓冲区 INC R0 DJNZ R7,L1 ;3位数值输入完否?未完继续,否则返回 POP ACC POP PSW CLR RS1 RET

KEYSCAN:MOV R3, #0F7H ;扫描初值(P1.3=0) MOV R1, #00H ;取码指针 L3: MOV A, R3 ;开始扫描 MOV P1, A ;将扫描值输出至P1 MOV A, P1 ;读入P1值,判断是否有键按下 MOV R4, A ;存入R4,以判断按键是否放开 SETB C ;C=1 MOV R5, #04H ;扫描P1.4~P1.7

- 22 -

L4: RLC A ;将按键左移一位 JNC KEYIN ;判断C=0?有键按下则C=0,跳至KEYIN INC R1 ;C=1,则无键按下,将取码指针值加1 DJNZ R5, L4 ;4列扫描完毕了吗? MOV A, R3 ;扫描值载入 SETB C ;C=1 RRC A ;扫描下一行(P1.3~P1.0) MOV R3, A ;存回扫描寄存器 JC L3 ;C=1?是则P1.0尚未扫描到 SJMP KEYSCAN ;C=0,则四行已扫描完毕 KEYIN: MOV R7, #60 ;延时消除抖动 D2: MOV R6, #248 ; DJNZ R6, $ ; DJNZ R7, D2 ; D3: MOV A, P1 ;延时后再读入P1值 XRL A, R4 ;与上次读入值作比较 JZ D3 ;A=0,表示按键未放,等待按键释放 MOV A, R1 ;按键已放开,取码指针载入累加器 MOV DPTR,#TABLE ;键盘码表首地址送DPTR MOVC A, @A+DPTR ;查键码 RET ;返回

TABLE: DB 00H,01H,02H,03H ;键码安排表与键盘相同 DB 04H,05H,06H,07H DB 08H,09H,0AH,0BH DB 0CH,0DH,0EH,0FH ORG 0200H

DISPLAY:MOV R0, #DBUF ;串口静态显示子程序 MOV R2,#3 ;显示3位数码 MOV DPTR,#SEGTAB; DISP: MOV A,@R0 ; MOVC A,@A+DPTR ;取字段码 MOV SCON,#0 ;置串口工作方式0 MOV SBUF,A ;开始发送 JNB TI,$ ;等待发送完毕 CLR TI ;发送完毕,标志位清零 INC R0 ;缓冲单元地址增1 DJNZ R2,DISP ;三位数码发送完否? RET ;发送完毕,则返回 SEGTAB: DB 0FCH,60H,0DAH,0F2H ;0,1,2,3(共阳极字段码表) DB 66H,0B6H, 0BEH,0E0H ;4,5,6,7 DB 0FEH,0F6H,0EEH,3EH ;8,9,A,B DB 9CH,7AH,9EH,8EH ;C,D,+,- END DBUF

EQU

30H

;三位显示缓冲区首址

- 23 -

ORG AJMP

0000H MAIN

ORG 0030H

MAIN: MOV SP,#60H

NEXT1: NEXT2:

KEYSZ:

L1:

L2:

KEYSCAN: ACALL KEYSCAN ;调用键盘扫描子程序判断是加分或减分

CJNE

A,#0EH,NEXT2

;不是加分键,则转移判断是减分键?

ACALL KEYSZ

;是加分键,调用键盘设置子程序 ACALL DISPLAY ;调用串口静态显示子程序

SJMP

MAIN

CJNE A,#0FH,MAIN ;都不是,则转MAIN AJMP

NEXT1

;是减分键,调用键盘设置子程序

ORG 0100H

PUSH PSW

;键盘设置子程序

PUSH ACC SETB RS1 MOV R0,#DBUF ;R0指向显示缓冲区首地址 MOV R7,#3 ;设置键盘输入位数 CLR

RS1

ACALL KEYSCAN ;调用键盘扫描子程序取按下键的键号 SETB RS1

CJNE A,#0AH,L2 ;键入数合法性检测(是否大于9) JNC L1 ;大于9,重新键入 MOV R0,A

;键号送显示缓冲区

INC R0 DJNZ R7,L1 ;3位数值输入完否?未完继续,否则返回 POP ACC POP PSW CLR RS1

RET

MOV R3, #0F7H ;扫描初值(P0.3=0)

- 24 -

MOV MOV MOV MOV MOV SETB MOV RLC JNC INC DJNZ MOV SETB RRC MOV JC SJMP

R1, #00H A, R3 P0, A A, P0 R4, A C

;取码指针 ;开始扫描

;将扫描值输出至P1

;读入P1值,判断是否有键按下 ;存入R4,以判断按键是否放开 ;C=1

;扫描P1.4~P1.7 ;将按键左移一位

;判断C=0?有键按下则C=0,跳至KEYIN ;C=1,则无键按下,将取码指针值加1 ;4列扫描完毕了吗? ;扫描值载入 ;C=1

;扫描下一行(P1.3~P1.0) ;存回扫描寄存器

;C=1?是则P1.0尚未扫描到 ;C=0,则四行已扫描完毕 ;延时消除抖动 ; ; ;

;延时后再读入P1值 ;与上次读入值作比较

;A=0,表示按键未放,等待按键释放 ;按键已放开,取码指针载入累加器

L3:

R5, #04H A

L4:

KEYIN R1

R5, L4 A, R3 C A

R3, A L3

KEYSCAN R7, #60 R6, #248 R6, $ R7, D2 A, P0 A, R4 D3

KEYIN: MOV D2: MOV

DJNZ DJNZ

D3: MOV

XRL JZ MOV MOV MOVC RET

A, R1

DPTR,#TABLE ;键盘码表首地址送DPTR A, @A+DPTR ;查键码

;返回

TABLE: DB 00H,01H,02H,03H ;键码安排表与键盘相同

DB 04H,05H,06H,07H

- 25 -

DB 08H,09H,0AH,0BH DB 0CH,0DH,0EH,0FH ORG 0200H

;串口静态显示子程序 ;显示3位数码

DISPLAY:MOV R0, #DBUF

MOV MOV

R2,#3

DPTR,#SEGTAB; DISP:

SEGTAB: DB DB DB

A,@R0

;

A,@A+DPTR ;取字段码 SCON,#0 ;置串口工作方式0 SBUF,A ;开始发送 TI,$ ;等待发送完毕 TI ;发送完毕,标志位清零 R0

;缓冲单元地址增1 R2,DISP ;三位数码发送完否?

;发送完毕,则返回

0FCH,60H,0DAH,0F2H ;0,1,2,3(共阳极字段码表) 66H,0B6H, 0BEH,0E0H ;4,5,6,7 0FEH,0F6H,0EEH,3EH ;8,9,A,B DB

9CH,7AH,9EH,8EH

;C,D,+,-

- 26 -

MOV MOVC MOV MOV JNB CLR INC

DJNZ RET

END

抢答器软件程序(附2)

#include #define uchar unsigned char //共阴码

//uchar code table[]={0x00,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe }; /*代码存储区(64KB)*/

//共阳码

uchar code table[]={0x03,0x9f,0x25,0x0d,0x99,0xc2,0x41,0x1f,0x01,0xff }; void delay (void) { /* delay 函数*/ uchar i,j; /*这个函数执行时间的延迟 */

for (i=0;i<20;i++)

for(j=0;j<250;j++) ;

}

void main (void) {

uchar temp,key,j,time; /* 声明变量temp */ while (1) { /* 无穷循环 */ */

delay(); temp=P0;

temp=P0;

/* 将P2输入的数据直接放入变量temp当中

switch(temp) {

case 0xfe: key = 1;break; case 0xfd: key = 2;break; case 0xfb: key = 3;break; case 0xf7: key = 4;break; case 0xef: key = 5;break; case 0xdf: key = 6;break; case 0xbf: key = 7;break; case 0x7f: key = 8;break;

- 27 -

default : break; }

if(temp==0xff) { for(time=1;time>0;time--) /*无键按下,则关显示*/

{ j=table[0];

SCON=0x00;

}

/*取键值并显示*/ SBUF=j; while(TI!=1); TI=0; }

else { j=table[key]; SCON=0x00;

SBUF=j; while(TI!=1); }

delay(); } } TI=0; for(;;)

/*指示显示,并实现锁键功能*/

{ P1=temp;

}

- 28 -

default : break; }

if(temp==0xff) { for(time=1;time>0;time--) /*无键按下,则关显示*/

{ j=table[0];

SCON=0x00;

}

/*取键值并显示*/ SBUF=j; while(TI!=1); TI=0; }

else { j=table[key]; SCON=0x00;

SBUF=j; while(TI!=1); }

delay(); } } TI=0; for(;;)

/*指示显示,并实现锁键功能*/

{ P1=temp;

}

- 28 -

本文来源:https://www.bwwdw.com/article/d216.html

Top