1、 专业 课程设计任务书 年 第 2 学期第 16 周 19 周 题目基于RS-485单片机通信系统设计内容及要求1.利用RS485实现单片机双向通讯;2.经过键盘实现从机选择、发送数据输入;3.主机显示发送数据及从机编号。4提升要求:经过键盘实现循环工作模式、指定从机这2种工作方法切换。进度安排 16周:查找资料,进行系统硬件设计、软件方案设计; 17周:硬件制作、软件分模块调试; 19周:系统联调; 19周:设计结果验收,汇报初稿撰写。学生姓名:11042104万娇 11042109赵佳慧指导时间:周一、周三、周五指导地点:E楼 610 室任务下达 6 月 3 日任务完成 6月 27 日考评
2、方法1.评阅 2.答辩 3.实际操作 4.其它指导老师张小林系(部)主任注:1、此表一组一表二份,课程设计小组组长一份;任课老师讲课时自带一份备查。2、课程设计结束后和“课程设计小结”、“学生成绩单”一并交院教务存档。摘要串口通信是一个广泛应用于各个领域通信方法,在远距离数据传输和控制系统中,能够依据RS-485协议实现远距离传输。此次课设即利用MAX485芯片实现半双工串行通信双向通信系统。系统关键由主机控制模块、通信模块、数据输入模块、数据显示模块和模数转换模块五个部分组成,实现了 利用RS-485实现单片机双向通信,经过键盘实现从机选择、发送数据,主机显示发送数据及从机编号,经过键盘实现
3、循环工作模式、指定从机这两种工作方法切换。此系统含有使用方便、操作简单、便于实现、成本低、可靠性高、可拓展性强、易于维护等特点,含有较广泛应用前景。关键字:单片机;RS-485总线;串行通信;数模转换目录序言1第一章 设计内容及要求21.1设计内容21.2设计要求2第二章 系统组成及工作原理32.1系统组成32.2 工作原理3第三章 硬件电路方案设计43.1 主机控制模块43.2 数据显示模块53.3 模数转换模块63.4 键盘输入模块73.5 通信模块83.5.1 RS485通信协议83.5.2 RS485通信格式93.6从机控制模块103.6.1 单片机最小系统103.6.2 显示模块11
4、第四章 软件设计124.1 通信协议124.1.1 串行通信协议比较RS232 RS422 RS485124.1.2 通信过程144.2 主机程序144.2.1 主程序步骤图144.2.2 矩阵键盘输入子程序154.2.3 数码管显示子程序164.2.4 传输模块子程序174.3 从机程序174.3.1从机总步骤图174.3.2 接收并显示子程序18第五章 试验调试和测试结果和分析19第六章 结论20第七章 参考文件21附录一 电路图22附录二 程序代码23序言单片机是一个集成电路芯片,是采取超大规模集成电路技术把含有数据处理能力中央处理器CPU、随机存放器RAM、只读存放器ROM、多个I/O
5、口和中止系统、定时器/计数器等功效(可能还包含显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上组成一个小而完善微型计算机系统。而在以单片机为基础数据采集和实时控制中,经过计算机中RS-232接口进行计算机和单片机之间命令和数据传送,就能够对现场进行监测和控制。因为计算机上RS-232所传送距离不超出30m,所以在远距离数据传送和控制时,能够利用MAX485接口芯片将RS232协议转换成RS-485协议进行远距离传送。RS-485是双向、半双工通信协议,允很多个驱动器和接收器挂接在总线上,其中每个驱动器全部能够脱离总线。接收器输入灵敏度为200mV,这就意味着若要
6、识别符号或间隔状态,接收端电压必需高于+200mV或低于-200mV。最小接收器输入阻抗为12K,驱动器输出电压为1.5V(最小值)、5V(最大值)。第一章 设计内容及要求1.1设计内容设计一个基于RS-485单片机通信系统。1.2设计要求1.经过键盘输入数据和显示要传输数据;2经过串口利用RS-485总线,将数据发给单片机主机,并显示。 单片机1 RS-485 RS-485 单片机2 图1.1 系统设计方案图 第二章 系统组成及工作原理2.1系统组成系统关键由主机控制模块、通信模块、数据输入模块、数据显示模块和数模转换模块五个部分组成。其系统框图以下: 通信从机 通信主机 数据显示 数据显示
7、通信模块数据输入数模转换键盘图2.1 系统框图在本系统中,通信主机是关键部分,关键完成对数据处理、操作和运算;数据输入模块关键完成数据输入,全部些人机交换数据全部从该模块中输入;数据显示模块完成了通信双方数据显示;通信模块即完成数据接收和发送,实现数据远距离传输。2.2 工作原理基于RS-485单片机通信系统设计原理是:利用数模转换模块或键盘输入模块经过P3口或P1口将数据输入到C51单片机主机里,C51单片机主机经过程序来控制共阴数码管显示数据并利用MAX485芯片将数据传输到C51单片机从机中,C51单片机从机再经过程序控制另一个共阴数码管显示传输过来数据。第三章 硬件电路方案设计3.1
8、主机控制模块图3.1 主机控制模块89C51是一个带4K字节闪烁可编程可擦除只读存放器(FPEROMFalsh Programmable and Erasable Read Only Memory)低电压、高性能CMOS8位微处理器,俗称单片机。单片机可擦除只读存放器能够反复擦除100次。该器件采取ATMEL高密度非易失存放器制造技术制造,和工业标准MCS-51指令集和输出管脚相兼容。因为将多功效8位CPU和闪烁存放器组合在单个芯片中,ATMEL89C51是一个高效微控制器。 a.数据存放器片内为128个字节,片外最多可外扩至64k字节,用来存放程序在运行期间工作变量、运算中间结果、数据暂存和
9、缓冲、标志位等,所以称为数据存放器。b.程序存放器因为受集成度限制,片内只读存放器通常容量较小,假如片内只读存放器容量不够,则需用扩展片外只读存放器,片外最多可外扩至64k字节。c.中止系统含有5个中止源,2级中止优先权。d.定时器/计数器片内有2个16位定时器/计数器, 含有四种工作方法。e. 串行口1个全双工串行口,含有四种工作方法。可用来进行串行通讯,扩展并行I/O口,甚至和多个单片机相连组成多机系统,从而使单片机功效更强且应用更广。P1口、P2口、P3口、P4口为4个并行8位I/O口。f.特殊功效寄存器共有21个,用于对片内个功效部件进行管理、控制、监视。实际上是部分控制寄存器和状态寄
10、存器,是一个含有特殊功效RAM区。g.微处理器该单片机中有一个8位微处理器,和通用微处理器基础相同,一样包含了运算器和控制器两大部分,只是增加了面向控制处理功效,不仅可处理数据,还能够进行位变量处理。因为集成度限制,最小应用系统只能用作部分小型控制单元。其应用特点:(1) 有可供用户使用大量I/O口线。(2) 内部存放器容量有限。(3) 应用系统开发含有特殊性。3.2 数据显示模块此次课设采取八段共阴极数码管显示,利用51单片机程序来控制数码管显示。图3.2 数据显示模块3.3 模数转换模块此次课设利用ADC0832来实现数模转换。图3.3 模数转换模块ADC0832 是美国国家半导体企业是生
11、产一个 8 位分辨率、双通道 A/D 转换芯片。其分辨率可达256级,芯片转换时间仅为32S,转换速度快且稳定性强,其芯片以下图所表示:图3.4 ADC0832芯片其中各管脚功效为:片选使能,低电平芯片使能。CH0 模拟输入通道0,或作为IN+/-使用。 CH1 模拟输入通道1,或作为IN+/-使用。GND 芯片参考0 电位(地)。DI 数据信号输入,选择通道控制。DO 数据信号输出,转换数据输出。 CLK 芯片时钟输入。Vcc/REF 电源输入及参考电压输入(复用)。3.4 键盘输入模块图3.5 键盘输入模块此次课设采取矩阵式键盘,其突出优点是I/O端口利用率高,可循环操作,而且扫描键盘时占
12、用CPU时间少,操作灵活,矩阵键盘控制状态多,编写程序较方便,故此模块采取矩阵式键盘。3.5 通信模块图3.6 通信模块MAX485接口芯片是Maxim企业一个RS-485芯片。MAX485是用于RS-485和RS-422通信低功耗收发器,器件中全部含有一个驱动器和一个接收器。其驱动器摆率不受限制,能够实现最高2.5Mbps传输速率。采取单一电源+5 V工作,额定电流为300 A,采取半双工通讯方法。它完成将TTL电平转换为RS485电平功效。MAX485芯片结构和引脚全部很简单,内部含有一个驱动器和接收器。RO和DI端分别为接收器输出和驱动器输入端,和单片机连接时只需分别和单片机RXD和TX
13、D相连即可;和DE端分别为接收和发送使能端,当为逻辑0时,器件处于接收状态;当DE为逻辑1时,器件处于发送状态,因为MAX485工作在半双工状态,所以只需用单片机一个管脚控制这两个引脚即可;A端和B端分别为接收和发送差分信号端,当A引脚电平高于B时,代表发送数据为1;当A电平低于B端时,代表发送数据为0。在和单片机连接时接线很简单。只需要一个信号控制MAX485接收和发送即可。同时将A和B端之间加匹配电阻,通常可选100电阻。两个RS4851脚和4脚接在对应单片机上以实现功效。3.5.1 RS485通信协议因为RS485通讯是一个半双工通讯,发送和接收共用同一物理信道。在任意时刻只许可一台单机
14、处于发送状态。所以要求应答单机必需在侦听到总线上呼叫信号已经发送完成,而且没有其它单机发出应答信号情况下,才能应答。半双工通讯对主机和从机发送和接收时序有严格要求。假如在时序上配合不好,就会发生总线冲突,使整个系统通讯瘫痪,无法正常工作。要做到总线上设备在时序上严格配合,必需要遵从以下几项标准;1) 复位时,主从机全部应该处于接收状态。SN75176芯片发送和接收功效转换是由芯片 RET,DE端控制。RET=1,DE=1时,SN75176发送状态;RET=0,DE=0时,SN75176处于接收状态。通常使用单片机一根口线连接RET,DE端。在上电复位时,因为硬件电路稳定需要一定时间,而且单片机
15、各端口复位后处于高电平状态,这么就会使总线上各个分机处于发送状态,加上上电时各电路不稳定,可能向总线发送信息。所以,假如用一根口线作发送和接收控制信号,应该将口线反向后接入SN75176控制端,使上电时SN75176处于接收状态。另外,在主从机软件上也应附加若干处理方法,如:上电时或正式通讯之前,对串行口做几次空操作,清除端口非法数据和命令。2) 控制端RET,DE信号有效脉宽应该大于发送或接收一帧信号宽度。在RS232,RS422等全双工通讯过程中,发送和接收信号分别在不一样物理链路上传输,发送端一直为发送端,接收端一直为接收端,不存在发送、接收控制信号切换问题。在RS485半双工通讯中,因
16、为SN75176发送和接收全部由同一器件完成,而且发送和接收使用同一物理链路,必需对控制信号进行切换。控制信号何时为高电平,何时为低电平,通常以单片机TI,RI信号作参考。发送时,检测TI是否建立起来,当TI为高电平后关闭发送功效转为接收功效;接收时,检测RI是否建立起来,当RI为高电平后,接收完成,又能够转为发送。3.5.2 RS485通信格式RSS485协议信息格式以下:(1) 编码格式;二进制代码。(2) 波特率:9600 bs。(3) 通信方法:半双工。(4) 每个字符由u 位组成;1位:起始位(0);8位:数据位;l位:停止位(1)。(5)主机问询通常格式以下:从机地址码命令码 数据
17、个数数据 校验和 表3.1 主机问询通常格式(6)从机应答通常格式以下:返回地址码命令码 数据个数数据校验和 表3.2 从机应答通常格式根据要求,只需要实现双机通信即可,并无要求主从机特定地位,不过原理是相同。3.6从机控制模块3.6.1 单片机最小系统图3.7 单片机最小系统单片机最小系统关键包含电源、复位电路和时钟电路等。单片机复位电路原理是在单片机复位引脚RST上外接电阻和电容,实现上电复位。当复位电平连续两个机器周期以上时复位有效。复位电平连续时间必需大于单片机两个机器周期。具体数值能够由RC电路计算出时间常数。复位电路由按键复位和上电复位两部分组成。(1)上电复位:STC89系列单片
18、及为高电平复位,通常在复位引脚RST上连接一个电容到VCC,再连接一个电阻到GND,由此形成一个RC充放电回路确保单片机在上电时RST脚上有足够时间高电平进行复位,随即回归到低电平进入正常工作状态,这个电阻和电容经典值为10K和10uF。(2)按键复位:按键复位就是在复位电容上并联一个开关,当开关按下时电容被放电、RST也被拉到高电平,而且因为电容充电,会保持一段时间高电平来使单片机复位。单片机时钟电路是由方向放大器组成。XTAL1为时钟电路输入端,XTAL2为时钟电路输出端。3.6.2 显示模块从机显示模块和主机原理一致,这里就不再次叙述。 第四章 软件设计4.1 通信协议 4.1.1串行通
19、信协议比较RS232 RS422 RS485RS-232、RS-422和RS-485标准只对接口电气特征做出要求,而不包含接插件、电缆或协议,在此基础上用户能够建立自己高层通信协议。比如:视频服务器全部带有多个RS422串行通讯接口,每个接口均可经过RS422通讯线由外部计算机控制实现统计和播放。视频服务器除提供多种控制硬件接口外,还提供协议接口,如RS422接口除支持RS422Profile协议外,还支持Louth、Odetics、BVW等经过RS422控制协议。RS-232、RS-422和RS-485全部是串行数据接口标准,全部是由电子工业协会(EIA)制订并公布,RS-232在1962年
20、公布。RS-422由RS-232发展而来,为改善RS-232通信距离短、速率低缺点,RS-422定义了一个平衡通信接口,将传输速率提升到10Mbps,传输距离延长到4000英尺(速率低于100Kbps时),并许可在一条平衡总线上连接最多10个接收器。RS-422是一个单机发送、多机接收单向、平衡传输规范,被命名为TIA/EIA-422-A标准。为扩展应用范围,EIA又于1983年在RS-422基础上制订了RS-485标准,增加了多点、双向通信能力,即允很多个发送器连接到同一条总线上,同时增加了发送器驱动能力和冲突保护特征,扩展了总线共模范围,后命名为TIA/EIA-485-A标准。1. RS-
21、232串行接口标准现在RS-232是PC机和通信工业中应用最广泛一个串行接口。RS-232被定义为一个在低速率串行通讯中增加通讯距离单端标准。RS-232采取不平衡传输方法,即所谓单端通讯。收、发端数据信号是相对于信号地。经典RS-232信号在正负电平之间摆动,在发送数据时,发送端驱动器输出正电平在+5+15V,负电平在-5-15V电平。当无数据传输时,线上为TTL,从开始传送数据到结束,线上电平从TTL电平到RS-232电平再返回TTL电平。接收器经典工作电平在+3+12V和-3-12V。因为发送电平和接收电平差仅为2V至3V左右,所以其共模抑制能力差,再加上双绞线上分布电容,其传送距离最大
22、为约15米,最高速率为20Kbps。RS-232是为点对点(即只用一对收、发设备)通讯而设计,其驱动器负载为3k7k。所以RS-232适合当地设备之间通信。2. RS-422和RS-485串行接口标准(1) 平衡传输RS-422、RS-485和RS-232不一样,数据信号采取差分传输方法,也称作平衡传输,它使用一对双绞线,将其中一线定义为A,另一线定义为B。通常情况下,发送驱动器A、B之间正电平在+2+6V,是一个逻辑状态,负电平在-2V6V,是另一个逻辑状态。另有一个信号地C,在RS-485中还有一“使能”端,而在RS-422中这是可用可不用。“使能”端是用于控制发送驱动器和传输线切断和连接
23、。当“使能”端起作用时,发送驱动器处于高阻状态,称作“第三态”,即它是有别于逻辑“1”和“0”第三态。(2) RS-422电气要求因为接收器采取高输入阻抗和发送驱动器比RS232更强驱动能力,故许可在相同传输线上连接多个接收节点,最多可接10个节点。即一个主设备(Master),其它为从设备(Salve),从设备之间不能通信,所以RS-422支持点对多双向通信。RS-422四线接口因为采取单独发送和接收通道,所以无须控制数据方向,各装置之间任何须需信号交换均能够按软件方法(XON/XOFF握手)或硬件方法(一对单独双绞线)实现。RS-422最大传输距离为4000英尺(约1219米),最大传输速
24、率为10Mbps。其平衡双绞线长度和传输速率成反比,在100Kbps速率以下,才可能达成最大传输距离。只有在很短距离下才能取得最高速率传输。通常100米长双绞线上所能取得最大传输速率仅为1Mbps。RS-422需要一终接电阻,要求其阻值约等于传输电缆特征阻抗。在矩距离传输时可不需终接电阻,即通常在300米以下不需终接电阻。终接电阻接在传输电缆最远端。(3) RS-485电气要求因为RS-485是从RS-422基础上发展而来,所以RS-485很多电气要求和RS-422相仿。如全部采取平衡传输方法、全部需要在传输线上接终接电阻等。RS-485能够采取二线和四线方法,二线制可实现真正多点双向通信。R
25、S-485总线,在要求通信距离为几十米到上千米时,广泛采取RS-485串行总线标准。RS-485采取平衡发送和差分接收,所以含有抑制共模干扰能力。加上总线收发器含有高灵敏度,能检测低至200mV电压,故传输信号能在千米以外得到恢复。RS-485采取半双工工作方法,任何时候只能有一点处于发送状态,所以,发送电路须由使能信号加以控制。RS-485用于多点互连时很方便,能够省掉很多信号线。应用RS-485能够联网组成份布式系统,其许可最多并联32台驱动器和32台接收器。RS-485和RS-422不一样还在于其共模输出电压是不一样,RS-485是-7V至+12V之间,而RS-422在-7V至+7V之间
26、;RS-485满足全部RS-422规范,所以RS-485驱动器能够用在RS-422网络中应用。RS-485和RS-422一样,其最大传输距离约为1219米,最大传输速率为10Mbps。平衡双绞线长度和传输速率成反比,在100Kbps速率以下,才可能使用要求最长电缆长度。只有在很短距离下才能取得最高速率传输。通常100米长双绞线最大传输速率仅为1Mbps。4.1.2 通信过程一次完整通信过程分为3个阶段:发送机处理输入数据、通信和接收机显示输入数据。第一阶段,发送机判定输入键值,将其打包处理;通信阶段,把打包处理好数值发送给寄存器,再从寄存器发送给接收机;接收机显示阶段,把打包好数据处理后还原原
27、来数据,经过查表以数码管形式显示;此时接收机清除接收缓冲区及相关变量,准备和主机下次通信。任何一次完整通信过程全部是由发送机方提议,两个单片机在无键值输入情况下全部处于接收状态。4.2 主机程序4.2.1 主程序总步骤图多级双向通信软件设计关键分为:系统初始化、确定主从及关系、双方进行握手、主机发送数据和从机接收数据等六大部分;每个功效米快快对于通信双方全部是必不可缺,只有这么主机才能很好对外部信息进行采集、分析和处理。系统初始化:系统初始化包含串口初始化和显示模块初始化。关键实现串口中止开启、总中止开启、定时器选择及其工作方法选择、串口工作方法选择和显示模块初始化等功效。有键按下:通信双方进
28、行通信时需确定双方主从关系,然后经过键盘按下,显示所传输数据。键值处理:在该部分中,通信逐句会发送握手信号给从机,主机发送数据经过处理再传送给从机。送显数据:所发送数据经过处理以后再发送给从机并显示。 开始从机接收数据:此部分功效较简单,只需完成从机不停接收主机发送数据即可。 初始化有键按下 N Y 键值处理 主机显示数据 发送数据给从机机 从机显示数据图4.1 主程序步骤图4.2.2 矩阵键盘输入子程序初始化后程序不停检测矩阵键盘情况,一旦检测到有键按下,消抖后即时开始处理输入数据。先以行为单位确定按下键在哪一行,然后再提取该行数据,以相和方法确定是该行第多个键按下了,由此确定按下到底是哪个
29、键。确定了以后,用比较方便传输16进制数值来替换。开始有键按下 N 扫描行,确定按下键行数 Y 扫描列,确定按键值转换成数值按键释放 N 数据显示并传输 Y 返回图4.2 矩阵键盘程序步骤图4.2.3 数码管显示子程序 接收数据 开始查表,得到对应码 将对应码发给P2 P2接共阴数码管 数码管显示数据 返回图4.3 数码管显示子程序步骤图4.2.4 传输模块子程序 所接收数据经过处理以后发送给从机。 开始关闭串口中止 设置状态为发送 将要传输数据给SBUF 传输后T1=0打开串口中止 返回 图4.4 传输模块子程序步骤图4.3 从机程序4.3.1从机总步骤图 开始 初始化数据传输 过来 N Y
30、 键值处理 从机显示数据图4.5从机主步骤图 4.3.2 接收并显示子程序 从机接收到主机传来信息,经过处理以后在从机数码管上显示。显示部分和主机显示部分相同。 开始中止标志位RI=0? N 打开接收 Y读缓存区值 调用显示子程序 返回 图4.6 接收部分步骤图第五章 试验调试和测试结果和分析先利用Proteus进行仿真,看能否满足要求,若满足要求后,再将写好主机程序和从机程序分别烧录进两个单片机里,两个单片机P3.0、P3.1控制RS485使能端,再接上数据输入输出两根导线,打开电源以后,两个单片机数码管显示模块全部处于显示状态;将采集电压开关闭合,按下其中任意一个键时,在释放瞬间两个单片机
31、数码管显示模块全部全部显示了矩阵键盘输入键值,而改变滑动电阻器阻值时,数码管显示模块数值并不发生改变;当采集电压开关关闭时,改变滑动电阻器阻值,两个单片机数码管显示模块全部全部显示了滑动变阻器输入阻值所对应数值,不过按下任意矩阵键盘键值,数码管显示模块数值不改变,证实串行通信成功。经过几次按键输入和模拟输入,确定单片机能够以半双工方法串行通信。第六章 结论此次课设内容是是RS485总线双机通信系统设计,本设计在单片机网络通信基础上,实现单片机双机通信。用RS485接口来实现单片机和单片机之间通信。采取主从式,即在数个单片机中,有一个是主机,其它是从机,从机要服从主机调度、支配。利用80C51单
32、片机串行口方法来实现这种主从式通信结构。同时利用了Keil和Proteus软件来实现单片机C语言编程,然后在proteus仿真软件中设计电路。此次课设整个过程包含经过理论设计,仿真软件仿真,确定具体方案,安装实际电路,调试电路、测试结果等多个方面内容。这就要求我们充足利用所学知识进行思索、借鉴。能够说,此次课设是针对前面所学知识进行一次比较综合检验。此次课设用时3个星期,成功完成了任务。总结我这次课设之所以能成功原因关键就是做好了充足准备,即熟练地掌握书本上理论知识、做好仿真并打印出来和充足了解自己将要用到芯片。这么才能对试验中出现问题进行分析和处理。即使最终还是出现了正确结果,但我这次设计还
33、是存在很大不足。一是程序略有繁琐;二是其实没有很好显示出RS485尤其功效。忽略这些不足,此次设计基础达成了试验要求。第七章 参考文件1 谭浩强. C程序设计.北京:清华大学出版社,.2 张先庭.单片机原理、接口和C51应用程序设计.北京:国防工业出版社,.3 张毅刚.单片机原理及应用M.高等教育出版社,.4 郭天祥.51单片机C语言教程.电子工业出版社,.5 张涵芳,徐爱卿.单片微型计算机及其应用M.北京:北京航空航天大学出版社,1991.附录一 电路图附录二 程序代码主机程序/*函数功效:AD转换子程序入口参数:CH出口参数:dat*/#include#include#define uch
34、ar unsigned char#define uint unsigned intuchar code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;sbit anjia=P32;sbit CS=P34;sbit Clk=P35;sbit DATI=P33;uchar a,key,num;uchar dat=0x00;uchar CH;uchar matrixkeyscan();void put(uchar);void display(uchar);void delay
35、ms(uint z)uint i,j;for(i=z;i0;i-)for(j=110;j0;j-);unsigned char adc0832(unsigned char CH) unsigned char i,test,adval; adval=0x00; test=0x00; Clk=0;/初始化 DATI=1; _nop_(); CS=0; _nop_(); Clk=1; _nop_(); if(CH=0x00)/通道选择 Clk=0; DATI=1; /通道第一位 _nop_(); Clk=1; _nop_(); Clk=0; DATI=0;/通道第二位 _nop_(); Clk=1;
36、 else Clk=0; DATI=1;/通道第一位 _nop_(); Clk=1; _nop_(); Clk=0; DATI=1;/通道第二位 _nop_(); Clk=1; Clk=0; DATI=1; for(i=0;i8;i+)/读取前位值 adval=1; Clk=1; _nop_(); Clk=0; if(DATI) adval|=0x01; else adval|=0x00; for(i=0;i=1; if(DATI) test|=0x80;else test|=0x00; _nop_();Clk=1;_nop_();Clk=0; if(adval=test)/比较前位和后位值,
37、假如不相同舍去。若一直出现显示为零,请将该行去掉? dat=test; _nop_(); CS=1;/释放ADC0832 DATI=1; Clk=1; return dat;void put(uchar c)SBUF=c;while(!TI);TI=0;void init()TMOD=0X20;TH1=0XFD;TL1=0XFD;TR1=1;SCON=0X50;EA=1;ES=1;/EX0=1;/IT0=0;void ser() interrupt 4if(RI=1)RI=0;a=SBUF;/*void display(uchar num)P2=tablenum; /显示函数只送段选数据/*u
38、char matrixkeyscan()uchar temp;P1=0xfe;temp=P1;temp=temp&0xf0;if(temp!=0xf0) delayms(10);temp=P1;temp=temp&0xf0;if(temp!=0xf0) temp=P1; switch(temp) case 0xee:key=0;break;case 0xde:key=1;break;case 0xbe:key=2;break;case 0x7e:key=15;break; while(temp!=0xf0) /等候按键释放 temp=P1; temp=temp&0xf0; /display(key); P1=0xfd;temp=P1;temp=temp&0xf0;if(temp!=0xf0) delayms(10);temp=P1;temp=temp&0xf0;if(temp!=0xf0) temp=P1; switch(temp) case 0xed:key=3;break;case 0xdd:key=4;break;case 0xbd:key=5;break;