51单片机六路抢答器

更新时间:2024-05-03 20:55:01 阅读量: 综合文库 文档下载

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

《单片机原理与应用》

题目:专业:计算机工程系班级:学号:姓名:课程设计报告

6路抢答器的设计 07计科2班

天津理工大学中环信息学院

计算机工程系 2007年6月 30 日

一设计目的

1.熟悉单片机控制系统,并了解系统设计的一般规律。 2.掌握8255芯片的结构及编程方法。

3.熟悉模拟用于娱乐或比赛抢答器的实现方法。

二设计要求

当主持人宣布开始以后,6个参赛队员可以按自己面前的抢答键进行抢答。要求用数码管显示抢答队员编号,且蜂鸣器发出提示音;一个队员抢答后,在主持人按复位键之前,其他队员不能再次抢答。

设计电路时,要考虑主持人用按键来控制抢答开始,开始按钮可兼作复位用。

三 设计使用的仪器和设备

Dais MS-51设计软件、Dais-PG系列嵌入式MCS-51教学实验平台、8255芯片、PC

51系列优点之一是它从内部的硬件到软件有一套完整的按位操作系统,称作位处理器,或布尔处理器。它的处理对象不是字或字节而是位。它不光能对片内某些特殊功能寄存器的某位进行处理,如传送、置位、清零、测试等,还能进行位的逻辑运算,其功能十分完备,使用起来得心应手。虽然其他种类的单片机也具有位处理功能,但能进行位逻辑运算的实属少见。51系列在片内RAM区间还特别开辟了一个双重功能的地址区间,十六个字节,单元地址20H~2FH,它既可作字节处理,也可作位处理(作位处理时,合128个位,相应位地址为OOH~7FH),使用极为灵活。这一功能无疑给使用者提供了极大的方便,因为一个较复杂的程序在运行过程中会遇到很多分支,因而需建立很多标志位,在运行过程中,需要对有关的标志位进行置位、清零或检测,以确定程序的运行方向。而实施这一处理(包括前面所有的位功能),只需用一条位操作指令即可。 对周围的其他位不会产生影响。

有的单片机并不能直接对RAM单元中的位进行操作,如AVR系列单片机中,若想对RAM中的某位置位时,必须通过状态寄存器SREG的T位进行中转。

51系列的另一个优点是乘法和除法指令,这给编程也带来了便利。八位除以八位的除法指令,商为八位,精度嫌不够,用得不多。而八位乘八位的乘法指令,其积为十六位,精度还是能满足要求的,用的较多。作乘法时,只需一条指令就行了,即MuL AB(两个乘数分别在累加器A和寄存器B中。积的低位字节在累加器A中,高位字节在寄存器B中)。很多的八位单片机

1

都不具备乘法功能,作乘法时还得编上一段子程序调用,十分不便。 在51系列中,还有一条二进制一十进制调整指令DA,能将二进制变为BCD码,这对于十进制的计量十分方便。而在其他的单片机中,则也需调用专用的子程序才行。

Intel公司51系列的典型产品是8051,片内有4K字节的一次性程序存储器(OTP)。Atmel公司就将其改为电可改写的闪速存储器(Flash),容许改写1000次以上,这给编程和调试带来极大的便利,其产品AT89C51、AT89C52?等成为了当今最流行的八位单片机。

51系列的I/O脚的设置和使用非常简单,当该脚作输入脚使用时,只须将该脚设置为高电平(复位时,各I/O口均置高电平)。当该脚作输出脚使用时,则为高电平或低电平均可。低电平时,吸入电流可达20mA,具有一定的驱动能力;而为高电平时,输出电流仅数十μA甚至更小(电流实际上是由脚的上拉电流形成的),基本上没有驱动能力。其原因是高电平时该脚也同时作输入脚使用,而输入脚必须具有高的输入阻抗,因而上拉的电流必须很小才行。作输出脚使用,欲进行高电平驱动时,得利用外电路来实现(见附图),I/O脚不通,电流经R驱动LED发光;低电平时,I/O脚导通,电流由该脚入地,LED灭(I/O脚导通时对地的电压降小于1V,LED的域值1.5-1.8V)。

5l系列I/O脚使用简单,但高电平时无输出能力,可谓有利有弊。故其他系列的单片机(如PIC系列、AVR系列等)对I/O口进行了改进,增加了方向寄存器以确定输入或输出,但使用也变得复杂。

一些简装的5l产品也相应出现,如Atmel公司的AT89C1051、AT89c2051、AT89C405l等(闪速存储器分别为1K、2K、4K等,但不能外接数据存储器),指令系统与AT89C5 l完全兼容,但引脚均为20脚,不光体积小,而且价格低廉,这使得其他的公司竞相仿照。

不过,原51系列也有许多值得改进之处,如运行速度过慢等。当晶振频率为12MHz时,机器周期达1μs,显然适应不了现代高速运行的需要。华邦公司(Winbond)生产的产品型号为W77系列和W78系列,W78系列与AT89C系列完全兼容。W77系列为增强型,对原有的8051的时序作了改进,每个机器周期从12个时钟周期改为4个周期,使速度提高了三倍,同时,晶振频率最高可达40MHz。W77系列还增加了看门狗WatchDog、两组uART、两组DVTR数据指针、ISP等多种功能。

特别是双数据指针,能给编程带来很大的便利。在51系列中,数据指针DPTR是片内与片外的数据存储器打交道的主要途径(由片外数据存储器读入片内

2

累加器A或由片内累加器A写入片外数据存储器),也是程序存储器与累加器A之间的数据传送的必由之路。由于频繁的数据交换,特别是数据块的搬运和比较,数据指针非常吃紧,它需要不断地实施现场保护与还原,不光编程变得复杂,而且运行速度也减慢。而当采用两个数据指针时,可以各负其责,互不相扰,轻松地完成上述过程。两个数据指针的选取取决于特殊功能寄存器AuxR 1的第DO位DPS。当DPS为0时,选中数据指针DVTRO(复位时DPS也为0);DPS为1时,选中数据指针DPTRl。DPS位不能位寻址,故不能进行布尔操作,但由于AUXRl的D1位被强制为逻辑“0”,不可能发生由DO位向Dl位进位之可能,因而可以通过对AuXRl进行增1来使DO位由O变为l或由1变为0,从而达到双数据指针的快速切换的目的,如:

ISP功能能实现在系统可编程,可以省去通用的编程器,单片机在用户板上即可下载和烧录用户程序,而无需将单片机从生产好的产品上取下。未定型的程序还可以边生产边完善,加快了产品的开发速度,减少了新产品因软件缺陷带来的风险。由于可以将程序下载并观看运行结果,故也可以不用仿真器。

单片机的提速运行、双数据指针及ISP功能并非是W77系列所特有的,一些新的型号的51系列产品大都有该功能,如Philips的51LPC系列、AT89系列中的某些型号、STC89C系列等等。有的单片机还附有A/D、D/A转换、片内EEPROM数据存储器、PWM输出、I2C总线、上电复位检测、欠压复位检测等等,这些新系列的单片机,它们都兼容8051的指令系统。增强功能的实现,大都是由片内新增的特殊功能寄存器来进行设置,这些寄存器被安排在片内特殊功能寄存器区间(80-FFH)的预留地址上。

四 系统硬件设计方案

为使硬件电路设计尽可能合理,应注意以下几方面:

(1) 尽可能采用功能强的芯片,以简化电路,功能强的芯片可以代替若干普通芯片,随着生产工艺的提高,新型芯片的的价格不断下降,并不一定比若干普通芯片价格的总和高。

(2) 留有设计余地。在设计硬件电路时,要考虑到将来修改扩展的方便。因为很少有一锤定音的电路设计,如果现在不留余地,将来可能要为一点小小的修改或扩展而被迫进行全面返工。

(3) 程序空间,选用片内程序空间足够大的单片机,本设计采用Dais MCS-51单片机。

3

(4)I/O端口,在样机研制出来后进行现场试用时,往往会发现一些被忽视的问题,而这些问题不是靠单纯的软件措施来解决的。如有些新的信号需要采集,就必须增加输入检测端;有些物理量需要控制,就必须增加输出端。如果在硬件电路设计就预留出一些I/O端口,虽然当时空着没用,那么用的时候就派上用场了。

1.总体原理图

图1.系统原理图

2.外部震荡电路的设计

单片机必须在时钟的驱动下才能工作.在单片机内部有一个时钟振荡电路,只需要外接一个振荡源就能产生一定的时钟信号送到单片机内部的各个单元,决定单片机的工作速度

4

图 2 外部振荡源电路

3.复位电路的设计

单片机的第9脚RST为硬件复位端,只要将该端持续4个机器周期的高电平即可实现复位,复位后单片机的各状态都恢复到初始化状态,其电路图如图

图 3 复位电路

4.显示电路的设计

显示功能与硬件关系极大,当硬件固定后,如何在不引起操作者误解的前提下提供尽可能丰富的信息,全靠软件来解决。

5

5. 键盘扫描电路的设计

键盘是人与微机系统打交道的主要设备。关于键盘硬件电路的设计方法也可以在文献和书籍中找到,配合各种不同的硬件电路,这些书籍中一般也提供了相应的键盘扫描程序。站在系统监控软件设计的立场上来看,仅仅完成键盘扫描,读取当前时刻的键盘状态是不够的,还有不少问题需要妥善解决,否则,人们在操作键盘就容易引起误操作和操作失控现象。在单片机应用中键盘用得最多的形式是独立键盘及矩阵键盘。

图 4 独立键盘

它们各有自己的特点,其中独立键盘硬件电路简单,而且在程序设计上也不复杂,一般用在对硬件电路要求不高的简单电路中;矩阵键盘与独立键盘有很大区别,首先在硬件电路上它要比独立键盘复杂得多,而且在程序算法上比它要烦琐,但它在节省端口资源上有优势得多,因此它更适合于多按键电路。其次就是消除在按键过程中产生的“毛刺”现象。

6 发声

我们知道,声音的频谱范围约在几十到几千赫兹,若能利用程序来控制单片机某个口线的“高”电平或低电平,则在该口线上就能产生一定频率的矩形波,接上喇叭就能发出一定频率的声音,若再利用延时程序控制“高”“低”电平的持续时间,就能改变输出频率,从而改变音调,使喇叭发出不同的声音。

6

7 系统复位

使CPU进入初始状态,从0000H地址开始执行程序的过程叫系统复位。从实现系统复位的方法来看,系统复位可分为硬件复位和软件复位。硬件复位必须通过CPU外部的硬件电路给CPU的RESET端加上足够时间的高电位才能实现。上电复位,人工按钮复位和硬件看门狗复位均为硬件复位。硬件复位后,各专用寄存器的状态均被初始化,且对片内通用寄存器的内容没有影响。但是,硬件复位还能自动清除中断激活标志,使中断系统能够正常工作,这样一个事实却容易为不少编码人员所忽视。软件复位就是用一系列指令来模拟硬件复位功能,最后通过转移指令使程序从0000H地址开始执行。对各专用寄存器的复位操作是容易的,也没有必要完全模拟,可根据实际需要去主程序初始化过程中完成。而对中断激活标志的清除工作常被遗忘,因为它没有明确的位地址可供编程。有的编程人员用020000(LJMP 0000H)作为软件陷阱,认为直接转向0000H地址就完成了软件复位,就是这类错误的典型代表。软件复位是使用软件陷阱和软件看门狗后必须进行的工作,这时程序出错完全有可能发生在中断子程序中,中断激活标志已置位,它将阻止同级中断响应。由于软件看门是高级中断,它将阻止说要中断响应,由此可见清除中断激活标志的重要性。

五 系统软件设计方案

1.主程序系统结构图

图5 软件系统结构图

系统初始化模块 按键模块 抢答模块 数码显示模块 2.程序流程图

7

图6 程序设计流程图

复位 显示抢答号 按键抢答 显示000000 初始化 3.系统程序

cs8255 equ 0ffffh ;8255命令控制口 outsegequ 0fffch ;字形控制口 outbitequ 0fffdh ;字位/键扫控制口 org 0 Start: mov sp,#40h mov dptr,#CS8255

mov a,#88h ;命令字:A,B口输出 movx @dptr,a ;8255初始化

clr c setb

c

st0: jb p3.0,st1 ;setb p1.4 ;setb p1.5 ; setb p1.6 ; setb p1.7 mov r0,#0

call DisplayLED0 ;显示 st1: jnc st0

8

jb p1.0,st2 clr c mov r0,#1

;clr p1.4

;setb p1.5 ;setb p1.6 ;setb p1.7 call DisplayLED1;显示 st2: jnc st0

jb p1.1,st3 clr c mov r0,#2

;clr p1.5 ;setb p1.4 ;setb p1.6 ;setb p1.7 call DisplayLED2;显示 st3: jnc st0

jb p1.2,st4 clr c mov r0,#3

;clr p1.6 ;setb p1.4 ; setb p1.5 ;setb p1.7 call DisplayLED3 ;显示st4: jnc st0

jb p1.3,st5 clr c mov r0,#4

;clr p1.7 ;setb p1.4 ;setb p1.5 ; setb p1.6

call DisplayLED4;显示

9

st5: jnc st0

jb p1.4,st6 clr c mov r0,#5 ;clr p1.7

;setb p1.4 ;setb p1.5 ; setb p1.6

call DisplayLED5;显示 jb p1.5,st0 clr c mov r0,#6 ;clr p1.7 st6: jnc st0

;setb p1.4 ;setb p1.5 ; setb p1.6

call DisplayLED6;显示 ljmp st0

Delay: ;延时子程序 mov r7,#0 DelayLoop: djnz r7,DelayLoop djnz r6,DelayLoop ret

DisplayLED0:

mov r2,#11111100b;从左边开始显示 Loop:

movdptr,#OUTBIT clr a

movx @dptr,a ;关所有八段管

movdptr,#LedMap

mov a,r0

movc a,@a+dptr ;数字转换成显示码

10

movdptr,#OUTSEG movx @dptr,a movdptr,#OUTBIT mov a,r2

movx @dptr,a ;显示一位八段管

mov r6,#01 call Delay ret

DisplayLED1:

mov r2,#10000000b;左边第一位开始显示 movdptr,#OUTBIT clr a

movx @dptr,a ;关所有八段管

movdptr,#LedMap

mov a,r0

movc a,@a+dptr ;数字转换成显示码 movdptr,#OUTSEG movx @dptr,a movdptr,#OUTBIT mov a,r2

movx @dptr,a ;显示一位八段管

mov r6,#01 call Delay ret

DisplayLED2:

mov r2,#01000000b;从左边开始显示

movdptr,#OUTBIT clr a

movx @dptr,a ;关所有八段管

11

movdptr,#LedMap

mov a,r0

movc a,@a+dptr ;数字转换成显示码 movdptr,#OUTSEG movx @dptr,a movdptr,#OUTBIT mov a,r2

movx @dptr,a ;显示一位八段管

mov r6,#01 call Delay ret

DisplayLED3:

mov r2,#00100000b;从左边开始显示

movdptr,#OUTBIT clr a

movx @dptr,a ;关所有八段管

movdptr,#LedMap

mov a,r0

movc a,@a+dptr ;数字转换成显示码 movdptr,#OUTSEG movx @dptr,a movdptr,#OUTBIT mov a,r2

movx @dptr,a ;显示一位八段管

mov r6,#01 call Delay ret

DisplayLED4:

mov r2,#00010000b;从左边开始显示

12

movdptr,#OUTBIT clr a

movx @dptr,a ;关所有八段管

movdptr,#LedMap

mov a,r0

movc a,@a+dptr ;数字转换成显示码 movdptr,#OUTSEG movx @dptr,a movdptr,#OUTBIT mov a,r2

movx @dptr,a ;显示一位八段管

mov r6,#01 call Delay ret

DisplayLED5:

mov r2,#00001000b;从左边开始显示

movdptr,#OUTBIT clr a

movx @dptr,a ;关所有八段管

movdptr,#LedMap

mov a,r0

movc a,@a+dptr ;数字转换成显示码 movdptr,#OUTSEG movx @dptr,a movdptr,#OUTBIT mov a,r2

movx @dptr,a ;显示一位八段管

mov r6,#01 call Delay ret

13

DisplayLED6:

mov r2,#00000100b;从左边开始显示

movdptr,#OUTBIT clr a

movx @dptr,a ;关所有八段管

movdptr,#LedMap

mov a,r0

movc a,@a+dptr ;数字转换成显示码 movdptr,#OUTSEG movx @dptr,a movdptr,#OUTBIT mov a,r2

movx @dptr,a ;显示一位八段管

mov r6,#01 call Delay ret 发声程序:

BARK: SETB RING ACALL DELAY1 ACALL DELAY1 CLR RING;按键发声 RET

LedMap: ;八段管显示码

db 0c0h,0f9h,0a4h,0b0h,099h,092h,082h,0f8h db 080h,090h,088h,083h,0c6h,0a1h,086h,08eh end

六调试及验证 1 调试步骤

14

1.打开Dais MCS-51设计软件

2.打开 实验指导->硬件实验->P1口转弯灯控制 3.连线如图7

图7 连线图

4.编写程序

5.编译装载程序,如图8

图 8 程序装载

6.运行程序

2 整体设计验证

1.具有清零装置和抢答控制,可由主持人操纵避免有人在主持人说“开始”

15

前提前抢答违反规则。

2.主持人说开始并扳动控制开关。

3.主持人宣布开始后选手开始按动按钮抢答,当有选手抢答成功后,程序锁存该选手信息并在LED显示屏上显示该选手编号,其他抢答无效。

4.回答完毕后主持人复位程序,准备下一轮抢答。

七 课程设计小结

单片机课程设计是一门很实用,很难的设计。这个设计用到了单片机,电路等方面的知识,通过这次课程设计,使我对单片机及其附属电路有了一定的了解,对课本上的知识有了近一步的掌握,也深刻明白了自己的不足。 完成本次课程设计的过程,是一个从无到有的过程,经历了兴奋、自信、失落、奋发、所悟、完成几个过程。刚做做课程设计时,仔细阅读设计的题目和要求,以为没什么困难的,所用的知识书上都有。可是当我动手开始做的时候,才发现其中的繁琐。经过一天的努力,毫无结果。失落的心情油然而生。于是, 再到图书馆和网上查找资料,在经过借鉴很多类似的资料,文献后,总算是有 点 眉目了。埋头苦干的过程是痛苦的,迷茫,烦躁,特别是当苦思出来一个结果,又被自己推翻,心痛的无法言绘。在痛苦中挣扎,建立,推翻,参考别人的思 路, 建立,再次在推翻,在这不断循环中,终于最后完善了程序。其中的煎熬是很痛苦的,深刻明白攻克自己“未知领域”的困难。但当课程设计完成时, 那感觉是甜蜜的,没有耕耘,哪来得收获的喜悦,不懂付出怎么能知道回报的 快乐,一分耕耘一分收获,有付出才会有回报,就在这样的痛与快乐的交换中,我学到了知识, 学到了做人的道理。

通过这短短一周的实践,我感觉到自己从课本上学到的理论知识和实践仍有很大的差距。最少很多元器件根本不知道有什么功效。有的知识,自己感觉已经 掌握得差不多了,但是实际操作起来就有问题出现了。我遇到了不少问题,花费 了很多的时间。这让我重新反思我们的学习,深刻领悟到我们这个专业动手,实 践的重要性。理论不经过实践考验,是没法实施的,就像我们编的程序,很多方 面考虑的都不够,几乎没有涉及到实际应用时的防范方法措施。 这次的课程设计,让我学到了很多书本上学不到的东西,学到了实际应用时,是取用成本的最小化,做设计不仅要考虑大的方面,小的方面也必须做到完美。 最大的收获是:对键盘,显示器, C51语言的应用有了深刻的了解。 最后要衷心地感谢渠老师。本文从选题到完成,从理论上的探讨到实际问题的解决,无处不饱含着渠老师的心血。渠老师的悉心指导和建议给了我极大的帮助和支持,使我受益匪浅,在此设计完成之际,谨向渠老师致以深深的谢意和崇高的敬意。

16

八 参考资料

[1] 单片机课程设计实例指导,李光飞,北京航天航空大学出版社,2004 [2]单片机原理及接口技术(第3版),李朝青,北京航空航天大学出版社,2002 [3]单片机C程序设计及应用实例,胡伟,人民邮电出版社,2003

[4] 单片机系统设计与实例指导,冯育长,西安电子科技大学出版社,2007

17

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

Top