




已阅读5页,还剩25页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
南 京 理 工 大 学毕业设计说明书(论文)作 者:金 磊学 号:1001210421学院(系):自动化系专 业:电子信息工程题 目:竞赛打分系统设计(一)打分及显示终端设计指导者: (姓 名) (专业技术职务)评阅者: (姓 名) (专业技术职务)2010 年 6 月 本科毕业设计说明书(论文) 第 i 页 共 i 页目 次1 引言 12 总体设计 21 终端与计算机的通信方式 22 打分终端设计 3 硬件设计 3.1 打分终端电路设计 3.2 显示终端电路设计 3.3 rs485转换器电路设计 4 软件设计 4.1 打分终端程序设计 4.2 显示终端程序设计 5 系统调试 5.1 硬件调试 5.2 软件调试 结束语 致谢 参考文献 附录a 打分终端程序清单 附录b 显示终端程序清单 本科毕业设计说明书(论文)第 28 页 共 30 页1 前言竞赛评分系统按照时下流行的评委打分方式设计,有比较完善的竞赛评分功能。通过大屏幕,给观众强烈的视觉感受,凝聚比赛现场气氛,体现评委公正裁决。该系统主要适用于企事业单位、学校、娱乐行业等组织的各类选拔赛、技能比武、运动会等活动,如:歌手大赛、演讲比赛、朗诵比赛、模特选拔赛、演员考试、技能演示等。使活动组织轻松且象电视节目一样专业。本评分系统操作简单,实用性强,是开展评委打分比赛的得力助手!本系统由计算机、打分终端、显示终端等组成,采用总线结构,连线少、结构简单,便于扩展。2 总体设计竞赛打分时通常有多个评委,每人一个终端,各个终端通过电缆与计算机相连,由计算机按照某种评分规则计算选手的最终得分,再显示的大屏幕上。所以,设计本系统首先要确定各个终端与计算机的通信问题。21 终端与计算机的通信方式目前,可以使用的终端与计算机的通信方式由下列几种:211 并行连接方式打分终端与主机的打印口相连接,采用总线方式,如下图2-1所示。地址线及控制线3-4根。打分终端打分终端数据线8根并口大屏幕计算机图2-1并行连接方式为各个打分终端及大屏幕设置不同的地址,用地址译码器对地址线上的信号进行译码。主机采用查询方式读取第个打分终端上的数据。这种方式软件和硬件设计简单,但连线多,另外,通信距离有限(数米内)。212采用星型结构的串行通信方式打分终端打分终端。多串口卡大屏幕计算机图2-2采用星型结构的串行通信方式每一个打分终端单独用三根通信线与主机连接,采用rs 232 通信方式,如图2-2所示:这种方式软件设计简单,通信距离远(数百米),但连线多,另外,主机需要有多串口卡。213采用总线结构的串行通信方式各个打分终端设置不同的地址,主机采用查询方式读取每个打分终端上的数据,如图2-3所示。这种方式必须采用rs-485通信,通信距离远(数百米),连线少,易于增减终端数量,但软件设计稍复杂,另外,计算机的串行通信接口上需要一个rs232到rs485的转换器。打分终端打分终端串口大屏幕计算机图2-3采用总线结构的串行通信方式基于上述三种方式的优缺点,本设计采用第三种方式,即rs-485总线方式。22 打分终端设计打分终端是一个单片机系统,包括显示器,键盘、rs485接口等部件。221 单片机 选用mcs51系列的at89c51,该单片机芯片内含4kb的程序存储器,有四个8位的并行口和一个串行口,两个16位计数/定时器,5个中断源,这些内部资源完全可以满足本设计的需要。222 显示器 打分终端上应有显示器,用于显示分值,可选用数码液晶显示器或led数码管,考虑到成本原因,本设计采用4个led数码管作为显示器。为了简化设计,分值可为四位整数或小数。四个led数码管采用动态扫描方式。223 键盘 有12个键,包括10个数字键、一个小数点键和一个确定键。12键连接成43的矩阵,占用单片机的7根并口线,软件上采用反转法读取键盘。224 打分终端数量 为了简化硬件,本设计只制作了三个打分终端。225显示终端本应使用单片机控制大型led数码管显示总得分,因条件限制,只使用4个小led数码管作显示终端。3 硬件设计3.1 打分终端电路设计打分终端电路如图3-1所示,下面分别介绍各单元电路的原理。311显示电路由于at89c51单片机并口在高电平时几乎不能流出电流,而在低电平时可以流入20毫安电流,所以,为了简化电路,段驱动和位驱动均设计成低电平有效;电路中使用四位一体的7段led数码管,这种数码管4位做在一起的,四个数码管的相同笔划已在内部连在一起,由一个引脚引出;4个分共端分别为c1、c2、c3、c4,为共阳极数码管, 7个笔划端和1个小数点端直接接在单片机的p2口,当某一脚为0(低电平)时对应的笔划亮,输出为1时对应的笔划不亮。软件驱动时采用动态扫描的方式,4个pnp型的晶体三极管分别驱动4个数码管的公共端,由p3口中的4位(p3.3-p3.6)进行位驱动,也是0有效。每个瞬间只有一位数码管亮,4个数码管轮流点亮,大家点亮的时间相同,每个数码管点亮时间为5毫秒,4个数码管点亮一遍为20毫秒,一秒钟各个数码管均亮50次,所以看上去不会有闪烁感。为了保证每个数码管亮的时间相同,驱动数码管的程序采用定时器中断方式实现。图3-1 打分终端电路原理图312 键盘电路由于按键较多,键盘连接成43的矩阵形式,占用单片机的7根口线,因p2口内部上拉电阻太大,每根口线上均外加了10k的上拉电阻(线路板上实际使用一个10k8的排电阻)。图中k0-k9分别为0-9十个数字键,kd为小数点键,kok为确认键。软件上采用行反转法识别按键,对重键不予识别,由软件消除按键抖动。313 rs485接口电路单片机的串行口使用的是ttl电平,需要经过转换才能连接到485总线上。常用的专用转换芯片有max485和75176等,max485驱动能力强,但价格高,75176芯片价格低廉,能满足本系统的要求。75176芯片的第1脚接单片机的串行接收(rxd)脚,第4脚接单片机的串行发送(txd)脚,第2、3脚一起接到单片机的p3.2脚,作收发控制用,低电平接收,高电平为发送;由于采用总线结构,每个瞬间只能有一个设备处于发送状态,其余均应处于接收状态,所以,软件初始化时需将p3.2脚置为低电平,只在需要发送时才将其置高电平,通信完毕立即再将其置低电平,以便其它设备占用总线。314 复位、时钟和电源电路采用电阻电容复位电路,在上电时在单片机的复位端产生一个正脉冲,对单片机进行复位。晶振x1和电容c5、c6组成振荡电路,产生单片机所需时钟。89c51单片机的时钟可以在0-24兆赫兹之间,用11.0592mhz这个频率主要是为了在与微机进行串行通信时能产生标准的波特率,如9600 bps。为了简化电路,采用多个打分终端集中供电的方法,在三根rs485总线的基础上增加一根+5v的电源线,由一个专用电源向各个终端供电。本系统中每个终端的耗电电流不大于20ma,四个终端共用一个电源不会有问题。3.2 显示终端电路设计打分系统本应使用大型led数码管显示总得分,因条件限制,只使用4个小型led数码管作显示终端。显示终端的电路与打分终端相同,只是没有键盘,电路图从略。3.3 rs485转换器电路设计计算机串口是rs232电平,用-5-15v代表1,+5+15v代表0,与rs485的平衡传输不同,需要使用转换电路。本系统使用专用的rs232到rs485转换器。4 软件设计4.1 打分终端程序设计 打分终端和显示终端的程序均用51汇编语言书写。411 程序流程图打分终端程序流程图如图4-1所示。n中断返回y已收9个数据?寄存器入栈使用第10组寄存器置正在接收数据标志清除串行接收计时器接收一字符接收数据计数+1寄存器出栈串行中断子程序y主程序y按键已抬起?n将数据填入显示缓冲区最右边一位调用读键盘子程序获得bcd码将前一位bcd码的高4位置1清空显示缓冲区显示“ 0”yn开始初始化y是ok键?已按过小数点?n调用发送子程序清空显示缓冲区显示“ 0”显示缓冲区数据左移一位yny是首次按键?n已达4位数?y允许发送?nnnn有人按键?键盘列线置高,行线置低行列反转再读延时消抖动查键码表表返回读取键盘子程序已接收到串行数据?ynyny是重发命令?清除已收到数据标志是本机号?y是发送命令?置发送标志恢复备份数据并发送键值送r6查到?按键抬起?nnyy是小数点?n图4-1 打分终端程序流程图n发送数据子程序机号发送完毕?指针指向本机号首发送1个字符y指针指向显示缓冲区首读取一个数其低4位10?其数高4位为非0?发送完毕?nnyy转换成ascii码发送1个字符发送小数点(2eh)指针指向下1字符中断返回定时器0中断子程序串行接收计时+1置计数初值寄存器入栈选用第01组通用寄存器计算本次要显示的位对应的显示缓冲区地址段代码送led口将对应位led点亮改变有送指针,为下一次扫描作准务恢复有关寄存器n该数高4位为0?y5毫秒计数+1查表得到段代码取要显示的数将段代码的小数点位置低中断返回y正在接收数据?y计时到20ms?nn置接收完毕标志清除计时器清除正在接收标志整个程序分两大部分,一部分为主程序及相关子程序,负责初始化、识别按键、将输入的数字组织到显示缓冲区buf的与四个led对应的ram中、从串口发送数据等操作;另一部分为定时器0的中断服务程序,主要负责显示器的动态扫描,即将显示缓冲区buf中的的四个bcd码转换成段码在led上显示出来。412 程序说明1. 定时器0中断子程序(显示扫描)按照设计要求每隔5毫秒定时器0中断一次,对于11.0592mhz的系统时钟,计算定时器0的计数初值为:为了保证点亮某一位led时能正确地将对应数字显示出来,在内存中设置了一个包含4个单元的数组buf作为显示缓冲区,同时设置一个扫描计数变量scn_inx和一个位扫描控制变量scn_code,在初始化时,令scn_inx = 0scn_code = 01110111b = 77h将77h写往单片机的p3口,在四个控制位扫描的端口中,p3.3为0,其余脚为1,则只有led4被点亮,同时从地址为buf+0的单元读取要显示的数字,去查段代码表,得到该数字的段代码,写入单片机的p1口,即可完成该位数字的显示(参见图4-2)。led4led3led2led10123显示缓冲区 buf扫描指针scn_inx = 0-3p3.3p3.4p3.5p3.6单片机位扫描控制脚01110111高位低位图4-2 位扫描示意图位扫描控制代码scn_code的初值01110111本次显示完毕,作下列操作: scn_inx scn_inx + 1 scn_inx scn_inx and 00000011b scn_code 循环左移一位这样,scn_inx = 1, scn_code = 11101110b , 为下一次点亮led3,显示地址为buf + 1 单元的数字作好准备。需要说明的是,单片机的p3口除用作位扫描的p3.3p3.6四根线外,p3.0、p3.1被用于串行通信,p3.2被用于收发控制,为了不使位扫描控制代码scn_code的值影响串行通信,在将扫描控制代码写入p3口之前,需将扫描控制码scn_code中对应p3.0、p3.1的d0、d1位置1,将p3.2脚的当前实际电平读入其d2位,然后才能将扫描控制码scn_code写入单片机的p3口。数字的段码是通过查表获得的。在程序区的末尾,按照单片机的p1口与led段引脚的连接方式,将09十个数字的段码依次排列成表,固化在rom中(如表4-1所示)。表4-1 段代码表相对地址p1口的位号76543210led中各段排列图led的段名称bafedhcg00的段码00000101b-a- | | f b | | -g- | | e c | | -d- -h-11的段码01111101b22的段码00100110b33的段码00110100b44的段码01011100b55的段码10010100b66的段码10000100b77的段码00111101b88的段码00000100b99的段码00010100ba- 的段码11111110bb不可显示码11111111b 查表时,将要显示的数字(bcd码)加上段代码的首地址,从该地址中即可读得段码。从段码表中可以看出,所有数字的段码中,小数点h段均为1,即默认不显示小数点,当需要在某个led上显示小数点时,则将该段码的h位清0(即和11111011b作与操作)。主程序规定,当某位数字(bcd码)后面要显示小数点时,就将该bcd码的高4位置为非0,比如,操作者打的分数为9.583时,该分数组织在显示缓冲区中的形式为(十六进制):f9 05 08 03f9表示在led4上显示“9.”。2. 按键识别程序打分终端采用行反转法识别按键,原理如下。先向4根行线输出0,向4根列线输出1(p2.7空),即向p2口写入数据11110000b,假如此时k8被按下,则p2.5脚一定为0,读取p2口的数据应为11010000b,但此时还不能确定是中间一列(k2、k5、k8、kd)中哪个键被按,下一步再将11010000b的低4位置1,变成11011111b,再写入p2口,即只有p2.5为0,其余均为1,此时,p2.0一定为0,从p2口读到的数据一定是11011110b,即deh。事先将12个键对应的扫描码编成一个表,按09十个数字及小数点键、确定键的顺序依次排列成表,固化在单片机的rom中,程序中查表时查得扫描码的位置就代表其数值。在打分终端电路中,小数点键的值为10,确定键的值为11,这两个键不代表数字,程序中要单独处理。为了防止按键抖动,程序中采用软件延时的方法消除;向p2口写入f0h后,从p2口读出的数据若不是f0h,则说明有键被按下,此时,延时20毫秒再读p2口,若读到的数据与20毫秒前的数据相同,则说明按键已不抖动,可以进行反转测试,否则放弃该数据。当某次按键的操作处理完成后,程序中要等待操作者抬起按键,程序才继续处理下次按键。本程序没有设计识别重键的功能,对同时按下两个或多个键的情况不予处理。3. 数据组织程序初始化或每次数据发送完毕,将显示缓冲区buf的前三个字节填入0bh,最后一个字节填入0:0b 0b 0b 00这样就在四个led上显示成“ 0”。当操作者按下一个数字键时,显示器上原有的数字左移一位(若此次按下的为第一个数字键,则原有的数字不移动),新按的数字出现在显示器的最右边,当已达到四位数字时,再按数字键将不会被接受。4数据发送程序当操作者按下“确定”键后,单片机执行发送程序。首先将p3.2 (收/发控制) 脚置为1,然后读取并发送本机编号。打分和显示终端的编号均为四个ascii码字符。1号终端的编号为0001,2号终端为0002,3号终端为0003,显示终端编号为0000。发送完本机编号后,再发送数据,即从左到右依次读取显示缓冲区中的bcd码,将其转换成ascii码后发送出去。若操作者没有输满4位数字就发送,显示缓冲区中前13个字节会有不可显示码(大于等于0bh的数字),不可显示码不发送。小数点单独以一个字符发送,因此,打分终端每次每次发送机号和数据合起来最少5个字符,最多9个字符。本设计中终端的机器编号被固化在rom中,用户无法改变;如果改成编号可以在单片机外用跳线设置,这样,当某个打分终端坏了,用户可以设置一个相同编号的备用打分终来端代。为了保证数据发送正确,终端在发送每个字符的同时,求它们的低4位的累加和,机号和分数发送完毕,最后发送一个字节的累加和;为了使发送给主机的数据均为文本格式,累加和的高4位被置为0011,即累加和本身也是一个阿拉伯数字。为了防止万一数据发送出错需要重复发送,在数据发送完后,要清除缓冲区之前,还将缓冲区中的数据备份起来。5. 串行接收及命令处理程序当主机上有人点击“开始打分”按钮后,主机按事先设定的打分终端个数(假设为3个)从“0001”到“0003”依次查询每一个打分终端,即向打分终端发送终端号和命令,命令只有两个:发送命令,用字符“t”表示重发命令,用字符“r”表示(主机接收失败时让终端重发)若主机发给本机的命令为“t”命令,本程序并不立即发送分数,而只是置“允许发送”标志,待评委打完分,按下“确定”键后立即发送,发送后清除“允许发送”标志。若未收到发给本机的“t”命令,则即使评委按了“确定”键也不会发送数据。若主机发给本机的命令为“r”命令,表明要求本机重新发送数据,此时,该程序将备份数据恢复到显示缓冲区并发送,发送完后再清除显示缓冲区。4.2 显示终端程序设计421 程序流程图显示终端的程序流程如图4-2所示。其程序分为三个部分,串行中断子程序负责接收主机发来的数据,主程序负责程序初始化、对收到的数据进行机号判别、将收到的数据组织到显示缓冲区等,定时器0中断服务程序负责显示器的动态扫描,即将显示缓冲区buf中的的四个bcd码转换成段码在led上显示出来,这部分程序与打分终端的定时器0中断服务程序完全相同,这里就不再重复。422 程序说明1. 串行接收中断服务程序本程序负责接收主机发来的数据存入输入缓冲区,同时将收到字符的个数传递给主程序。由于从主机发来的字符串中没有结束字符,程序中无法根据收到的字符判断本次通信是否结束,本程序中判断的办法是,当50毫秒内不再收到主机发来的字符,则认为本次通信结束。具体实现的方法是,设置一个变量stim,在每次执行定时器0中断服务程序时将其加一(5毫秒),在每收到一个字符时将其清0,主程序在已经收到字符的前提下等待该变量的值为10(50毫秒)时,n中断返回y已收9个数据?寄存器入栈使用第10组寄存器置正在接收数据标志清除串行接收计时器接收一字符接收数据计数+1寄存器出栈串行中断子程序定时器中断子程序段代码送led口将对应位led点亮改变有送指针,为下一次扫描作准务恢复有关寄存器n该数高4位为0?y置计数初值串行接收计时+1寄存器入栈选用第01组通用寄存器5毫秒计数+1查表得到段代码取要显示的数将段代码的小数点位置低计算本次要显示的位对应的显示缓冲区地址中断返回主程序从本机号码表取一字符清除接收计数单元清除正在接收数据标志ny处理完毕?n将ascii码转换成bcd码将前一位bcd码的高4位置为非0指针指向下一字符指针指向下一字符r7=接收缓冲区剩余字符数r1=显示缓冲区首地址从接收缓冲区中读取一字符y比较完毕?ny=接收缓冲区中字符?清空显示缓冲区显示“- - - -”y正在接收数据?ny到50毫秒?n开始初始化dptr=本机号码表首地址r0=接收缓冲区首地址r7=本机号码长度(4)y是小数点?n图4-2 显示终端程序流程图认为与主机的通信完毕,开始判别机号,处理数据。2主程序主程序在对中断、定时器、串口及有关变量进行初始化后,开始等待串口接收数据,当变量stim=10时,认为主机已经有50毫秒没有发送字符了,可以认为通信结束,可以从输入缓冲区中读取前四个字符,与本机编号表中的字符进行比较,当两者完全相同时将其余字符作为数据组织到显示缓冲区中。423 程序设计中存在的问题通信协议过于简单,打分终端向主机发送数据时未进行冲突检测,一旦终端和终端、终端和主机在0.1秒时间内同时发送数据,将造成数据传输错误。5 系统调试显示及打分终端的调试主要分为硬件调试和软件调试两个步骤。在制作硬件电路的同时,调试也在穿插进行。这样有利于问题的分析和解决,不会造成问题的积累,而且不会因为一个小问题而对整个电路进行检查,从而可以节约大量的调试时间。软件设计中,写好一个功能模块,马上就进行调试,思想方法上与硬件调试差不多。5.1 硬件调试511 显示电路的调试线路板焊接完毕,经初步目测检查无误后,先不插集成电路,用万用表的电阻档测量+5v端对地端电阻应为无穷大,接上+5v电源,对显示电路进行调试。单片机插座上,用导线将p3.3对地短路,即使控制led4的晶体管bg4导通,然后对照原理图将p1口8根线轮流对地短路,led4的8个笔划应被依次点亮,若某一笔划不亮,则是该笔划焊接不好;若除led4外,其它led上也有相同笔划被点亮,则说明p3.3和该led的控制端存在短路现象;若led4正常,再将p3.3短路线断开,将 p3.4(控制led3的引脚)对地短路,重复上述过程,逐一检查led3的各个笔划是否都能点亮。按照此方法,再检查led2和led1,直到四个led都能正常点亮,至此,显示电路调试完毕。512 键盘电路的调试断开电源,对照原理图,按住一个键,用万用表电阻档测量单片机插座上相应两个引脚的电阻应为0,否则说明焊接有问题。比如按住数字键0,p2.4和p2.5两引脚间应短路,按住数字键1,p2.3和p2.4之间应短路,依此类推,直至将所有按键检查完毕。其它电路比较简单,目测基本上能够排除故障。5.2 软件调试在软件调试中,我使用了万利公司的ae52型仿真仪和中文medwin 2.09的集成调试软件,对于有些属于单片机内部数据处理的程序段,无需仿真仪,可以采用仿真软件模拟仿真,只有涉及到单片机外部的一些操作,如显示、按键、通信等才需要使用仿真仪。521 调试打分和显示终端的显示扫描程序将显示扫描程序写成死循环,初始化时向显示缓冲区中依次写入01、02、03、04四个数字,用仿真仪单步运行程序,四个led上依次显示1、2、3、4,全速运行程序,led上能稳定显示这四个数字;然后将死循环程序前面加上保护有关寄存器,置定时器初值等语句,在程序末尾加上恢复寄存器和中断返回语句,这样就将死循环程序改成了中断子程序,再在初始化程序中加上有关中断的初始化语句(如开中断、启动定时器等),使程序能以中断方式运行。522 调试打分终端的按键识别程序用仿真仪单步运行程序,按住某个键,看从p2口读得的扫描码是否正确,是否能从扫描码表中查到正确的数字,数字能否正确地显示在正确的位置上,如此细心调试,直至全部正确为止。523 调试显示终端的串行接收程序显示终端的串行接收采用中断方式,将其通过485总线接到计算机串口上,在计算机上运行串口调试程序,在单片机的串行接收中断子程序开头设置断点并全速运行仿真仪,用串口调试程序向串口发送字符,程序应停止在断点处,否则可能是初始化程序有问题;从断点处单步执行程序,检查从sbuf中读出的字符是否正确,收到的字符是否正确地填入输入缓冲区中,若全部正确,则串行接收程序调试完毕。结束语经过这次毕业设计,我觉得自己学到了不少东西。归纳起来,主要有以下几点:1、大学四年的时间都在学习理论知识,并未真正去应用和实践。经过这次毕业设计,我接触到了更多平时没有接触到的新问题、新设备、新器件,发现了自己很多不足之处。我还体会到了所学理论知识的重要性:知识掌握得越多,设计得就更全面、更顺利、更好。2、了解了进行电子产品设计开发必不可少的几个阶段。毕业设计能够从理论设计和工程实践相结合、巩固基础知识与培养创新意识相结合、个人作用和集体协作相结合等方面全面的培养学生的素质。我经过这次系统的毕业设计,熟悉了对一项课题进行研究、设计和实验的详细过程。这些在我们在将来的工作和学习当中都会有很大的帮助。 3、学会了怎样查阅资料和利用工具书。平时课堂上所学习的知识大多比较陈旧,作为电子信息工程专业的学生,由于专业特点自己更要积极查阅当前的最新技术资料。一个人不可能什么都学过,什么都懂,因此,当你在设计过程中需要用一些不曾学过的东西时,就要去有针对性地查找资料,然后加以吸收利用,以提高自己的应用能力,而且还能增长自己见识,补充最新的专业知识。4、实践能力得到了进一步提高,在调试过程中积累了一些经验。5、毕业设计对以前学过的理论知识起到了回顾作用,并对其加以进一步的消化和巩固。6、毕业设计培养了严肃认真和实事求是的科学态度。而且培养了吃苦耐劳的精神以及相对应的工程意识,同学之间的友谊互助也充分的在毕业设计当中体现出来了。致 谢在这里,我要感谢我的导师闰玉德副教授,他平时对我们严格要求,无论是理论上还是实践上都给了我很大的帮助,受到很大启发,他那种认真负责的工作态度和深厚的理论水平更使我收益匪浅。在此我深表谢意!我还要感谢我以前的实习单位淮阴师范学院仪器厂领导的技术人员,在我制作电路和硬软件调试过程中,他们给予热心指导。我还要感谢和我的同组的周剑同学,他和我团结协作,配合默契,对我完成毕业设计起到了不可替代的作用。 另外,我还要真诚的感谢给予我帮助和鼓励的所有同学,谢谢你们!参 考 文 献1 余锡存,曹国华.单片机原理与接口技术.西安电子科技大学出版社,20012 王幸之,钟爱琴,王雷,王闪.at89系列单片机原理与接口技术.北京邮电大学出版社,20013 何力民.单片机高级教程.北京航空航天大学出版社,20024 周明德,蒋本珊.微机原理与接口技术. 北京:人民邮电出版社,20025 孟贵华.电子元器件选用入门.北京: 机械工业出版社,2004附录a打分终端程序清单led_port equ p1 ;led段驱动端口scn_port equ p3 ;led位驱动端口(p3.6-p3.3)key_portequp2;键盘端口redeequp3.2;接收、发送控制脚(0-接收,1-发送)dotbit4;按过小数点标志 dsegorg21hbuf:ds4;显示缓冲区 21h-24hscn_inx: ds 1 ;扫描指针(0-3)scn_code: ds 1 ;扫描段代inx:ds1;当前输入数据首位位置(0-3,0为最右位,3为最左位)cseg org 00h ljmp init;主程序入口,转初始化程序;-org 0bh;定时中断0入口 ljmp intp0 ;每5ms中断一次,用于刷新;-org 23h;串行中断入口 reti ;-初-始-化- org 30hinit:movsp,#50h;初始化堆栈指针clrrs0;选用第00组通用寄存器clrrs1movpcon,#0 ;波特率不倍增movscon,#50h ;串口工作方式1,ren=1(允许接收) movtmod,#21h;定时器0方式1,定时器1方式2(作波特率发生器用) mov th1,#0fdh ;(11.0592mhz晶振,9600b/s,th=fdh) mov tl1,#0fdh;256-11.0592*1000000/(384*9600)=253=fdh mov th0,#0eeh ;计数初值,每次5ms,11.0592mhz晶振) mov tl0,#0 ;65536-(5ms/1.085us)=0ee00hsetb tr0 ;启动定时器0setb tr1 ;启动定时器1 setb ea ;中断总允许 setbet0;允许定时器0中断 mov scn_inx,#0;扫描指针初始值 mov scn_code,#077h ;0 1110 111b段扫描初始值(最左边led先亮) mov p0,#255 mov p1,#255 mov p3,#255movinx,#0;输入数字个数(开始输入数据首位位置在最右位) clrdot;清除按过小数点标志位clrrede;接收发送控制脚为0-接收方式lcallclrbuf;显示缓冲区清空,显示成 0main01:lcallrdkey;调用读键盘子程序(返回值在r6中)mova,r6cjnea,#10,main04;不是小数点转移jbdot,main20;已按过小数点则该次按键作废,等待按钮抬起后重读键盘setbdotmova,buf+3orla,#0f0h;在最右边一位led上加上显示小数点标志movr6,asjmpmain19main04:cjnea,#11,main06;不是ok键转移lcallsend;发送机号和得分lcallclrbuf;显示缓冲区清空clrdotmovinx,#0sjmpmain20;等待按键抬起main06:mova,inxjzmain19main10:clrcsubba,#5;输入已达4位,不允许再输入jncmain20lcallmovemain19:movbuf+3,r6incinxmain20:mov key_port,#0f0hmova,key_portcjnea,#0f0h,main20;等待按键抬起sjmpmain01;-发送数据子程序-send:setbrede;接收/发送控制脚(1为发送)lcalldelay;延时20毫秒 clret0;禁止定时器0中断,防止显示扫描影响串口发送数据movdptr,#no;发送本机号movr7,#4;本机号4位se02:clramovca,a+dptrlcallsb;发送一字节数据(在a中)incdptrdjnzr7,se02movr7,#4;发送4位数据movr0,#bufse04:mova,r0;从缓冲区中读数据anla,#0fh;清除高4位cjnea,#10,se05;未显示的位(其值大于等于10)不发送se05:jncse06adda,#30h;bcd码变成ascii码lcallsb;发送一字节数据(在a中)mova,r0;再从缓冲区中读数据anla,#0f0h;检测刚才发送的数是否带小数点jzse06;不带小数点转移mova,#2eh;2eh是小数点的ascii码lcallsb;发送小数点se06:incr0djnzr7,se04 setbet0;发送完毕,允许定时器0中断clrrederetsb:movsbuf,a;发送一字节数据子程序jnbti,$clrtiret;-显示缓冲区清空子程序-clrbuf:movr1,#3mov r0,#buf;显示缓冲区清空cb2:mov r0,#0fh;显示代码大于0ah则什么也不显示 inc r0djnzr1,cb2mov r0,#0;显示器最右边显示一个0ret;-显示缓冲区左移1位子程序-move:movbuf,buf+1movbuf+1,buf+2movbuf+2,buf+3movbuf+3,#0fhret;-读键盘子程序(返回值在r6中)-rdkey: mov key_port,#0f0hrd01:mova,key_port;读键盘cjnea,#0f0h,rd02sjmprd01;无人按键盘,循环再读rd02:lcalldelay;延时20毫秒消除按键盘抖动cjnea,key_port,rd01;再读键盘orla,#0fhmovkey_port,alcalldelaymovr7,key_portmovdptr,#key_tab;指向键码表movr6,#0rd06:mova,r6;movca,a+dptrclrcsubba,r7jzrd08;找到,返回incr6mova,r6clrcsubba,#13;共12个键jncrdkey;未找到,是非法键码,继续等待按钮sjmprd06;继续查表rd08:ret;-定时器0中断服务程序,间隔5ms-intp0:pushaccpushpswpushdplpushdph mov th0,#0eeh ;置计数初值 mov tl0,#0 setbrs0;1 选用第01组通用寄存器clrrs1 ;0mov a,scn_inx ;取扫描指针 anl a,#03h ;清除高6位adda,#buf;加显示缓冲区首地址movr1,amova,r1;取要显示的数movr7,amovdptr,#code_tab;dptr指向笔划代码表anla,#0fh;清除高4位 movc
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年军队文职人员统一招聘笔试( 电子对抗)模拟题及答案
- 2025年军队文职人员统一招聘面试( 装备管理)模拟题及答案
- 高中语文苏教版史记选读学案专题三第8课李将军列传
- 2025农行人民币借款合同
- 走进焊接 课件 2.4千里之堤毁于蚁穴-焊接的缺陷
- 2025租赁合同生效的情形
- 供应商供热协议
- 健身俱乐部会员权益及服务细则协议
- 2025年工勤技能(综合管理)真题(附答案)
- 个人职业生涯评估合同
- 2020公路工程质量检验评定标准第二册机电工程
- 2025年盾构机职业技能考试题库及答案
- 医院物业交接方案
- 2025年国家保安员试考试题库(附答案)
- 上海民办兰生中学招聘考试真题2024
- 乡土中国考试题及答案
- 刻蚀工艺考试题及答案
- 北京理工大学入党流程
- 中国教育信息化发展报告
- 工程进度款申请书
- 培养“最好的我”新时代品质少年-学校课程规划与实施方案
评论
0/150
提交评论