第7章 MCS-51单片机定时计数器和串行接口.ppt

单片机与接口技术—教学课件

收藏

压缩包内文档预览:

资源预览需要最新版本的Flash Player支持。
您尚未安装或版本过低,建议您

单片机与接口技术教学课件,单片机,接口,技术,教学,课件
编号:184271731    类型:共享资源    大小:16.56MB    格式:ZIP    上传时间:2022-01-12 上传人:考**** IP属地:山西
30
积分
关 键 词:
单片机 接口 技术 教学 课件
资源描述:
单片机与接口技术—教学课件,单片机,接口,技术,教学,课件
内容简介:
第一章 系统简介1.1 JCF-59+EDA系统实验平台 JCF-59+EDA四合一系统是北京启东达爱思电子有限公司根据广大学者和许多高等院校实验需求,结合电子发展实际情况而研制的具有开发、应用、实验相结合的高科技实验设备。 JCF-59+EDA四合一系统由以下几个部分组成: 一 传感器信号输入处理电路(包括信号放大处理和压频转换技术等)。 二 对单片机进行仿真开发(包括在WINDOWS环境下程序设计和调试)。 三 单元接口电路(旨在对常用器件进行熟悉和了解)及应用实践。 四 系统综合设计与控制系统(旨在让学者掌握系统综合设计开发过程,在实际环境中的应用)。 五 结合单片机技术将数字电子自动化设计结合起来。以便让学者达到高成次产品设计水平。 JCF-59+EDA四合一系统除能满足科研人员进行产品开发外,同时还可满足院校实验室实验教学需要。可适用于传感器与检测,单片机及接口电路,仪表自动化检测与信号转换,自动控制原理等多个专业。据我们近20年设计开发单片机仿真器及教学实验设备的经验,目前科技人员开发产品成功率仅为80,但要花35倍(与国外相比)的时间,还有20也许某一功能了解不透,致使开发项目夭折、或因项目时间延误失去开发价值。学生进行毕业设计也存在同样类似的问题,这些研发出来的产品往往不能一次成功,研发的产品是一些不成熟的产品即半成品,多少会给单位带来一定的损失。其原因如下: a:首次开发没有经验,书上的内容与实际有一定的差异。一般写书者缺少实际经验。 b:许多代理商以赢利为目的虚假宣传产品,许多仿真开发实验产品存在功能简单,调试能力差等缺点。 对于科技人员及科研院校真正需要的是:信号处理(传感器),单片机仿真(对单片机开发),接口电路与控制,模数电子综合设计等。归纳如下: 1 具有现场开发环境(即传感器部分); 2 真正100CPU实时仿真能力,Windows环境下使用方便,不受文件长度限制,高级语言C全符号调试、环境变量观察方便等; 3 硬件查错功能强,内外程序数据转换调用方便,实时跟踪调试程序PC指针(国内很少具有该功能); 4 具有实际参考电路及程序进行比较(微机接口部分); 5 满足二次开发的要求; 6 具有硬件设计,软件调试借鉴功能; 7 具有一定规模及开发调试实力; 8 能满足数字电子设计需求。1.1.1 JCF-59+EDA实验系统结构图图1 实验系统结构图1.1.2 基本实验电路单元简介1 译码电路实验板上的译码电路由U1 16V8提供,译码输出地址为8000H,9000H,A000H,B000H,C000H,D000H,E000H,F000H供实验使用。位置在实验电路板的左上角位置,如图2所示。图2 系统译码电路2 LED发光二极管电路实验板上有16个发光二极管及相应的电路,L1-L16为相应发光二极管输入端,该输入端为高电平“1”时发光二极管亮,如图3所示。图3 发光二极管驱动电路3 逻辑电子开关电路系统实验板上有八个开关K0-K7,与之相对应的IN0-IN7孔为逻辑电平输出端,开关向上拔为逻辑电平“1”,向下拔为逻辑电平“0”,如图4所示。图4 电子开关电路4 脉冲发生电路实验平台上有一个单脉冲发生电路,标有两个引线插孔为正负单脉冲输出端。附近按钮州为单脉冲按钮,每按一次产生一个单脉冲,如图5所示。图5 单脉冲发生电路5 分频电路该电路由一片74LS393组成。实验系统上T0-T7为分频输出插孔,另一个插孔T为脉冲输入端。该计数器在上电时由RESET信号清零。当脉冲输入8MHZ时,T0-T7输出脉冲频率依次为8MHZ、4MHZ、2MHZ、1MHZ、500MHZ、250MHZ、125KHZ、62500HZ,如图6所示。图6 分频电路6 脉冲发生电路JCF-59实验系统提供了一个8MHZ的脉冲源,实验平台上标有8MHZ的插孔为脉冲输出端,如图7所示。图7 脉冲发生器1.1.3 实验系统资源分配 1 JCF-59系统的四个组成部分l 常用元件单元实验(包括ADC0809,8251,8259,8253,I0扩展等);l 输入信号处理部分及执行结构(包括温度传感器信号输入,气体传感器信号输入,湿度传感器信号输入,压力传感器信号输入,霍尔传感器信号输入及压频转换电路和串行通信接口电路等;执行结构包括步进电机,继电器,液晶显示接口,点矩阵显示模块等);l 仿真器部分(可实现MCS5l,MCS一196仿真开发等功能);l 单片机应用控制系统部分(包括CPU,ROM,RAM,DSl2887,8279,7109,DAC0832,8255等)。 2 仿真器接口输出实验口地址 在仿真器扩展口地址区已经给用户提供如下地址供用户使用:(该地址由仿真器提供)8000H,9000H,A000H,B000H,C000H等,在仿真器调试平台下可以运行程序即可实现对某器件进行实验操作。例如:假如对ADC0809进行AD转换实验,选中地址为9000H,实验时只要将实验导线从9000H地址输出端与ADC0809的CS端相联即可。执行MOV DPTR,#9000H指令即可选中ADC0809芯片,进一步操作就可完成对ADC0809实验。3 单片机应用控制系统部分单片机应用控制系统部分包括CPU,ROM,RAM,DSl2887,8279,7109,DAC0832,8255等除了CPU外其它电路均需要端口地址,这些器件端口地址我们在设计时已经设计好,对使用者只需使用即可。应用控制系统地址分配:27C256 (ROM) 0000H-7FFFH61256 (RAM) 8000H-FFFFH8255 (IO) 0800H-0803H 0800H PA IO 0801H PB IO 0802H PC IO 0803H COM 控制字寄存器: 0A00H DATA=1 OPEN LM 点矩阵显示选择: 地址 0A01H数据“0” 红色显示数据“1” 绿色显示4051选择电路:地址 0A02H数据=0-7 输入信号数据“0” 通道0数据“1” 通道1数据“2” 通道2数据“3” 通道3数据“4” 通道4数据“5” 通道5数据“6” 通道6数据“7” 通道7DAC0832数模转换电路: 地址 0B00H点阵显示缓冲器:地址 0C00H-0C07H709112位模数转换电路: 地址 0D00H-0D01H 中断 T0 读低8位字节 0D00H 读高4位字节及标记位 0D01H 8279键盘管理接口电路: 地址 0EXXH 中断 INT0DSl2887日历时钟电路: 地址 0FXXH 中断 INT11.1.4 接口插座定义电源线定义1 2 3 4 5 6 7 8 9 10CZ11 (右上角): 1、2两脚+5V 3、4两脚地线 5,6两脚+12V 7、8两脚模拟地 9、10两脚 -12V 步进电机插座引脚定义MT1、MT2 (中上部):MT1 MT2 1第一相绕组(黑) 1第二相绕组(橙) 2接Vcc(第一绕组中心抽头) 2Vcc(第二相绕组中心抽头) 3第一相绕组(黄) 3第二相绕组(蓝) 下载电缆插座EC1 (其位置在中下部) :进行数字电路设计EDA实验时使用。数据线接口插座:D0-D7数据线接口地址数据接线插座: AD0-AD7地址数据接口 仿真口插座(中左侧):1-40仿真开发目标系统接口座DC26接线座(中下部):DC26液晶显示和打印机接口液晶显示和打印机选择跳线插座(中下部) : (E2STB)、(E1 123)、(ERR A0)液晶显示和打印机选择跳线心率传感器输入接口插座(左上角):T0-T1 R0-R1(1NPUT)心率传感器输入接口压力传感器插座:T05压力传感器输入口直流电机插座:T06直流电机输入口外接温度计插座(中右部):AD590 IN OUT跳线插座:MJ 1-MJ4步进电机选择1.1.5 拔码开关定义 $W1,$W2,$W3VF转换输入极性转换(右上角) K1,K2,K3,K4,K5,K6,K7,K8逻辑电平拔码开关(右下角) CK1光控磁控选入开关(中左侧)K1放大器放大倍数选择(右上角)1.1.6 键盘结构及原理 1 原理图以8279为核心构成的键盘显示管理系统如图8所示。8279的详细内容见录。2 键盘结构图8 键盘及LED显示原理图键盘结构及键名如图9所示。图9 键盘结构及键名示意图3 键盘功能在进行JCF-59系统产品设计时,编写了大量的实用程序。这些程序可供选用。在系统处于初始状态时键入不同的数字,便可进入相应的实验工作演示状态。 例如:在初始状态下键入8数字键,在LED数码管上就可显示温度值。如果给温度传感器加温,可以看到温度会有明显的变化。这就是一个温度计的例子。如果要对温度进行控制,例如一个温控仪,控温范围在30度-50度之间,就可以通过本系统提供的仿真器对温度在30度时数字量和在50度时数字量进行比较和判断,就可以研制成一台控温仪。这样的例子在本系统中还有很多。 以下是对应的功能表第1列初始状态键入的数值 第2列程序所对应的功能 0、 PA 口PB 口循环(LED) 1、 PA 口输入PB 口输出 2、 继电器(通断实验) 3、 显示日历时钟 4、 光电控制 5、 步进电机控制 6, 数模转换控制电机 7, 输出正弦波 8, 温度传感器试验 9, 模数转换(带放大器) A、 模数转换(无放大) B, 频率电压转换 C, 串行口通信实验(1、单片机与单片机; 2、单片机与RS-232C通信) D, 打印机实验命令 E, 液晶模块显示实验(西文) F, 液晶模块显示实验(中文) F1/LS 时钟设置/LAST F2/NX 时钟设置/NEXT EX/PV 设置时钟(开/关) F1/LS (第二功能)时钟显示位右移 F2/NX (第二功能)时钟显示位左移EXE 程序执行命令键1.2 通用实验电路简介1 8253定时计数器实验电路如图10所示。图10 定时计数实验图2 微小信号放大电路脉搏信号输入电路放大部分如图11所示。图11 微小信号放大电路3 模数转换单元实验电路 本单元实验电路包括ADC0809及U2 16V8内部逻辑与外部相关的引脚连线图,如图12所示。4 MAX232通讯接口实验电路一个MAX232芯片可连接两对收发线,MAX232对UART(8251或MPU)的RXD和TXD端TTL/CMOS电平(0-5V)的转换电路,仅需+5V电源便可工作,使用十分方便。所以利用MAX232就不用使用-15-+15V高压电源(HCl488必需的), 即完成TTL电平与RS-232C图12 A/D转换实验图电平双向转换,如图13所示。图13 串行通讯接口电路5 日历时钟DSl2887实验电路如图14所示。6 多路模拟开关CD4051与7109应用实验电路CD4051是单端8路开关,它有三根二进制控制输入端A,B,C,片内有二进制译码器,改变A,B,C的数值可译出8种状态,分别从8路输入中选中一个开关接通。当禁图14 DS12887时钟实验电路止端INH为高电平时,不论A,B,C为何值,8个通路都不通。CD4051的数字或模拟信 号电平为3V-15V,模拟信号为Upp=15V,可作为多路开关或反多路开关,如图15所示。图15 CD4051与7109实验电路7 频率电压转换实验电路 V/F转换器是把电压信号转变为频率信号的器件,有良好的精度,线性和积分输入特点。此外其应用电路简单,外围元件性能要求不高,对环境适应能力强,转换速度不低于一般的双积分型A/D器件,且价格较低。V/P转换器与计算机接口有以下特点:(1) 接口简单,占用计算机硬件资源少。频 率信号可输入微机的任一根I/0口线或作为中断源及计数输入等。(2) 抗干扰性好。V/F转换本身是一个积分过程,且用V/F转换器实现A/D转换,就是频率计数过程,相当于在计数时间内对频率信号进行积分,因而有较强的抗干扰能力。另外可采用光电耦合器连接V/F转换器与计算机之间的通道,实现光电隔离。(3) 便于远距离传输。可通过调制进行无线传输或光传输。 因此,利用V/F转换器可以简化电路,降低成本,提高性价比。LM331的主要特性: a 频率范围 1-l00kHz b 低的非线性 -0.01-+0.01 c 单电源或双电源供电 d 单电源供电电压为+5V时也可保证转换精度 e 温度特性 最大-50ppm度-+50ppm度 f 低功耗 Vs=5V时,为1 5mW 电气参数:a. 电源范围 440Vb. 输入电压范围 -2.0VVsc. 最大失调电压 -14mV-+14mV d. 电源电压对增益的影响 4.5V=Vs=10V 0.1%/V10V=Vs=40V 0.06%/V e. 工作电流 8.0mALM331频率电压转换实验电路如图16所示。图16 频率电压转换实验电路 V/F转换器最大输出频率为10kHz,输入电压范围是0-10V。由于本电路VF输出频率较低,如用其作为计数脉冲则会降低精度,因此采用测周期的方法。V/F输出的频率经D触发器二分频后接至INT0,作为T0计数器的控制信号。T0计数器置定时器状态,取方式l,将TMOD.3(GATE)置1,这样就由INT0和TR0来决定计数器是否工作。这种接法只能测量小于65535个机器周期的信号周期。8 电压频率转换实验电路如图17所示。图17 电压频率转换电路9 湿度传感器实验电路如图18所示。10 气敏传感器实验电路如图19所示。 11 温度传感器实验电路 图18 湿度传感器实验电路如图20所示。13 10倍-100倍放大实验电路如图21所示。14 8255A实验电路如图22所示。15 不进电机驱动实验电路如图23所示。 图19 气敏传感器实验电路图20 温度传感器实验电路图21 10倍-100倍放大电路图22 8255实验电路图23 步进电机驱动实验电路第二章 基本实验2.1 软件编程实验一 熟悉仿真操作平台实验1 实验目的通过对“实验操作软件编程指导手册”中的改错程序的调试,学会在仿真操作平台上录入程序和调试程序的基本方法。2 实验设备JCF59+EDA系统一台、5V电源一台。3 实验内容录入“实验操作软件编程指导手册”中的改错程序,然后根据提示逐步进行程序调试,直至完全正确,装载成功,正常运行。具体包括:操作环境设置、程序录入、编译链接方法、改错、调试(单步运行、连续单步运行、断点设置)、查看寄存器,RAMROM等存储区域。4 实验步骤按指导手册提示进行。二 数据排序实验1 实验目的 熟悉8051指令系统,掌握程序设计方法。 进一步熟悉在PC机上编辑程序和调试过程。2 实验设备JCF59+EDA系统一台、5V电源一台。3 实验内容编写并调试一个排序子程序,其功能为用冒泡法讲内容RAM中的几个单字节无符号正整数,按从小到大的顺序重新排列。4 实验步骤 把8051中RAM 50H5AH中放入不等的数据,运行本实验程序后检查50H5AH中内容是否按从小到大排列。实验流程图如图24所示。图24 数据排序流程图三 数据区传送数据子程序实验1 实验目的 掌握RAM中数据的操作方法。 进一步熟悉在PC机上编辑程序和调试过程。2 实验设备JCF59+EDA系统一台、5V电源一台。3 实验内容把R2,R3源RAM区首地址内的R6,R7字节数据传送到R4,R5目的RAM区。4 实验步骤在R2,R3中输入源首址(例如0000H),R4、R5中输入日的地址(例如2000H),R6、R7中输入字节数(例如1FFFH),运行程序,检查00001FFFH中内容是否和2000H3FFFH中的内容完全一致。程序流程图如图25所示。5 思考题通过上述数据传送实验掌握基本操作方法,请读者编写数据比较,运算指令实验以便进一步熟悉单片机编程方法。 四 无符号数加法程序实验1 实验目的 理解并掌握多字节无符号数加法程序的编程方法。 进一步熟悉在PC机上编辑程序和调试过程。 图25 数据传送流程图2 实验设备JCF59+EDA系统一台、5V电源一台。3 实验内容 设定相加的字节数(不大于5)。 设定被加数和加数。 将被加数置入片内RAM以40H为起始地址单元,将加数置入片内RAM以50H为起始地址单元,多字节数按先低后高的顺序存放。规定相加的和放回到原存放被加数的单元中。 调试并执行程序。5 思考题通过上述实验的基本操作方法,请读者编写有符号数的程序,并上机运行。五 无符号数乘法程序实验1 实验目的 理解并掌握多字节无符号乘法法程序的编程方法。 进一步熟悉在PC机上编辑程序和调试过程。2 实验设备JCF59+EDA系统一台、5V电源一台。3 实验内容双字节无符号数的乘法程序。4 实验步骤同加法程序。5 思考题通过上述实验的基本操作方法,请读者编写有符号数的程序,并上机运行。2.2 硬件实验一 中断实验1 实验目的通过实验了解单片机中断原理,中断过程,中断方式(电平触发方式,边沿触发方式)的选择及编程方法。2 实验设备 JCF59+EDA系统一台、5V电源一台。3 实验原理根据单片机外中断INT0的特点(低电平有效),使单片机产生中断。每请求一次中断,程序进入中断服务程序,中断服务程序可以设置单片机的P1口控制8个发光二极管轮流点亮。实验原理如图26所示。 4 实验内容 (1)编制P1口发光二极管轮流点亮的中断服务程序。 (2)编制主程序,用低电平触发一下INT0引脚(将INT0引脚即P3.2引脚,用实验导线与地短接一下),使CPU产生中断,响应中断后便进入中断服务程序。图26 中断实验原理图5 实验步骤 (1) 将目标机部分的8032取下(在LED发光数码管的下方),换上从仿真口输出来的40脚插座。注意缺口的方向。确保仿真口的第一脚与原8032座的第一脚保持一致。 (2) INT0、INT1输出信号在仿真口左右两侧。 (3) P1.0-P1.7输出信号在目标机部分的左侧,通过导线连接到LED发光二极管输入端。 (4) 编写程序,完成实验内容。二 定时器计数器实验1 实验目的通过实验了解单片机中断原理,中断过程,中断方式(电平触发方式,边沿触发方式)的选择及编程方法。2 实验设备 JCF59+EDA系统一台、5V电源一台。3 实验原理根据单片机外中断INT0的特点(低电平有效),使单片机产生中断。每请求一次中断,程序进入中断服务程序,中断服务程序可以设置单片机的P1口控制8个发光二极管轮流点亮。实验原理如图所示。 4 实验内容 (1)编制P1口发光二极管轮流点亮的中断服务程序。 (2)编制主程序,用低电平触发一下INT0引脚(将INT0引脚即P3.2引脚,用实验导线与地短接一下),使CPU产生中断,响应中断后便进入中断服务程序。 5 实验步骤 (1) 将目标机部分的8032取下(在LED发光数码管的下方),换上从仿真口输出来的40脚插座。注意缺口的方向。确保仿真口的第一脚与原8032座的第一脚保持一致。 (2) INT0、INT1输出信号在仿真口左右两侧。 (3) P1.0-P1.7输出信号在目标机部分的左侧,通过导线连接到LED发光二极管输入端。(4) 编写程序,完成实验内容。三 P1口演示实验1 实验目的通过实验了解P1口作为输入输出方式使用时,CPU对P1口的操作方式。2 实验设备 JCF59+EDA系统一台、5V电源一台。3 实验原理在实验系统上从8051的P1口接8个LED,发光二极管状态的负逻辑代表输出口的图27 P1口演示实验原理图状态。从P3口输入不同的开关量,通过采集开关量,由P1口输出。实验原理如图27所示。 4 实验内容与步骤(1) P1口输出练习要求编制程序使P1口8个发光二极管同时灭、延时、同时亮。(2) 编制P1口演示实验程序,使8个LED每隔一个(或二个)左移循环点亮。 (3) 试编程序使P3口输入不同开关量由P1口输出。(4) 按图联线,完成上述内容。四 基本IO口扩展实验1 实验目的(1) 学习单片机系统中扩展简单IO口的方法。(2) 学习数据输入输出程序的编制方法。(3) 通过对硬件电路的分析,了解数据锁存及输出驱动过程。 2 实验设备 JCF-59*EDA系统一台、 +5V电源一台、 示波器一台。 3 实验内容利用74LS244作为输入口,读起开关状态,并将此状态,通过74LS573锁存后再驱动发光二极管显示出来。实验电路如图28所示。图28 基本IO口扩展实验图 4 实验步骤 将74LS244的输入Y0Y7与开关K1K8相连接,74LS244的片选端接16V8译码输出端OPl6,译码输入端CS4接地址C000H,74LS244的数据线与仿真调试器的数据线相连。 根据实验要求将LS244所得到的开关量信号送HC273控制,所以必须将HC273的数据线与仿真器的数据线相连接。74HC273的CLK信号由16V8的输出端OPl5提供。HC273的输出状态信号Q0Q7接状态灯L1L8。执行程序便可看到开关量信号由74LS244控制再经HC273输出。五 8255并行口A口输入、B口输出驱动发光二极管实验1 实验目的(1) 掌握单片机系统通过8255扩展井口的方法。(2) 进一理解8255的工作原理及编程方法。 2 实验设备 JCF-59+EDA系统一台、+5V电源一台。 3 实验内容(1) 利用8255扩展单片机系统的并行口。(2) 将8255的A口作为输入口,PB口作为输出口,对其进行编程。(3) 运行实验参考程序,拔动PA口上所接的开关,观察PB口的状态。实验原理图如图29所示。图29 8255并行口实验4 实验步骤 (1) PA口接电平开关K1K7的IN0-IN7,PB口接L9116发光二极管。 (2) 改变K1K8开关“0”、“1”状态,然后按“1”键,观察发光二极管的状态。 (3) 通过发光二极管L919显示二进制值,通过最后二位数码管显示K1K8的16进制编码值。 (4) 如重新设置K1K8的值,再次按“1”,显示新的值。六 单片机串行口数据传送实验 1 实验目的 (1) 了解单片机串行口通讯的一般原理和RS232通讯的工作原理。 (2) 初步了解RS_232串行接口标准及与TTL电路的连接方法。2 实验设备JCF-59+EDA系统一台、+5V电源一台。 3 实验内容 (1) 由仿真CPU串口输出的信号传送到与目标机CPU串口的输入端,目标机再将缓冲区的内容传送到仿真器的RAM中。 (2) 由仿真器发送信号至RS232C接收端,RS232C的发送端会送到仿真器的接收端。如果正确显示GOOD,否则显示ERR。 4 实验步骤 (1) 将目标机中P3.0接仿真CPU的P3.1;目标机的P3.1接仿真器的P3.0;P1.4接一个电平开关。打开仿真器软件进行编程,然后查看缓冲区中数据变化的情况。 (2) 将目标机中P3.0接RS232的RXD; 目标机的P3.1接RS232的TXD:将JA的第二脚与JB的第二脚相连,P1.4接一个电平开关来判断程序执行标记。目标机在初始化的状态下键入“C”可以判断通讯正确性。 编程提示:发送程序:首先有仿真器向目标机发送“06”应答信号,目标机收到该应答信号“06”后会送一个应答信号“00”,表明握手成功,下一步由仿真机发送数据存目标机的内存8000H开始的单元,待发送完256个字节后,再由目标机上传给仿真机256个字节数。最后通过调试软件观察数据传送的正确情况。七 八位A/D0809实验1 实验目的(1) 了解AD转换器ADC0809的工作原理.(2) 掌握AD转换器程序设计方法及与8051单片机连接的接口电路设计方法。2 实验设备: JCF-59+EDA系统一台、 +5V电源一台 3 实验内容根据电路原理图,请学生完成AD转换过程。如果提供的原理图有误请加于改正。完成AD转换实验可以在JCF-59+EDA寻找你所使用的所有资源。实验线路如图30所示。图30 A/D0809实验电路图实验注意事项: (1) 通过仿真器调试时,应将仿真模式设置成用户RAM,GAL2内部逻辑关 于已经处理好。(其中包括RD信号和WE信号都已经处理好,只须将片选信号从地址区域用导线连接即可。) (2) 做DAC0809实验时应将DAC0809的数据线与仿真器提供的总线相联。同 时将DAC0809的内部三根地址线与DAC0809数据总线的低三位数据线相接。(3) 做实验时同时应检查DACO$09的电源线是否连接。(13脚地,11脚接5V)。4 实验步骤 具体操作过程如下:(1) 将仿真器的总线与DAC0809总线相连,ADOAD7(总线控制)与仿真器的总线连接,用导线将A0与AD7连接;A1与AD6连接:A3与AD5连接;(改板后A0ADO:A1AD1,A2AD2)(2) 时钟输入将DAC0809的CLK信号由分频电路输出端T7提供,(8MHZ输出孔与RESET相连,T接地)。用示波器测T7输出端应看到波形。AD采集流程如图31所示。 图31 A/D转换流程图八 DAC0832实验1 实验目的(1) 理解DAC0832的内部结构、工作原理。(2) 学会DA转换芯片的编程方法。(3) 掌握DA芯片与单片机的接口方法。2 实验设备JCF-59+EDA系统一台、 +5V电源一台、 实波器一台。3 实验内容(1) 将DAC0832与单片机系统正确连接。(2)启动DA转换芯片并测量其输出的模拟量值。实验电路如图32所示。4 实验步骤(1) DA输出接M一1N可控制直流电机。用P1.4控制电机运转方向。(2) 从DA 0UT端子输出DA值,启动程序。(3) 用示波器观察DA输出的状态。图32 D/A转换实验九 正玄波输出实验 1 实验目的(1) 进一步了解数字量转为模拟量的方法。(2) 了解如何转换并输出波形2 实验设备JCF-59+EDA系统一台、 +5V电源一台、 实波器一台。3 实验内容:将数字信号通过DAC0832转换为正弦波。实验原理图见上图。第三章 综合实验一 微型打印机控制实验1 实验目的(1) 熟悉微型打印机JPP40在单片机中的控制过程。(2) 了解微型打印机JPP40的使用方法和打印命令。(3) 学会表格及字符串打印程序的编制方法。2 实验设备JCF-59+EDA系统一台、 +5V电源一台、 JPP40打印机一台。3 实验原理打印机在接收到打印命令时,将设计缓冲区的内容按设定格式打印出来。打印接口芯片用8255来控制,通过8255用一根位线来产生读写信号。用其它位线控制打印机忙信号状态。实验原理图如图33所示。图33 打印机实验电路图 图中JCF-59+EDA系统中8255的PB.0线与WR或作为选通信号连接STP。 4 实验内容编写可打印出如下格式的打印程序。二 液晶图形显示点阵型模块实验 1 实验目的(1) 了解8255 I0扩展原理及扩展方法。(2) 初步了解液晶图形显示模块在实验系统板上的连接与编程。2 实验设备JCF-59+EDA系统一台、 +5V电源一台、 液晶显示电路一块。3 实验内容 (1) 用图形显示方式显示模块显示汉字。 (2) 用图形显示模块汉字。实验电路如图34所示。图中利用8255并行口A口,B口驱动MGLSl0032或120032或TMl2232A等液晶模块与系统的连接。4 实验步骤本次实验通过基本监控,进行验准实验(1) DIP26接线座及其周围的三个跳线开关按照液晶显示接线方式设置好,即 K11、K12、K13等3个开关分别接到E1端,E2端,A0端。液晶显示板的输出引脚红色线与DIP26接口的上面第一脚对应。(2) 编写程序显示一串数字,如电话号码等。图34 液晶显示实验电路图三 十四位AD7109控制温度传感器综合实验1 实验目的(1) 了解AD590温度传感器的内部结构及工作原理。(2) 了解7109十四位AD转换器的内部结构及工作原理.(3) 掌握如何将温度传感器转换的电压信号变换为单片机所能识别的数字信号。2 实验设备JCF-59+EDA系统一台、 +5V电源一台、 液晶显示电路一块。 3 实验内容:(1) 将AD590输出的微安级信号放大成单片机所需的05V的信号。 (2) 通过7109将放大的信号转换为单片机所能识别的数信号。 (3)按照原理图搭接电路,编写程序,观察实验结果。 实验原理图如图35所示。图35 温度控制实验电路图四 步进电机正反转实验1 实验目的(1) 解步进电机的工作原理及其结构。(2) 解步进电机与单片机系统的连接方法。2 实验设备JCF-59+EDA系统一台、 +5V电源一台、 步进电机一个。3 步进电机工作原理步进电机是将电脉冲信号转换成角位移的一种机电式数模转换器。步进电机旋转的角位移与输入脉冲个数成正比,步进电机的转速与输入脉冲的频率成正比,步进电机的转动方向与输入脉冲对绕组加电的顺序有关。因此,步进电机旋转的角位移、转速以及方向均受输入脉冲的控制。(1) 运行方式与方向的控制循环查表法以四相六线式步进电机接双八拍运行方式为例。步进电机的运行方式是指各相绕组循环轮流通电的方式。如四相步进电机有单四拍A B C D A,双四拍AB ABC BC BCD CD CDA DA DAB AB,单双八拍AB B BC C CD D DA A AB和双八拍 AB ABC BC BCD CD CDA DA DAB等几种方式。 为了实现对各绕组按一定方式轮流加电,需要一个脉冲循环分配器。循环分配器可用硬件电路来实现(在此不作介绍)。也可用软件实现,采用软件来设计脉冲循环分配器,又有两种方法:控制字法和循环查表法。循环查表法是将各相绕缉加电顺序的控制代码制成一张表,即步进电机相序表,存放在内存区,再设置 一个地址指针。当地址指针依次加1(或减1)时,既可从表中取出加电的代码,然后输出到步进电机,产生按一定运行方式的走步操作。若改变相序表内的加电代码和地址指针的指向,则能改变步进电机的运行方式与方向。 (2) 步进电机运行速度的控制 控制步进电机速度有2两种方法: 一是用硬件改变输入脉冲的频率,通过对定时器(如8253)定时系数的设定,使其升频、降频或恒频。 二是软件延时,或调用延时子程序。 为了控制步进电机的启停,通常采用设置硬开关或软开关的方法。所谓开关方法,一般是在外部设置按键开关SW,并且约定当开关SW按下时启动运行或停止运行。为此,需在程序中将开关SW的状态读入,以便检测SW是否按下。所谓软开关方法,就是利用系统键值,定义某一个键,当该键按下时,启动或停止运行。(3) 步进电机的驱动步进电机在系统中是一种执行元件,都要带负载,因此,需功率驱动。在电子仪器和设备中,一般所需功率较小,常采用达林顿复合管作功率驱动。以A相为例,在TIPl22的基极上加电脉冲为高时,即加电代码时,达林顿管导通,使绕组A通电,加电代码0使,绕组断电。步进电机接口的硬件部分主要是提供相序代码的并行数据线(8根),以及保护电机绕组的器件,所以接口电路以8255A为主芯片,将阳口为数据口,传送加电代码,再加上锁存器74LS373作绕组保护。另外,还有功率驱动管TIPl22,以及二极管(用作保护TIP驱动管)、按键开关SW等。以上是步进电机原理,本实验是通过8032CPU来产生时序脉冲实现步进电机控制。感兴趣的学生可按照上述方法通过8255来控制步进电机实验,以便进一步提高动手能力。4 实验内容(1) 通过单片机系统控制步进电机的转动。(2) 通过实验观察步进电机的正反转时如何实现的。实验电路如图36所示。图36 步进电机实验电路图5 实验步骤:(1)、 连线:P1.0A1; P1.1A3; P1.2B1 P1.3B3 P1.4接Vcc或GND可改变电机运行方向。 A,B两绕组带动中心抽头的电机,中心抽头接MT1,MT2插座的“2”。 MJ1MJ4跳线插入23。 A,B两绕组无中心抽头的电机,MT1,MT2“空”。MJ1MJ4跳线插入12。(2) 启动实验程序,按“RESET”停止并返回主显示。五 光控磁控电风扇实验1 实验目的(1) 了解光控开关的内部结构及工作原理。(2) 了解磁控开关的内部结构及工作原理。(3) 掌握光控、磁控开关与单片机系统的连接及编程。 2 实验设备JCF-59+EDA系统一台、 +5V电源一台、 传感器、可编程芯片EPM7128LC84、PNP8550三极管一个、光控开关一个、二极管IN4007等。 3 实验内容;(1) 运行实验程序,通过光控和磁控开关来控制小风扇转动。(2) 分析原理图,总结光控、磁控开关控制过程及原理。 实验电路如图37所示。图37光控磁控电风扇实验电路图4 实验步骤(1) 系统复位状态下显示 “DAIS2001”及点矩阵显示块显示 “捷”时,通过 键盘键入 “4”,起动小风扇,第二次按 “4”关闭,再次按 “4”又打开,可反复操作。(2) 将开关CK1跳线指向“L”光控开关,控制小风扇的停与转。 (3) 将开关CK1跳线指向“M”磁控,用一磁铁接近磁控开关,控制小风扇的停与转;在磁控位置,磁铁靠进它打开,磁铁换一极性,靠进它关闭,可反复操作。 (4) 自己编程完成上述内容。六 测频(VF)实验1 实验目的(1) 了解LM331的内部结构及工作原理。(2) 了解如何将电压信号转换成为频率信号。(3) 掌握单片机系统如何连接及处理频率信号。2 实验设备JCF-59+EDA系统一台、 +5V电源一台、 传感器等其它器件。3 实验内容(1) 利用LM331将电压信号转换为频率信号。(2) 利用单片机系统处理所转换的频率信号。实验原理图如图38所示。图38 V/F转换实验电路图4 实验步骤(1) 连接FOUT接到T1(计数器输入)。(2) 将SWlSW3拔向一INPUT,待转换电压V+OUT接一VF端转换负电压,相反,将SWl-SW3拔向+INPUT待转换电压州F端,转换正电压。(3) 编写程序显示被测电压值、通过数码管显示频率值。七 键盘管理及LED显示综合实验 1 实验目的(1) 了解8279的工作原理。(2) 学会使用8279构成单片机的控制管理系统。2 实验设备JCF-59+EDA系统一台、 +5V电源一台。3 实验内容(1) 编程实现8279对小键盘的管理。(2) 编程实现LED的动态显示。(3) 编写35个子程序(可用前面的实验结果)作为小键盘功能间的内容,实现8279对单片机系统的基本管理。4 实验步骤(1) 仔细阅读附录中有关8279的相关知识内容,掌握对8279进行基本编程的方法,实现单片机系统的键盘管理。(2) 将是实验系统中的仿真器接至实验系统中的目标机,编程实现单片机系统的键盘管理和LED显示。(3) 编写功能键的子程序,实现键盘功能。附 录附录1 可编程键盘芯片8279及接口电路8279是可编程的键盘、显示接口芯片。它既具有按键处理功能,又具有自动显示功 能,在单片机系统中应用很广泛o 8279内部有键盘FIFO(先进先出)堆栈传感器,双重功能的8x8=64BRAM,键盘控制部分可控制8x 8=64个按键或控制8x 8阵列方式的传感器。该芯片能自动消除键抖动并具有双键锁定保护功能。显示RAM容量为168,即显示器最大配置可达16位LCD数码显示。本节详细介绍8279的引脚、工作方式、命令字 及接口电路设计。 1 8279引脚及功能8279是具有40个引脚的双列直插式封装的芯片,其引脚及功能如图39所示。图39 8279引脚图 下面分类介绍各引脚功能。 (1) 数据线D0D7是双向三态。数据总线,在接口电路中与系统数据总线相连,用以传送CPU与8279之间的数据和命令。 (2) 地址线 CS=0选中8279,当A0=1为命令字及状态字地址A00为片内数据地址,故8279芯片占用两个端口地址。 (3) 控制线 8279的控制线较多。CLK8279的时钟输入线。8279所需时钟频率为100kHz,该频率通常由8051单片机ALE端分频得来。ALE的频率为单片机系统主频的16,再由指令送入分频系数,从而得到100kHz的8279时钟频率。例如,f=12kMHz,ALE端输出脉冲频率为1/6f,即2MHz,再由2MHz变为100kHz,分频系数为20,把该分频系数用指令送人命令口即可。IRQ中断请求输出线,高电平有效。RD、WR读、写输入控制线SL0SL3扫描输出线,用来作为扫描键盘和显示的代码输出或直接输出线。RL0BL7回复输入线,它们是键盘或传感器矩阵的信号输入线。SHIFT来自外部键盘或传感器矩阵的输入信号,它是8279键盘数据的次高位即D6位的状态,该位状态控制键盘上下档功能。在传感器方式和选通方式中,该引脚无用。CNTL/STB控制选通输入线,高电平有效。键盘方式时,键盘数据最高位(D7)的信号输入到该引脚,以扩充键功能;选通方式时,当该引脚信号上升沿到时,把RL0-RL7的数据存入FIFO RAM中。OUTA0OUTA3通常作为显示信号的高4位输出线。OUTB0OUTB3通常作为显示信号的低4位输出线。DB显示熄灭输出线,低电平有效。当DB=0时将显示全熄灭。 2 8279的工作方式及命令字格式 (1) 8279的工作方式 8279有3种工作方式:键盘方式、显示方式和传感器方式。 键盘工作方式8279在键盘方式工作时可设置为双键互锁方式和N键巡回方式。 双键互锁方式若有两个或多个键同时按下时,不管按键先后顺序如何,只能识别最后一个被释放的键,并把该键值送人FIFORAM中。N键巡回方式 一次按下任意个键均可被识别,以按键被扫描顺序把键值存入FIFO RAM中。 显示方式8279的显示方式又可分为左端入口和右端入口方式。显示数据只要写入显示RAM则可由显示器显示出来,因此显示数据写入RAM的顺 序,决定了显示的次序。左端人口方式即显示位置从显示器最左端1位(最高位)开始,以后显示的字符逐个向右顺序排列。右端人口方式即显示位置从显示器最右端1位(最低位)开始,以后显示字符逐个向左顺序排列。 传感器方式传感器方式是把传感器的开关状态送入传感器RAM中。当CPU对传感器矩阵扫描 时,一旦发现传感器状态发生变化就发出中断请求(IRQ置“1”),中断响应后转入中断处理程序。(2)8279的命令字及其格式8279的各种工作方式都要通过对命令寄存器的设置来实现。8279共有8种命令,通 过这些命令设置工作寄存器,采选择各种工作方式。命令寄存器共8位,其格式如下:8279的一条命令由两大部分组成,一部分为命令特征,代表某一类命令,由命令寄存器高3位D7DS决定。 D7D5这3位的状态可组合出8种形式,分别对应8种命令,故称为命令特征位。另一部分为命令的具体内容,由D4DO决定。每种特征所代表的命令如表1所列。下面详细说明各种命令中,D4D0各位的设置方法,以便确定各种命令字。 键盘显示命令特征位D7D5=000D4、D3两位用来设定4种显示方式,D2D0用以设定8种键盘显示扫描方式,分别由表2和表3所列。由于显示是硬件扫描显示,因此显示方式中规定了扫描显示的位数(8位、16位)和第1个显示的字符位置(最左端或最右端)。表3中给出了编码扫描和译码扫描两种方式。编码扫描指扫描代码直接由扫描线SL0SL3输出,每次只有1位是低电平(4选1)。译码扫描扫描代码经SL0SL3外接译码器输出。由于键盘最大88=64个键,由SL0SL2接3-8译码器,译码器的8位输出作为键盘扫描输出线(列线),RLORL7为输入线(行线)。8279最多驱动16位显示器,故可由SL0SL3接一个416译码器,译码器,16位输出为显示扫描输出线(16选1),决定第几位显示。显示字段码由OUTA0OUTA3和OUTB0OUTB3输出。表1,表2,表3三个表相互组合可得到各种键盘、显示命令。例1 若希望设置8279为键盘扫描方式,键盘为译码扫描、N键轮回;显示8个字符右端入口方式,确定其命令字。根据题目要求可进行分析。 键盘显示命令特征位:D7D5=000(表1);8个字符右端入口显示:D4D3=10(表2);键盘译码扫描,N键轮回:D2D1D0=011(表3)。所以8位命令寄存器状态D7DO=00010011B,即该命令字13H送入命令寄存器口地址,则可达到题目要求。例2 若已知命令字为08H,判断8279工作方式。因为命令字为08H即D7DO=00001000B,显然D7D5=000该条命令为键盘显示 命令,D4D3=01为16字符左端入口显示方式,D2DO=000键盘为编码扫描、双键锁定方式。 时钟编程命令 一般单片机的ALE端接8279的CLK端,但ALE端输出的脉冲是主机频率的16,而 8279工作只需100kHz的钟脉冲,利用分频系数可把CLK端输入脉冲再分频以达到产生 100kHz脉冲之目的。分频系数是由时钟编程命令输入。由表1可见,时钟编程命令特征位D7D5001。D4D0用来设定分频系数。例 设单片机主频儿12MHz,求分频系数。 分析:fosc12MHz,ALECLK16fosc2MHz 设:分频系数为N,则 100103N=2106Hz N20D,把N放人D4DO中再加上命令特征位,则控制字为: D7DO=00110100B34H把34H送入命令口地址,8279则可得到100kHz的时钟频率。由于用命令字的低5位设定分频系数,则其分频系数范围为25,即031之间。 读FIFO传感器RAM命令 特征位D7D5010。D2D0为8279中FIFO及传感器RAM的首地址。D3无用。D4控制RAM地址自动加1位:D4=1时CPU读完一个数据,RAM地址自动加重准备读下一个单元数据;D4=0时,CPU读完一个数据后,地址不变。例 欲编程使单片机连续读,8279内FIFO传感器RAM中000111单元的数据,设置读命令字。 分析:因为要连续读数,地址又连续,所以最好设置为自动加1方式,即D4=1,RAM内首地址000即D2D0=000,再加上特征位,所以该命令控制字为:D7D0O1010000B50H(无用位D3设为0)。送入50H控制字后,在执行读命令时,先从FIFO传感器RAM的000单元读数,读完一个数,地址自动加1,又从001单元读数,依次类推,直到读完所需数据。 读显示RAM命令 此命令用来读显示器RAM,其格式如下: 特征位D7D50110 。D4=1,RAM地址自动加1,D40不加1。D3D0为显示RAM中的地址。 例 欲读显示RAM中1000单元地址,求命令字。分析:因只读一个数,地址不需自动加1即设置D4=0。特征位为011,地址为1000, 所以其控制命令字为D7DO=Oll01000B68H。 写显示RAM命令 特征位D7D51000。 D4是地址自动加1控制,D41地址自动加重,D40地址不加1。D3D0是欲写入的RAM地址,若连续写入,则表示RAM首地址。命令格式同读显示RAM,不再重复举例。 显示器禁止写入熄灭命令 其命令格式如下: 利用该命令可以控制A、B两组显示器,哪组继续显示,哪组被熄灭。例 假设A、B两组灯均已被点亮,现在希望A组灯继续亮,B组灯熄灭,确定其命令字。分析:根据命令格式,A组灯继续亮应禁止A组RAM再写入其它数据,故D31;B组显示熄灭DO1,除特征位外其余位设为“0”。故其命令字为:D7DO1010100lBA9H。 清除命令此命令用以清除显示RAM和FIFO中的内容。 特征位D7D51100。 DO为总清除特征位。DO1把显示RAM和FIFO全可清除。 D11清除FIFO状态,使中断输出线复位,传感器RAM的读出地址清0。 D4D2设定清除显示RAM的方式,如表4所列。例 将显示RAM全部清0,其命令字为: D7DO11010001BD1H 结束中断出错方式设置命令 特征位D7D5111。 D41时(其D3D0位任意)有两种不同作用。 1) 在传感器方式时,用此命令结束传感器RAM的中断请求。因为在传感器工作方式时,每当传感器状态发生变化,扫描电路自动将传感器状态写入传感器RAM,同时发出中断申请,即将IRQ置高电平,并禁止再写入传感器RAM中断响应后,从传感器RAM读走数据进行中断处理,但中断标志IRQ的撤除分两种情况。若读RAM地址自动加1标志位为“0”,中断响应后IRQ自动变低,撤消中断申请;若读RAM地址自动加1标志位为“1”,中断响应后IRQ不能自动变低,必须通过结束中断命令来撤消中断请求。这是该条命令的作用之一。 2) 在设定为键盘扫描N键轮回方式时,作为特定错误方式设置命令 在键盘扫描N键轮回工作方式时,又给8279写入结束中断错误方式命令,则8279将以一种特定的错误方式工作,即在8279消颤周期内,如果发现多个按键同时按下,则将FIFO状态字中错误特征位置“1”,并发出中断请求阻止写入FIFORAM。根据上述8种命令可以确定8279的工作方式。在8279初始化时,把各种命令都送入命令地址口,虽然共用一个命令地址口,但8279会根据其特征位自动把命令存入相应的命令寄存器,执行程序时,8279能自动寻址相应的命令寄存器。 (3) 8279的状态字及格式 状态字显示出8279的工作状态。状态字和8种命令字共用一个地址口。当AO1 时,从8279命令状态口地址读出的是状态字。状态字格式如下:显然,状态字主要用于键盘和选通工作方式,以指示FIFORAM中的字符数及有无错 误发生。(4)8279输入输出格式对8279输入输出数据不仅要先确定数据地址口,而且数据存放也要按一定格式,其 格式在键盘和传感器方式有所不同。 键盘扫描方式数据输入格式 键盘的行号、列号及控制键格式如下: 传感器方式及选通方式数据输入格式此种方式8位输入数据为RL0RL7的状态。格式如下:(5) 8279内部译码和外部译码方式8279的内、外译码由键盘显示命令字的最低位D0选择决定。DO1选择内部译码,也称为编码方式,该方式SL0SL3每时刻只能有1位为低电平。8279只能接4位显示器和48矩阵式键盘。D0=0选择外部译码方式,SL0SL3为计数分频式波形输出,显示方式可外接4-16译码器驱动16位显示器。键盘方式按3-8译码器,构成88矩阵式键盘。3 8279键盘显示器接口电路 图40所示是8279键盘显示的一个实用电路。图40 8279键盘显示实用电路下面简述各部分相互接口的工作原理。 (1) 8279与单片机接口 数据线DOD7接于P0.0P0.7。 控制线时钟CLK接于ALE。 读写RD、WR与8031读、写线相连。 中断申请端IRQ经反相器接于INT1。 地址线由片选CS端,A0端决定。CS接P2.7,A0接P2.0。 当CS0,A01(其它位任意)时,该地址为命令字或状态字地址口; 当CS0,A00时该地址为数据地址口。 8279共占用以上两个地址口。 图40电路中,设地址线无效位为“0”,则命令字或状态字口地址为0100H,数据口地址为0000H;反之若无用位设为“1”,则命令或状态字口地址为7FFFH,数据口地址为7EFFH。编程时注意两个地址口的确定。 (2) 8279与显示器接口图40中只用了8位共阳极显示器,故外部接了一个3-8译码器74LSl38。74LSl38的输入端接8279的SL0SL2,译码输出接反相驱动器8708的输入端,8708的输出作为8个显示器的位选线,哪一位为高电平,哪个显示器显示。8279的输出端OUTA0OUTA3和OUTB0OUTB3经另一个8708反相驱动器接显示器的字段码输入端a、b、c、d、e、f、g、dp,由此输入字段码,在选中位上显示相应的字符。(3) 8279与键盘接口 图40中把SLOSL2经74LS138译码输出后的Y0、Y1端作为键盘输出线(列线), RL0RL7为行线输入,故驱动28阵列的键盘。(4) 8279编程方法8279的基本程序有三块:一块是8279初始化程序;一块是显示程序;另一块为键盘 处理程序。初始化程序主要是送入各种命令字,一般放在主程序中,显示程序编为显示子程序,键盘处理程序常放在中断服务程序中。 8279初始化程序举例8279初始化主要是给8279设定键盘显示方式,送分频系数,消除命令等,初始化程序框图如图41所示。初始化程序如下: 显示子程序举例8279显示子程序框图如图42所示。图41 初始化流程图 图42 显示子程序流程图显示子程序如下: 键盘处理程序举例键盘处理程序一般放在中断服务程序中,其框图如图43所示。图43 键盘处理子程序流程图程序如下:附录2 实验系统参考程序 ORG0000H; 程序参数定义,根据用户选择的LCM型号修改本程序适用于JCF-59-EDA系统; PARA1 EQU 32H ; 模块参数 MGLS10032; PARA1 EQU 3CH ; 模块参数 MGLS12032 PARA1 EQU 3DH ; 模块参数 MGLS12232; 程序变量定义,根据用户平台提供的内部资源修改 COM EQU 50H ; 指令码寄存器 DAT1 EQU 51H ; 数据寄存器 O_XL EQU 52H ; 列地址(077H) O_YL EQU 53H ; 在显示字符时定义为页地址 D1,D0: 页地址 ; 并且 D7: 字符体 D7=0为6x8点阵 ; D7=1为8x8点阵 ; 在绘点显示时定义为行地址(0-31) ; 其中 D7:为点标志 1为置点 ; 0为清点 CODE1 EQU 55H ; 字符代码 COUNT1 EQU 56H ; 计数器1;=LJMPMAINORG0003HLJMPINTORG000BHLJMPADCORG0013HLJMPCLKINT;ADDR.;27C256: 0000H-7FFFH;61256: 8000H-FFFFH;8255: 0800H-0803H; 0800H PA I/O; 0801H PB I/O; 0802H PC I/O; 0803H COM/;控制字寄存器:; 0A00HDATA=1 OPEN L/M;点阵显示选择:; 地址=0A01H数据 0=红色显示;数据 1=绿色显示;4051: 地址=0A02H; 数据=0-7输入信号; 数据 0通道 0; 数据 1通道 1; 数据 2通道 2; 数据 3通道 3; 数据 4通道 4; 数据 5通道 5; 数据 6通道 6; 数据 7通道 7;DAC0809:; 地址=0B00H;点阵显示缓冲器地址:; 0C00H-0C07H;7109: 地址=0D00H-0D01H; 中段:T0; 0D00H 读低8位字接; OD01H 读高4位字接及标记位;8279: 地址=0EXXH; 中段 INT0;DS12887:地址=0FXXH; 中段 INT1;键盘功能:数值功能;0PA口 PB口循环(LED);1PA口输入 PB口输出;2继电器(通/断实验);3显示日历时钟;4光电/控制;5步进电机控制;6数 / 模转换控制电机;7输出正弦波;8温度传感器试验;9模 / 数转换(带放大器);A模 / 数转换(无放大);B频率 / 电压转换;C;D;ELCD点阵西文显示;FLCD点阵中文显示;F1/LS;F2/NX;MON;EX/PV设置时钟(开/关);F1/LS(第二功能)时钟显示位右移;F2/NX(第二功能)时钟显示位左移;ORG0100HMAIN:MOVSP,#60HLCALLCLOSE_FANMOV17H,#50LCALLDELYLCALLGENMOVDPTR,#WORD_JIELCALLSUB_LED;DISPLAY ;= 8279 =7/27=D8729:MOVDPTR,#0EFFHMOVA,#0D1HMOVXDPTR,ALP:MOVXA,DPTRJBACC.7,LPMOVA,#0MOVXDPTR,AMOVA,#34H ;CLK=20:1MOVXDPTR,AMOVDPTR,#DICETB ;DISPLAYDISE2001LCALLDICELCALLABO ;SET PA=PB=OUT PC=INMOV23H,#80H ;KEY FLAG BYTEMOVIE,#80HMOV20H,#0 ;FLAG BITESETBIT1POINT:SETBEX0SETBEALCALLRDKEYJB01H,SET_CLKMOVDPTR,#KPRGMOVB,#3MOVA,19H ;KEY BUFFERMULABJMPA+DPTR;INT:MOVA,#40HMOVDPTR,#0EFFHMOVXDPTR,AMOVDPTR,#0EFEHMOVXA,DPTRMOV23H,AMOV19H,ARETI;SET_CLK:LJMPCLOCK;RDKEY:CLREX0MOVA,23HJNBACC.7,K1SETBEX0SJMPRDKEY;K1:CLREACLRP1.7MOV17H,#20LCALLDELYSETBP1.7MOV23H,#80HRET;=KPRG:LJMPKPRG0LJMPKPRG1LJMPKPRG2LJMPKPRG3LJMPKPRG4LJMPKPRG5LJMPKPRG6LJMPKPRG7LJMPKPRG8LJMPKPRG9LJMPKPRGALJMPKPRGBLJMPKPRGCLJMPKPRGDLJMPKPRGELJMPKPRGFLJMPKPRGSLJMPKPRGYLJMPKPRGNLJMPKPRGR;=7/27=RED:MOVDPTR,#0A01HCLRAMOVXDPTR,ARET;=7/27=GEN:MOVDPTR,#0A01HMOVA,#1MOVXDPTR,ARET;8255 displat 16bit led loop =7/27=KPRG0:LCALLREDMOVDPTR,#WORD_0LCALLSUB_LEDLCALLABOMOV0EH,#80HMOV0FH,#01HABOUT:MOVDPTR,#0800HMOVA,0EHMOVXDPTR,ARRAMOV0EH,AMOVA,0FHINCDPTRMOVXDPTR,ARLAMOV0FH,ADECDPLMOV17H,#30LCALLDELYSJMPABOUT;8255_PA=IN PB=OUT =7/27=KPRG1:LCALLGENMOVDPTR,#WORD_1LCALLSUB_LED ;display 1LCALLAIMOVDPTR,#0800HMOVXA,DPTR ;0800HMOVB,AINCDPTRMOVXDPTR,A ;0801HMOVR0,#36HSWAPAANLA,#0FHMOVR0,AINCR0MOVA,BANLA,#0FHMOVR0,AMOVR0,#30HMOVR2,#6CLRAPALP:MOVR0,A ;30-35H=0INCR0DJNZR2,PALPMOVR1,#36HMOVR2,#2MOV18H,#30HLCALLCONVLJMPPOINT;RELAY TEST =KPRG2:LCALLGENMOVDPTR,#WORD_2LCALLSUB_LED ;DISPLAY2CPLP1.6 ;OPEN/CLOSE RELAYLJMPPOINT; OPEN CLOCK =KPRG3:LCALLREDMOVDPTR,#WORD_3LCALLSUB_LED ;display3MOV22H,#0MOVDPTR,#0F0BHMOVA,#5AHMOVXDPTR,ACLR02H;?MOVIE,#80HSETBEX1LJMPPOINT;TEST L/M OPEN FAN =KPRG4:LCALLGENMOVDPTR,#WORD_4LCALLSUB_LED ;display4MOVDPTR,#0A00HCPL02HJNB02H,PRG41MOVA,#1PRG42:MOVXDPTR,ALJMPPOINTPRG41:CLRASJMPPRG42;PM35 MOTOR TEST =KPRG5:LCALLREDMOVDPTR,#WORD_5LCALLSUB_LED ;display5MOV90H,#0FFHMOV1CH,#0F6HMOV1DH,#0FAHMOV1EH,#0F9HMOV1FH,#0F5HMOV1BH,#0TIMING:INC1BHMOVA,1BHDECARLAJBP1.4,TIM8MOVDPTR,#TIM1JMPA+DPTRTIM1:SJMPTIM2SJMPTIM3SJMPTIM4MOV1BH,#0SJMPTIM5;TIM8:MOVDPTR,#TIM9JMPA+DPTRTIM9:SJMPTIM3SJMPTIM2SJMPTIM5MOV1BH,#0SJMPTIM4;TIM2:MOVA,1CHMOVP1,ATIM6:MOVR2,#0FFHMOVR3,#20TIM7:DJNZR2,$MOVR2,#0FFHDJNZR3,TIM7SJMPTIMING;TIM3:MOVA,1DHMOVP1,ASJMPTIM6;TIM4:MOVA,1EHMOVP1,ASJMPTIM6;TIM5:MOVA,1FHMOVP1,ASJMPTIM6 ;4/11LJMPTIMING;DAC OUT DC MOTOR =KPRG6:LCALLREDMOVDPTR,#WORD_6LCALLSUB_LED ;display6JNBP1.4,DACNMOVDPTR,#0B00HMOVA,#40HMOVXDPTR,ALJMPPOINT;DACN:MOVDPTR,#0B00HMOVA,#0C0HMOVXDPTR,ALJMPPOINT;DAC0809 SIN OUT =KPRG7:LCALLREDMOVDPTR,#WORD_7LCALLSUB_LED ;display7MOVR5,#0 SIN:MOVA,R5MOVDPTR,#SINTABMOVCA,A+DPTRMOVDPTR,#0B00HMOVXDPTR,AINCR5SJMPSIN;AD590 =KPRG8:LCALLREDMOVDPTR,#0A02HCLRAMOVXDPTR,A ;open 4051 in0MOVDPTR,#WORD_8LCALLSUB_LED ;display8MOVA,#0FFHMOVTL0,AMOVTH0,A ;7109 intMOVTMOD,#05H ;OPEN T0SETB06HCLR07HSETBEASETBET0SETBTR0SJMP$;7109 A/D OUT =KPRG9:MOVDPTR,#0A02H ;AMP inMOVA,#1MOVXDPTR,A ;open 4051 in1LCALLREDMOVDPTR,#WORD_9LCALLSUB_LED ;display9MOVA,#0FFHMOVTL0,AMOVTH0,AMOVTMOD,#05HSETBEACLR07HCLR06HSETBET0SETBTR0SJMP$;=?KPRGA:MOVDPTR,#WORD_ALCALLSUB_LEDMOVDPTR,#0A02H ;displayAMOVA,#2MOVXDPTR,A ;open 4051 in2LCALLREDMOVA,#0FFHMOVTL0,AMOVTH0,AMOVTMOD,#05HSETBEACLR07HCLR06HSETBET0SETBTR0SJMP$;COUNT INPUT =KPRGB:LCALLREDMOVDPTR,#WORD_BLCALLSUB_LED ;displayBMOVTMOD,#51HMOVTL1,#0MOVTH1,#0MOVTL0,#0B0HMOVTH0,#30HMOV1AH,#10SETB07HMOVIE,#82HSETBTR0SETBTR1SJMP$;=?KPRGC:LCALLGENMOVDPTR,#WORD_CLCALLSUB_LED ;displayCLJMPPOINT;KPRGD:LCALLGENMOVDPTR,#WORD_DLCALLSUB_LED ;displayDLJMPPOINT;西文显示程序=KPRGE:LCALLGENMOVDPTR,#WORD_ELCALLSUB_LED ;displayELCALLBEGINLCALLCLEAR MOVR7,#0MOVR6,#4DISP1: MOV A,R7MOV DPTR,#TAB2MOVC A,A+DPTRMOV CODE1,AMOV O_YL,#81H ; 8X8点阵字体, 第4页MOV O_XL,R6LCALL CW_PRINC R7MOV A,#06HADD A,R6MOV R6,ACJNE R7,#07H,DISP1MOVR7,#0MOVR6,#54DISP2: MOV A,R7MOV DPTR,#TAB3MOVC A,A+DPTRMOV CODE1,AMOV O_YL,#81H ; 8X8点阵字体, 第4页MOV O_XL,R6LCALL CW_PRINC R7MOV A,#06HADD A,R6MOV R6,ACJNE R7,#04H,DISP2MOV O_YL,#03H ; 6x8点阵字体, 第4页MOV O_XL,#04H ; 起始列为第4列MOV CODE1,#34H ; 字符代码TLCALL CW_PRMOV O_YL,#03HMOV O_XL,#0CHMOV CODE1,#45H ;eLCALL CW_PRMOV O_YL,#03HMOV O_XL,#14HMOV CODE1,#4CH ;lLCALL CW_PRMOV O_YL,#03HMOV O_XL,#1CHMOV CODE1,#1AH ;:LCALL CW_PRMOV R7,#00HMOV R6,#28HLOOP: MOV A,R7MOV DPTR,#TAB1 ;DIS66163252MOVC A,A+DPTRMOV CODE1,AMOV O_YL,#83H ; 8X8点阵字体, 第4页MOV O_XL,R6LCALL CW_PRINC R7MOV A,#06HADD A,R6MOV R6,ACJNE R7,#08H,LOOPLJMP POINTTAB1: DB 16H,16H,11H,16H,13H,12H,15H,12HTAB2: DB 22H,45H,49H,4AH,49H,4EH,47HTAB3: DB 24H,41H,49H,53H ;中文显示程序=KPRGF:LCALLGENMOVDPTR,#WORD_FLCALLSUB_LED ;displayFLCALLBEGINLCALLCLEARMOV O_YL,#00HMOV O_XL,#10HMOV CODE1,#00HLCALL CCW_PRMOV O_YL,#00HMOV O_XL,#20HMOV CODE1,#01HLCALL CCW_PRMOV O_YL,#00HMOV O_XL,#30HMOV CODE1,#02HLCALL CCW_PRMOV O_YL,#00HMOV O_XL,#40HMOV CODE1,#03HLCALL CCW_PRLJMP POINT;=set clock =KPRGS:LCALLGENMOVDPTR,#WORD_10LCALLSUB_LED ;display10SETB01HLCALLGET_YUMOV0EH,#50HMOV0DH,#0LJMPPOINT;KPRGY:MOVDPTR,#WORD_11LCALLSUB_LED ;display11LCALLGENLJMPPOINT;KPRGN:MOVDPTR,#WORD_12LCALLSUB_LED ;display12LCALLGENLJMPPOINT;KPRGR:MOVDPTR,#WORD_13LCALLSUB_LED ;display13LCALLGEN LJMPPOINT;=GET_YU:MOVDPTR,#0F09HMOVR2,#3MOVR1,#40HYULP:LCALLDBTSBDECDPLDJNZR2,YULPMOVXA,DPTRANLA,#0FHCJNEA,#7,YU01MOVA,#13HYU01:MOVR1,ACLRAINCR1MOVR1,AMOVR0,#50HMOVR1,#40HMOVR2,#8YU02:MOVA,R1MOVR0,AINCR1INCR0DJNZR2,YU02MOVR1,#50HMOVR2,#7LCALLDISPLCALLDIS1RET;=GET_HMS:MOVDPTR,#0F04HMOVR1,#40HMOVR2,#3HMS_LP:LCALLDBTSBDECDPLDECDPLDJNZR2,HMS_LPCLRAMOVR1,AINCR1MOVR1,AMOVR0,#57HMOVR1,#40HMOVR2,#6HLOP:MOVA,R1MOVR0,AINCR0INCR1DJNZR2,HLOPMOVR1,#57HMOVR2,#6LCALLDISPCLRAINCR0MOVR0,ALCALLDIS1RET;=CLOCK:MOVA,19HCJNEA,#10H,N10LCALLCLK_CNVLCALLDS12887CLR01HCLR00HLJMPKPRG3N10:CJNEA,#11H,N11INC0EHINC0DHMOVA,0DHCJNEA,#07H,Y11SETB00HLCALLGET_HMSMOVR1,#57HMOVR2,#6LCALLDISPINCR0CLRAMOVR0,ALCALLDIS1Y11:LJMPPOINT;N11:CJNEA,#12H,N12DEC0EHDEC0DH;MOVA,0DH;CJNEA,#07H,Y12;SETB00HY12:LJMPPOINT;N12:CJNEA,#13H,N13LJMPPOINT;N13:MOVA,0EHMOVR0,AMOVA,19HMOVR0,AJB00H,GET_DAYMOVR1,#50HMOVR2,#7LCALLDISPLCALLDIS1LJMPPOINT;GET_DAY:MOVR1,#57HMOVR2,#6LCALLDISPINCR0CLRAMOVR0,ALCALLDIS1LJMPPOINT;DISP:MOVR0,#40H;MOVR2,#7CONV_SET:MOVA,R1MOVDPTR,#TABMOVCA,A+DPTRMOVR0,AINCR1INCR0DJNZR2,CONV_SETMOVA,#0MOVR0,A;INCR0;MOVR0,AMOV18H,#40HRET;CLK_CNV:MOVR0,#5CHMOVR1,#36HMOVR2,#3CLKLP:MOVA,R0ANLA,#0FHMOVB,ADECR0MOVA,R0SWAPAANLA,#0F0HORLA,BMOVR1,AINCR1DECR0DJNZR2,CLKLPMOVA,R0MOVR1,AINCR1DECR0MOVR2,#3CKLP:MOVA,R0ANLA,#0FHMOVB,ADECR0MOVA,R0SWAPAANLA,#0F0HORLA,BMOVR1,AINCR1DECR0DJNZR2,CKLPRET;= get y,d =YU:MOVDPTR,#0F08HMOVR1,#40HLCALLDBTSBMOVA,#10HMOVR1,AINCR1DECDPLLCALLDBTSBMOVA,#10HMOVR1,AINCR1DECDPLMOVXA,DPTRANLA,#0FHCJNEA,#7,YU1MOVA,#13HYU1:MOVR1,AINCR1MOVA,#10HMOVR1,AMOVR1,#40HLCALLDISRET;DBTSB:MOVXA,DPTRMOVB,ASWAPAANLA,#0FHMOVR1,AINCR1MOVA,BANLA,#0FHMOVR1,AINCR1RET;= get h,m,s =HMS:MOVDPTR,#0F04HMOVR1,#38HLCALLDBTSBMOVA,#11HMOVR1,AINCR1DECDPLDECDPLLCALLDBTSBMOVA,#11HMOVR1,AINCR1DECDPLDECDPLLCALLDBTSBMOVR1,#38HLCALLDISRET;= clock_int =(INT1)=CLKINT:CLREX1PUSHACCMOVDPTR,#0F0CHMOVXA,DPTRJBACC.6,CLKXJNB02H,DISHMOVA,#0LCALLCLK1LCALLCLICLCALLYUCLKX:POPACCSETBEX1RETI;CLK1:MOVDPTR,#0A01HMOVXDPTR,ARET;CLIC:INC22HMOVA,22HCJNEA,#6,CLIXMOV22H,#0CPL02HCLIX:RET;DISH:MOVA,#0LCALLCLK1LCALLCLICLCALLHMSPOPACCSETBEX1RETI;= set display =DICE:MOVR2,#8MOVR1,#30HMOV18H,#30HDILP:CLRAMOVCA,A+DPTRMOVR1,AINCR1INCDPTRDJNZR2,DILPSJMPDIS1;= 8279 DISPLAY =DIS:MOVA,R1MOV18H,AMOVR2,#8CONV:MOVA,R1MOVDPTR,#TABMOVCA,A+DPTRMOVR1,AINCR1DJNZR2,CONVDIS1:MOVA,#90HMOVDPTR,#0EFFHMOVXDPTR,AMOVA,18HMOVR1,AMOVR2,#8MOVDPTR,#0EFEHTT1:MOVA,R1MOVXDPTR,AINCR1DJNZR2,TT1RET;= T0_INT =ADC:CLRET0CLRTR0JB07H,VFMOVA,#0FFHMOVTL0,AMOVTH0,AMOVDPTR,#0D02HMOVXA,DPTRMOVR3,ADECDPLMOVXA,DPTRMOVR2,AJBACC.5,BADJNBACC.4,ADC1SETB05HSJMPADC2ADC1:CLR05HADC2:MOVA,R2ANLA,#0FHMOVR2,ALCALLIBTDLCALLIDBTBLCALLCADEBAINT:MOV18H,#30HLCALLDIS1MOV17H,#20HLCALLDELYSETBET0SETBTR0RETI;BAD:MOVA,#06HMOV30H,AMOVR0,#31HMOVR2,#7CLRABADLP:MOVR0,AINCR0DJNZR2,BADLPSJMPBAINT;=VF:MOVTL0,#0B0H ;B0HMOVTH0,#30H ;3BHDJNZ1AH,VFXMOV1AH,#10CLRTR1MOVR3,TL1MOVR2,TH1CLRAMOVTL1,AMOVTH1,ALCALLIBTDLCALLIDBTBMOVR0,#30HMOVR2,#6VFLP:MOVA,R0JNZVFL1INCR0DJNZR2,VFLPVFL1:MOVA,R0MOVDPTR,#TABMOVCA,A+DPTRMOVR0,AINCR0DJNZR2,VFL1CLRAMOV36H,AMOV37H,AMOV18H,#30HLCALLDIS1MOV17H,#20HLCALLDELYSETBTR1VFX:SETBET0SETBTR0RETI;=IDBTB:MOVR0,#30HMOVA,R4SWAPAANLA,#0FHMOVR0,AINCR0MOVA,R4ANLA,#0FHMOVR0,AINCR0MOVA,R5SWAPAANLA,#0FHMOVR0,AINCR0MOVA,R5ANLA,#0FHMOVR0,AINCR0MOVA,R6SWAPAANLA,#0FHMOVR0,AINCR0MOVA,R6ANLA,#0FHMOVR0,ARET;=CADE:MOVR0,#30HMOVR2,#6CALP:MOVA,R0JNZCAL1INCR0DJNZR2,CALPCAL1:JB06H,CAL4JB05H,CAL2DECR0MOVA,#40HMOVR0,AINCR0CAL2:MOVA,R0MOVDPTR,#TABMOVCA,A+DPTRMOVR0,AINCR0DJNZR2,CAL2MOVA,34HORLA,#80HMOV34H,AJNB06H,CAL3MOVA,#39HMOV36H,AMOV37H,#0RET;CAL3:CLRAMOV36H,AMOV37H,ARET;CAL4:JB05H,CAL5;JNBDECR0MOVA,#40HMOVR0,AINCR0CAL5:LJMPCAL2;=IBTD:CLRA;0 to R4,R5,R6MOVR4,AMOVR5,AMOVR6,AMOVR7,#16IBTL2:CLRCMOVA,R3 ;(LOW)byteRLCA MOVR3,AMOVA,R2 ;(HIGH)byteRLCAMOVR2,AMOVA,R6 ;(R4,R5,R6)*2+CY TO R4,R5,R6ADDCA,R6DAAMOVR6,A ;R6=BCD (LOW) byteMOVA,R5ADDCA,R5DAAMOVR5,A ;R5=BCD MOVA,R4ADDCA,R4DAAMOVR4,A ;R4=BCD (HIGH) BYTEDJNZR7,IBTL2RET;= DELY =DELY:CLRRS0 ;KEY DELAYSETBRS1 ;BANK RET3:PUSH17H ;RET2:PUSH17HRET1:PUSH17HRET0:DJNZR7,RET0POP17HDJNZR7,RET1POP17HDJNZR7,RET2POP17HDJNZR7,RET3CLRRS1RET;=(8)BIT BIN/SBCD=OKBIB3:MOVB,#100 ;3 BIT SBCDDIVABMOVR0,AINCR0BIB2:MOVA,#10 ;2 BIT SBCDXCHA,BDIVABMOVR0,AINCR0MOVA,BMOVR0,ARET;=4/11=SUB_LED:MOVR0,#50HMOVR2,#8GETLP:CLRAMOVCA,A+DPTRMOVR0,AINCR0INCDPTRDJNZR2,GETLPSUB_T1:MOVDPTR,#0C00HMOVR0,#50HMOVR2,#8SETLP:MOVA,R0MOVXDPTR,AINCDPTRINCR0DJNZR2,SETLPRET;=4/11=OPEN_FAN:MOVDPTR,#0A00HMOVA,#1MOVXDPTR,ARET;CLOSE_FAN:MOVDPTR,#0A00HCLRAMOVXDPTR,ARET;DS12887 =DS12887:MOVDPTR,#0F0BH ;BMOVA,#82H ;SET=1 24/12=1MOVXDPTR,AMOVDPTR,#0F00HMOVA,36HMOVXDPTR,A ;S INCDPTRMOVA,#30HMOVXDPTR,A ;S AL 01hINCDPTRMOVA,37HMOVXDPTR,A ;M 02hINCDPTR;CLRA;MOVXDPTR,A ;M AL 03hINCDPTRMOVA,38HMOVXDPTR,A ;H 04hINCDPTR;MOVA,#0C0H;MOVXDPTR,A ;H AL 05hINCDPTRMOVA,39HMOVXDPTR,A ;06hINCDPTRMOVA,3AHMOVXDPTR,A ;07hINCDPTRMOVA,3BH ;08hMOVXDPTR,AINCDPTRMOVA,3CHMOVXDPTR,A ;09hINCDPTRMOVA,#2FH ;0ah A BYTEMOVXDPTR,AINCDPTRMOVA,#5AH ;0bh=3ahMOVXDPTR,ANOPRET;=;*; 82C55驱动子程序由6个子程序组成:; 1. 写指令代码子程序(左屏E1)PR1; 2. 写显示数据子程序(左屏E1)PR2; 3. 读显示数据子程序(左屏E1)PR3; 4. 写指令代码子程序(右屏E2)PR4; 5. 写显示数据子程序(右屏E2)PR5; 6. 读显示数据子程序(右屏E2)PR6;-; 占用内部寄存器资源:A,COM,DAT1; 占用系统接口资源:RS,RW,E1,E2; 程序输入变量:COM 或 DAT1BUSY1:LCALLAIMOVDPTR,#0801H;PBMOVA,#8MOVXDPTR,ABYLP1:MOVA,#9MOVXDPTR,ADECDPL;PAMOVXA,DPTRPUSHACCINCDPTR;PBMOVA,#8MOVXDPTR,APOPACCJBACC.7,BYLP1CLRAMOVXDPTR,ARET;BUSY2:LCALLAIMOVDPTR,#0801H ;PBMOVA,#8MOVXDPTR,ABYLP2:MOVA,#10MOVXDPTR,ADECDPL ;PAMOVXA,DPTRPUSHACCINCDPTR ;PBMOVA,#8MOVXDPTR,APOPACCJBACC.7,BYLP2CLRAMOVXDPTR,ARET;AI:MOVDPTR,#0803H ;PA-IN,PB=PC=OUTMOVA,#99HMOVXDPTR,ARET;ABO:MOVDPTR,#0803H ;PA=PB=PC=OUTMOVA,#89HMOVXDPTR,ARET;-写指令子程序(左屏)-PR1:PUSHDPLPUSHDPHLCALL BUSY1 ; RS=0,R/W=1LCALLABO ;RS=R/W=E1=E2=0MOVDPTR,#0800H ;PA MOVA,COM MOVX DPTR,AINCDPTR ;PBMOVA,#1 MOVXDPTR,ACLRAMOVXDPTR,APOPDPHPOPDPL RET;=写数据子程序(左屏)=PR2:PUSHDPLPUSHDPHLCALLBUSY1MOV DPTR,#0801HMOVA,#4 ;RS=1MOVXDPTR,ALCALLABOMOVDPTR,#0800HMOVA,DAT1MOVXDPTR,A ;写数据INCDPTRMOVA,#5MOVXDPTR,AMOVA,#4MOVXDPTR,ACLRAMOVXDPTR,APOPDPHPOPDPLRET ;=读数据子程序(左屏)=PR3:PUSHDPLPUSHDPHLCALLBUSY1MOVDPTR,#0801H ;PBMOVA,#4MOVXDPTR,A ;RS=1MOVA,#5MOVXDPTR,A ;RS=E1=1DECDPLMOVXA,DPTRMOVDAT1,A ;读数据INCDPTRMOVA,#4MOVXDPTR,A ;E1=0CLRAMOVXDPTR,APOPDPHPOPDPLRET;=写指令子程序(右屏)=PR4:PUSHDPLPUSHDPHLCALL BUSY2 ; RS=0,R/W=1LCALLABO ;RS=R/W=E1=E2=0MOVDPTR,#0800HMOVA,COMMOVX DPTR,A ;写指令代码INCDPTRMOVA,#2 ;E2=1MOVXDPTR,ACLRA ;RS=R/W=E1=E2=0MOVXDPTR,APOPDPHPOPDPLRET;=写数据子程序(右屏)=PR5:PUSHDPLPUSHDPHLCALLBUSY2MOV DPTR,#0801H ;PBMOVA,#4 ;RS=1MOVXDPTR,ALCALLABOMOVDPTR,#0800HMOVA,DAT1MOVXDPTR,A ;写数据INCDPTRMOVA,#6MOVXDPTR,AMOVA,#4MOVXDPTR,ACLRAMOVXDPTR,APOPDPHPOPDPLRET ;=读数据子程序(右屏)=PR6:PUSHDPLPUSHDPHLCALLBUSY2MOVDPTR,#0801HMOVA,#4MOVXDPTR,A ;RS=1MOVA,#6MOVXDPTR,A ;RS=E2=1DECDPLMOVXA,DPTRMOVDAT1,A ;读数据INCDPTRMOVA,#4MOVXDPTR,A ;E2=0CLRAMOVXDPTR,APOPDPHPOPDPLRET;*; 初始化子程序INT; 内部调用子程序:PR1,PR4 ; 程序调用入口: INT ; 程序调用变量:无BEGIN: MOV COM,#0E2H ; 复位 LCALL PR1 LCALL PR4 MOV COM,#0A4H ; 关闭等待状态 LCALL PR1 LCALL PR4 MOV COM,#0A9H ; 设置1/32占空比 LCALL PR1 LCALL PR4 MOV COM,#0A0H ; 正向排序设置 LCALL PR1 LCALL PR4 MOV COM,#0C0H ; 设置显示起始行为第一行 LCALL PR1 LCALL PR4 MOV COM,#0AFH ; 开显示设置 LCALL PR1 LCALL PR4 RET; 清显示RAM 区(清屏)子程序CLEAR; 占用内部寄存器:R3,R4; 内部调用子程序:PR1,PR2,PR4,PR5 ; 程序调用入口:CLEARCLEAR: MOV R4,#00H ; 页面地址暂存器设置CLEAR1: MOV A,R4 ; 取页地址值 ORL A,#0B8H ; 或页面地址设置代码 MOV COM,A ; 页面地址设置 LCALL PR1 LCALL PR4 MOV COM,#00H ; 列地址设置为0 LCALL PR1 LCALL PR4 MOV R3,#50H ; 一页清80个字节CLEAR2: MOV DAT1,#00H ; 显示数据为0 LCALL PR2 LCALL PR5 DJNZ R3,CLEAR2 ; 页内字节清零循环 INC R4 ; 页地址暂存器加1 CJNE R4,#04H,CLEAR1 ; RAM 区清零循环 RET;*; 西文字符写入子程序CW_PR; 程序参数选择:PARA1; 占用内部资源: O_XL,O_YL,CODE,COUNT1,A,B,DPTR; 内部调用子程序:PR1,PR2,PR4,PR5; 连接字库: CHTAB ; 程序调用入口: CW_PR; 程序输入变量: O_XL,O_YL,CODE;-CW_PR: MOV DPTR,#CHTAB ; 确定字符字模块首地址 MOV A,CODE1 ; 取代码 MOV B,#08H ; 字模块宽度为8个字节 MUL AB ; 代码x8 ADD A,DPL ; 字符字模块首地址 MOV DPL,A ; = 字模库首地址 + 代码x 8 MOV A,B ADDC A,DPH MOV DPH,A MOV CODE1,#00H ; 借用为间址寄存器 MOV A,O_YL ; 读页地址寄存器 JB ACC.7,CW_1 ; 判字符体 MOV COUNT1,#06H ; 6x8点阵 LJMP CW_2CW_1: MOV COUNT1,#08H ; 8x8点阵CW_2: ANL A,#03H ; 取页地址值 ORL A,#0B8H ; 或页地址指令代码 MOV COM,A ; 写页地址指针 LCALL PR1 LCALL PR4 MOV A,O_XL ; 读列地址寄存器 CLR C SUBB A,#PARA1 ; 列地址-模块参数 JC CW_3 ; 0为左半屏显示区域(E1) MOV O_XL,A ; 0为右半屏显示区域(E2) MOV A,O_YL SETB ACC.3 ; 设置区域标志位. MOV O_YL,A ; 0为E1,1为E2CW_3: MOV COM,O_XL ; 设置列地址值 MOV A,O_YL ; 判区域标志以确定设置哪个控制器 JNB ACC.3,CW_4 LCALL PR4 ; 区域E2 LJMP CW_5CW_4: LCALL PR1 ; 区域E1CW_5: MOV A,CODE1 ; 取间址寄存器值 MOVC A,A+DPTR ; 取字符字模数据 MOV DAT1,A ; 写数据 MOV A,O_YL ; 判区域标志 JNB ACC.3,CW_6 LCALL PR5 ; 区域E2 LJMP CW_7CW_6: LCALL PR2 ; 区域E1CW_7: INC CODE1 ; 间址加1 INC O_XL ; 列地址加1 MOV A,O_XL ; 判列地址是否超出区域范围 CJNE A,#PARA1,CW_8CW_8: JC CW_9 ; 未超出则继续 MOV A,O_YL ; 超出则判是否在区域E2 JB ACC.3,CW_9 ; 在区域E2则退出 SETB ACC.3 ; 在区域E1则修改成区域E2 MOV O_YL,A MOV COM,#00H ; 设置列地址为0 LCALL PR4CW_9: DJNZ COUNT1,CW_5 ; 循环 RET;=;16*16点阵中文写入子程序CCW_PR; 程序参数选择:PARA1 ; 占用内部资源:O_XL,O_YL,CODE1,COUNT1,A,DPTR; 内部调用子程序:PR1,PR2,PR4,PR5; 连接字库: CCTAB ; 程序调用入口: CCW_PR; 程序输入变量: O_XL,O_YL,CODE1CCW_PR: MOV DPTR,#CCTAB ; 确定字符字模块首地址 MOV A,CODE1 ; 取代码 MOV B,#20H ; 字模块宽度为32个字节 MUL AB ; 代码x32 ADD A,DPL ; 字符字模块首地址 MOV DPL,A ; = 字模库首地址 + 代码x 32 MOV A,B ADDC A,DPH MOV DPH,A PUSH O_XL ; 列地址入栈 PUSH O_XL ; 列地址入栈 MOV CODE1,#00H ; 代码寄存器借用为间址寄存器CCW_1: MOV COUNT1,#10H ; 计数器设置为16 MOV A,O_YL ; 读页地址寄存器 ANL A,#03H ORL A,#0B8H ; 或页地址设置代码 MOV COM,A ; 写页地址设置指令 LCALL PR1 LCALL PR4 POP O_XL ; 取列地址值 MOV A,O_XL ; 读列地址寄存器 CLR C SUBB A,#PARA1 ; 列地址-模块参数 JC CCW_2 ; 0为左半屏显示区域(E1) MOV O_XL,A ; 0为右半屏显示区域(E2) MOV A,O_YL SETB ACC.3 ; 设置区域标志位. MOV O_YL,A ; 0为E1,1为E2 CCW_2: MOV COM,O_XL ; 设置列地址值 MOV A,O_YL ; 判区域标志以确定设置哪个控制器 JNB ACC.3,CCW_3 LCALL PR4 ; 区域E2 LJMP CCW_4CCW_3: LCALL PR1 ; 区域E1CCW_4: MOV A,CODE1 ; 取间址寄存器值 MOVC A,A+DPTR ; 取汉字字模数据 MOV DAT1,A ; 写数据 MOV A,O_YL JNB ACC.3,CCW_5 LCALL PR5 ; 区域E2 LJMP CCW_6CCW_5: LCALL PR2 ; 区域E1CCW_6: INC CODE1 ; 间址寄存器加1 INC O_XL ; 列地址寄存器加1 MOV A,O_XL ; 判列地址是否超出区域范围 CJNE A,#PARA1,CCW_7CCW_7: JC CCW_8 ; 未超出则继续 MOV A,O_YL ; 超出则判是否在区域E2 JB ACC.3,CCW_8 ; 在区域E2则退出 SETB ACC.3 ; 在区域E1则修改成区域E2 MOV O_YL,A MOV COM,#00H ; 设置区域E2列地址为0 LCALL PR4CCW_8: DJNZ COUNT1,CCW_4 ; 当页循环 MOV A,O_YL ; 读页地址寄存器 JB ACC.7,CCW_9 ; 判完成标志D7位, 1则完成退出 INC A ; 否则页地址加1 SETB ACC.7 ; 置完成位为1 CLR ACC.3 MOV O_YL,A MOV CODE1,#10H ; 间址寄存器设置为16 LJMP CCW_1 ; 大循环CCW_9: RET;*TAB:DB3FH,06H,5BH,4FH,66HDB6DH,7DH,07H,7FH,6FHDB77H,7CH,39H,5EH,79HDB71H,40H,48H,00H,7FH;DICETB:DB5EH,77H,06H,6DHDB5BH,3FH,3FH,06H;WORD_JIE:DB64H,0FFH,0CH,88H,5EH,0FFH,0BEH,88HWORD_0:DB00H,7EH,0A1H,91H,89H,85H,7EH,00HWORD_1:DB00H,00H,00H,82H,0FFH,80H,00H,00HWORD_2:DB00H,0E2H,91H,91H,91H,91H,8EH,00HWORD_3:DB00H,62H,81H,89H,89H,89H,76H,00HWORD_4:DB00H,0FH,08H,08H,0FFH,08H,08H,00HWORD_5:DB00H,4FH,89H,89H,89H,89H,71H,00HWORD_6:DB00H,7EH,89H,89H,89H,89H,72H,00HWORD_7:DB00H,81H,41H,21H,11H,09H,05H,02HWORD_8:DB00H,76H,89H,89H,89H,89H,76H,00HWORD_9:DB00H,46H,89H,89H,89H,89H,76H,00HWORD_A:DB00H,0FCH,0AH,09H,09H,09H,0AH,0FCHWORD_B:DB00H,0FFH,89H,89H,89H,89H,76H,00HWORD_C:DB00H,7EH,81H,81H,81H,81H,42H,00HWORD_D:DB00H,81H,0FFH,81H,81H,81H,7EH,00HWORD_E:DB00H,0FFH,89H,89H,89H,89H,81H,00HWORD_F:DB00H,0FFH,09H,09H,09H,09H,09H,00HWORD_10:DB0FFH,00H,00H,7EH,81H,81H,81H,7EHWORD_11:DB82H,0FFH,80H,00H,00H,82H,0FFH,80HWORD_12:DB0FFH,00H,0F6H,91H,91H,91H,91H,8EHWORD_13:DB0FFH,00H,62H,81H,89H,89H,89H,76H;SINTAB:DB80H,83H,86H,89H,8DHDB90H,93H,96H,99H,9CHDB9FH,0A2H,0A5H,0A8H,0ABHDB0AEH,0B1H,0B4H,0B7H,0BAHDB0BCH,0BFH,0C2H,0C5H,0C7HDB0CAH,0CCH,0CFH,0D1H,0D4HDB0D6H,0D8H,0DAH,0DDH,0DFHDB0E1H,0E3H,0E5H,0E7H,0E9HDB0EAH,0ECH,0EEH,0EFH,0F1HDB0F2H,0F4H,0F5H,0F6H,0F7HDB0F8H,0F9H,0FAH,0FBH,0FCHDB0FDHDB0FDH,0FEH,0FFH,0FFH,0FFHDB0FFH,0FFH,0FFH,0FFH,0FFHDB0FFH,0FFH,0FFH,0FFH,0FEHDB0FDH,0FDH,0FCH,0FBH,0FAHDB0F9H,0F8H,0F7H,0F6H,0F5HDB0F4H,0F2H,0F1H,0EFH,0EEHDB0ECH,0EAH,0E9H,0E7H,0E5HDB0E3H,0E1H,0DEH,0DDH,0DAHDB0D8H,0D6H,0D4H,0D1H,0CFHDB0CCH,0CAH,0C7H,0C5H,0C2HDB0BFH,0BCH,0BAH,0B7H,0B4HDB0B1H,0AEH,0ABH,0A8H,0A5H;DB0A2H,9FH,9CH,99H,96H;140DB93H,90H,8DH,89H,86HDB83H,80H,80H,7CH,79HDB76H,72H,6FH,6CH,69HDB66H,63H,60H,5DH,5AHDB57H,55H,51H,4EH,4CHDB48H,45H,43H,40H,3DHDB3AH,38H,35H,33H,30HDB2EH,2BH,29H,27H,25HDB22H,20H,1EH,1CH,1AHDB18H,16H,15H,13H,11HDB10H,0EH,0DH,0BH,0AHDB09H,08H,07H,06H,05HDB04H,03H,02H,02H,01HDB00H,00H,00H,00H,00HDB00H,00H,00H,00H,00HDB00H,00H,01H,02H,02HDB03H,04H,05H,06H,07HDB08H,09H,0AH,0BH,0DHDB0EH,10H,11H,13H,15HDB16H,18H,1AH,1CH,1EHDB20H,22H,25H,27H,29HDB2BH,2EH,30H,33H,35HDB38H,3AH,3DH,40H,43HDB45H,48H,4CH,4EH,51HDB55H,57H,5AH,5DH,60HDB63H,66H,69H,6CH,6FHDB72H,76H,79H,7CH,80H;西文字苻库CHTAB: DB000H,000H,000H,000H,000H,000H,000H,000H; =00H DB000H,000H,000H,04FH,000H,000H,000H,000H; ! =01H DB000H,000H,007H,000H,007H,000H,000H,000H; =02H DB000H,014H,07FH,014H,07FH,014H,000H,000H; # =03H DB000H,024H,02AH,07FH,02AH,012H,000H,000H; $ =04H DB000H,023H,013H,008H,064H,062H,000H,000H; % =05H DB000H,036H,049H,055H,022H,050H,000H,000H; & =06H DB000H,000H,005H,003H,000H,000H,000H,000H; , =07H DB000H,000H,01CH,022H,041H,000H,000H,000H; ( =08H DB000H,000H,041H,022H,01CH,000H,000H,000H; ) =09H DB000H,014H,008H,03EH,008H,014H,000H,000H; * =0AH DB000H,008H,008H,03EH,008H,008H,000H,000H; + =0BH DB000H,000H,050H,030H,000H,000H,000H,000H; ; =0CH DB000H,008H,008H,008H,008H,008H,000H,000H; - =0DH DB000H,000H,006H,006H,000H,000H,000H,000H; . =0EH DB000H,020H,010H,008H,004H,002H,000H,000H; / =0FH DB000H,03EH,051H,049H,045H,03EH,000H,000H; 0 =10H DB000H,000H,042H,07FH,040H,000
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
提示  人人文库网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文
本文标题:单片机与接口技术—教学课件
链接地址:https://www.renrendoc.com/paper/184271731.html

官方联系方式

2:不支持迅雷下载,请使用浏览器下载   
3:不支持QQ浏览器下载,请用其他浏览器   
4:下载后的文档和图纸-无水印   
5:文档经过压缩,下载后原文更清晰   
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

网站客服QQ:2881952447     

copyright@ 2020-2025  renrendoc.com 人人文库版权所有   联系电话:400-852-1180

备案号:蜀ICP备2022000484号-2       经营许可证: 川B2-20220663       公网安备川公网安备: 51019002004831号

本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知人人文库网,我们立即给予删除!