导航:首页 > 软件知识 > 如何看懂dch程序流程图

如何看懂dch程序流程图

发布时间:2023-03-28 05:07:36

A. 设计一个音乐程序

有图,Q我
1352282

一. 设计任务及要求
1. 以8255接八个开关K1~K8,做电子琴按键输入。
2. 以8253控制扬声器,拨动不同的开关,发出相应的音阶。
要求: K1—静音
K2—发si的音493Hz
K3—发la的音440Hz
K4—发sol的音392Hz
K5—发fa的音349Hz
K6—发mi的音329Hz
K7—发re的音293Hz
K8—发do的音261Hz
二. 方案比较和认证
通过8255和8253来实现电子琴模拟,主要可以分成两部分,分别为输入部分和发音部分。输入部分主要是由8255和8个常开型开关来完成。常开型开关如右图。8个常开型开关K1~K8与8255的A口PA0~PA7相接,不触动开关时,为高电平输入,当按下开关时,就接地,为低电平输入。例如当K1键按下时,从8255中A口输入的数为11111110B,十六进制为0FEH。每一个开关按下时,都对应一个ASCII码,如下表所示:
开 关 K1 K2 K3 K4 K5 K6 K7 K8
对应数据 0FEH 0FDH 0FBH 0F7H 0EFH 0DFH 0BFH 7FH
对应频率 静音 493 Hz 440 Hz 392 Hz 349 Hz 329 Hz 293 Hz 261 Hz

输入部分的硬件实现比较简单,所以说主要还是在发音部分。在设计中驱动扬声器地声的主要有两种方式,分别是以位触发和定时器控制。下面就这两种不同的方式确定两个不同的设计方案。
方案1:
发声采用位触发方式。电路原理图如下所示。程序直接控制PPI(8255可编程序外围接口芯片)的输出控制寄存器(I/O端口为61H)的第一位,使该位按所需的频率进行1和0的交替变化,从而产生一串脉冲控制波形,这些脉冲经过放大后驱动扬声器发出声音。
可以利用软件延时来控制所产生的脉冲波形的长度和脉宽,就可以实现产生不同频率和不同音长的声音。软件实现的程序如下:
IN AL,61H
MOV AH,AL
AND AL,0FCH ;关断定时器通道2的门控
SOUND:XOR AL,2 ;触发61H端口第1位
OUT 61H,AL
MOV CX,DX ;(DX)=控制脉冲的计数值
WAIT: LOOP WAIT ;延时循环
DEC BX ;(BX)=脉冲持续的时间
JNZ SOUND
MOV AL,AH
OUT 61H,AL ;恢复61H端口

在本方案中,通过程序的方法来控制PB1,使其在1和0之间按一定的频率变,从而产生一串脉冲。控制脉冲宽度的计数值的算法如下:

计数值=2801*100/音频

如果音频为f,则脉冲周期1/f一个半波的时间为1/2f秒,而1/2f秒的延时可简单地通过LOOP指令的循环来取得,由于2801次LOOP指令循环执行所需时间是10MS,所以一秒钟时间约执行2801*100次LOOP指令。控制脉冲宽度的计数值的实现程序如下:
MOV AX,2801
MOV BX,50 ;频率不同该值就不同
MUL BX
DIV DI ;(DI)= f
MOV DX,AX ;(DX)=1/2f
算出了脉冲宽度,再通过高低电平的不断变换,就可实现不同频率的脉冲方波。把此方波经滤波放大即可驱动扬声器发声了。
方案2:
利用定时器发声。这里是通过硬件即8253定时器产生声音。
CUP通过对定时器的通道2进行编程,使其I/O寄存器接收一个控制声音频率的16位计数值,端口61H的最低位控制通道2门控的开断,以产生特殊的音响。当定时器接收的计数值为533H时,能产生896Hz的声音,因此产生其他频率的计数值就可由下式计算:
计数值=533H×896÷ f=1234DCH÷ f
在送出频率计数值之前,还要给方式寄存器送一个方式值,该数决定对哪一个通道编程,采用什么模式,送入通道的计数值是一字节还是两字节,是二进制码还是BCD码。其位组合的格式如下:

当通道2用于发声时,采用的是模式3,在模式3下,输出线为“1”和为“0”的时间各占计数时间的一半,因而产生一系列间隔均匀的脉冲。
产生指定频率声音的程序段如下:
MOV AL,0B6H
OUT 43H,AL ;43H为8253的控制字端口
MOV DX,12H
MOV AX,34DCH
DIV DI ;(DI)=频率
OUT 42H,AL ;42H为8253的通道2端口
MOV AL,AH
MOV 42H,AL
从定时器输出的方波信号,经功率放大和滤波后驱动扬声器。送到扬声器的信号还受到了从并行接口芯片8255(端口地址为61H)来的双重控制,端口61H的最低位控制通道2的门控开断,以产生特殊的音频信号,端口61H的PB1位和定时器的输出信号同时作为与门的输入,PB0和PB1位可由程序决定为0还是为1。显然只有PB0和PB1都是1时,才能使扬声器发出声音。控制音长的时间可以简单地通过反复执行指令来得到。我们知道执行2801次LOOP指令约需要10MS的时间。因此用10MS的倍数值来控制扬声器开关的时间间隔,就可控制发声的音长了。实现程序如下:
IN AL,61H
MOV AH,AL
OR AL,3
OUT 61H,AL ;开扬声器
L: MOV CX,2801
DY:LOOP DY
DEC BX
JNZ L
MOV AL,AH
OUT 61H,AL ;关扬声器
下图是利用定时器发音的电路图。

方案比较:
在上述两个方案中,输入部分都是一样的。区别在于以不同的方式来驱动扬声器发声。经对比可知,两种方案都各有优缺点。在方案1中,其优点是电路简单,所用的器件芯片少,主要芯片只有需一片8255,产生方波是通过软件来实现的,易于修改和维护。然而它也存在一定的缺点,就是系统不断地通过软件来产生方波,系统资源被占用,无法再做其它事。与方案1相比,方案2增加了一个8253芯片和一个与门,虽然电路比方案1复杂,但通过定时器产生方波,实现起来比较简单,而且也不会出现系统资源被全部占用的情况。
经分析,选择方案2进行设计。
三. 硬件原理,器件功能
在方案2的设计中用到了两个主要的芯片,一个是并行接口8255,另一个是计数器8253。下面就先介绍一下这两个器件的主要功能以及在这个系统中所应用的功能。
1.8255并行接口。
8255是一个40引脚的双列直插式集成电路芯片。按功能可把8255分为三个逻辑电路部分,即:口电路、总线接口电路和控制逻辑电路。8255共有三个8位口,其中A口和B口是单纯的数据口,供数据I/O使用。而C口则既可以作数据口,又可以作控制口使用,用于实现A口和B口的控制功能。总线接口电路用于实现8255和单片微机的信号连接。其中包括:数据总线缓冲器,读/写控制逻辑,控制逻辑电路。内部的结构如下图所示。

8255的引脚信号中,除了电源和地以外,其他信号可以分为两组:
1.和外设一边相连的:
PA7-PA0:A组数据信号
PB7-PB0:B组数据信号
PC7-PC0:C组数据信号
2.和CPU一边相连的:
RESET:复位信号,低电平有效。当RESET信号来到时,所有内部寄存器就被清除,同时,3个数据端口被自动设为输入端口。
D7-D0:它们是8255的数据线,和系统数据总线相连。
:芯片选择信号,低电平有效。在一个系统中,一般根据全部接口芯片来分配若干较低位地址(比如A5、A4、A3)来组成各种芯片选择码,当这几位地址组成某一个代码时,译码器便往8255的端 输出一个低电平,于是8255被选中。只有当 有效时,读信号 和写信号 才对8255有效。
:芯片读出信号低电平有效。
:芯片写入信号低电平有效。

8255共有四个可寻址的端口(即A口、B口、C口和控制寄存器),用二位地址编码即可实现选择。参见下表。

8255共有三种工作方式,即方式0、方式1、方式2。
1.方式0为基本输入/输出方式,方式0下,可供使用的是两个8位口(A口和B口)及两个4位口(C口高4位部分和低4位部分)。四个口可以是输入和输出的任何组合。方式0适用于无条件数据传送,也可以把C口的某一位作为状态位,实现查询方式的数据传送。
2.方式1为选通输入/输出方式,A口和B口分别用于数据的输入/输出。而C口则作为数据传送的联络信号。A口和B口的联络信号都是三个,如果A或B只有一个口按方式1使用,则剩下的另外13位口线仍然可按方式0使用。如果两个口都按方式1使用,则还剩下2位口线,这两位口线仍然可以进行位状态的输入输出。方式1适用于查询或中断方式的数据输入/输出。
8255作为输入时如下图。输入过程如下:当输入设备准备好数据,将数据送至PA7~PA0或PB7~PB0,同时发 ,在 下降沿控制下,8255将PA7~PA0或PB7~PB0上的数据锁存到A口或B口数据输入寄存器中,同时8255向输入设备发IBF有效,告知输入设备暂缓送数。8255A可以两种方式通知CPU取走数据: 第一种方式是用中断方式,在INTE=1∩IBF=1时, 的上升沿使INTR=1,8255向CPU提出中断申请,CPU以中断方式取走数据,在CPU响应中断后,执行IN指令,将8255 A口或B口数据输入寄存器中的数据取走,同时, 信号的下降沿清除INTR信号, 信号的上升沿复位IBF。输入设备仅当检测到IBF为低电平后,才开始传送下一个数据,如此循环;第二种方式是用软件查询,CPU仅当查询到IBF=1时,才从8255A 口或B口数据输入寄存器中取走数据。

8255作为输出时如下图所示。输出过程如下:首先CPU执行OUT指令,在 信号的下降沿CPU输出的数据送入8255数据输出缓冲器,并使INTR复位。 信号上升沿将 置为有效,通知输出设备,CPU已把数据输出到8255的指定端口中,输出设备接到 信号有效后,发 有效, 下降沿将 置为1, 上升沿表示输出设备已从8255A指定端口取走数据,此时若 INTE=1,则INTR被置为高电平,向CPU申请中断,CPU可采用中断方式输出下一个数据。CPU也可通过查询 信号,若 =1,CPU输出下一个数据给8255A,即查询方式传送数据。

3.方式2双向数据传送方式。只允许A口工作在方式2,当A口工作在方式2时,B口可工作在方式0或方式1。 所谓双向,即A口可分时进行I/O操作。 A口工作在方式2,信号联络线如下:
(PC6), (PC7), (PC4),IBFA(PC5);
INTE1(PC6)与输出中断有关,可由用户给8255A控制字寄存器送PC6的置位/复位字来实现允许/禁止A口输出中断。
INTE2(PC4):与输入中断有关,可由用户给8255A控制字寄存器送PC4的置位/复位字来实现允许/禁止A口输入中断。
INTRA(PC3):I/O中断申请,高电平有效,产生中断请求信号的条件为: INTRA=IBFA·INTE2· · (输入中断);
INTRA= ·INTE1· · (输出中断)。
在本设计系统中运用的是工作方式0,这种方式比较简单。在这里,主要是A口用于输入,与8个常开型开关连接,用于采集输入。B口中的PB1和PB0用于控制发声。
2.计数器/定时器8253。 8253是8254的改进型,右图是它的芯片实物图。8253包括3个独立的16位计数器通道,而每个计数器都有6种工作方式,可以按二进制或十进制(BCD码)进行计数。如下图为8253的内部结构图。在图中可以清楚地看到,8253主要是由数据总线缓冲存储器,读写控制电路,控制字寄存器和3个通道4部分所组成。
1. 数据总线缓冲器是8253与CPU DB连接的8位双向三态缓冲器,CPU通过它向8253写方式控制字到控制字寄存器中,写计数初值到计数通道,读取计数通道的当前计数值。
2. 读/写控制逻辑控制8253内部操作。当 无效,8253的DB处于高阻状态,当 有效, 和A1、A0、 、 组合,对3个计数通道、控制字寄存器进行读/写操作。
3. 控制字寄存器 8253初始化编程时,CPU写控制字到控制字寄存器,以选择计数通道及相应的工作方式。

4. 数通道0~2。8253内部包括3个功能完全相同和操作完全独立的计数通道,每个计数通道由16位减法计数器、16位计数初值寄存器和16位计数值锁存器组成。初始化时,向计数通道装入的计数初值,先送到计数初值寄存器中保存,然后送到减法计数器。计数器启动后,减法计数器对CLK的下降沿进行减1计数,在未锁定时把结果送入16位计数值锁存器中。当计数值减到0时,输出OUT信号,一次计数结束。计数初值寄存器的内容,在计数过程中保持不变。计数初值寄存器和计数值锁存器占用一个端口地址(即该计数通道口地址),CPU读取计数通道的当前计数值来自计数值锁存器。
各通道可工作在计数器方式,此时被计数的事件以脉冲方式从CLK输入;
各通道可工作在定时器方式,此时确定频率的时钟脉冲从CLK输入。
计数初值=定时时间÷CLK周期
各通道的启动、禁止、允许计数与门控信号GATE有关,GATE的作用OUT的输出波形随各通道工作方式不同而不同。
8253即可以作为计数器又可以作为定时器使用。在本系统中主要是运用了其计数功能。在8253的3个计数器中,都有6种不同的工作方式,其中工作方式3可称为方波发生器,其产生的方波正是在发声系统中所需要的。所以在这里就应用了8253作计数器并工作在方式3下。
下图为8253工作方式3的定时波形图。
任一通道工作在方式3,只在计数值n为偶数,则可输出重复周期为n,占空比为1:1的方波。如图所示,进入工作方式3,OUT输出低电平,装入计数值n后,OUT立即跳变为高电平。如果当前GATE为高电平,则立即开始减1计数,OUT保持为高电平。当计数值减到n/2时,OUT跳变为低电平,一直保持到计数值为0,系统就会自动重新置入计数值n,实现循环计数。这时OUT端输出的周期为n×CLK周期,占空比为1:1的方波序列。

如果在操作过程中,GATE变为无效,则暂停减1计数过程,直到GATE再次有效,重新从初值n开始减计数。这一点对本系统来说非常重要。这使得在控制发声时可以方便随时停止。
下面的是8253的6种工作方式下的输出波形图。在这里就不再一一阐述了。

四. 系统原理
经过分析对比上述的两种方案可知,选取方案2是比较合理的。下面就方案2来分析一下整个系统的工作原理。前面已经提到,整个电路分成输入和发音两大部分。主要的器件有一个并行接口8255,和一个8253定时器。输入部分的硬件原理图比较简单,如右图所示的为输入电路,其主要是由8个常开型开关和一个并行接口8255组成。由图中可看到,8个开关一端接地,另一端接到8255的A口输入,并且通过一个电阻接到+5V。因此,在开关不按下时,从8255A口输入的是高电平,当开关按下时,输入的则是低电平,这样通过低电平触发,既方便也对芯片起保护作用。如下表,当不同的开关按下时,从A口输入就对应一个8位的数据。

开 关 K1 K2 K3 K4 K5 K6 K7 K8
输入数据 0FEH 0FDH 0FBH 0F7H 0EFH 0DFH 0BFH 7FH

通过软件检测输入的数据,然后给8253送相应频率的计数值。检测的程序如下:
IN AL,60H ;从8255A口输入一个数据
CMP AL,0FEH
JZ K1 ;K1—K8分别为不同程序断的标号
CMP AL,0FDH
JZ K2
CMP AL,0FBH
JZ K3
CMP AL,0F7H
JZ K4
CMP AL,0EFH
JZ K5
CMP AL,0DFH
JZ K6
CMP AL,0BFH
JZ K7
CMP AL,7FH
JZ K8
对于发音部分。PC机上的大多数输入/输出(I/O)都是由主板上的8255(或8255A)可编程序外围接口芯片(PPI)管理的。PPI包括3个8位寄存器,两个用于输入功能,一个用于输出功能。输入寄存器分配的I/O端口号为60H和62H,输出寄存器分配的I/O端口号为61H。由PPI输出寄存器中的0、1两位来选择扬声器的驱动方式。如下图。

连接到扬声器上的是定时器2,从上图可以看到,GATE2与端口61H的PB0相连,当PB0=1时,GATE2获得高电平,使定时器2可以在模式3(方波)下工作。定时器2的OUT2与端口61H的PB1通过一个与门与扬声器的驱动电路相连。当PB1=1时,允许OUT2的输出信号到达扬声器电路。因此,只有PB0和PB1同时为“1”时,才能驱动扬声器地声。通过以下指令实现:
IN AL,61H
OR AL,3
OUT 61H,AL
上面的指令用以打开扬声器,如要关闭扬声器时则为:
AND AL,0FCH
OUT 61H,AL
当从8255中采集到输入的数据时,需要确定相应的频率,所以在软件编程时要建立一个数据表:
TABLE DW 493,440,392,349,329,293,261
把相应的频率送到一个寄存器上,通过公式:
计数值=533H×896÷ f=1234DCH÷ f
算出计数值,再把算得的计数值送给8253,就可产生所要频率的方波。在把计数值送8253前,必须先把8253进行初始化:
MOV AL,0B6H
OUT 43H,AL
使其选用通道2,工作在方式3下。
就整个电路而言,接好电路后,通过软件编程不断地采集从8255口中输入的信号,而8个开关都接在8255的A口上,只要有开关按下,就会采集到一个数据,根据这个数据与事先编好的表对应,得到一个计数值,把这个计数值送给8253的通道2,8253的通道2工作的方式3下,这样就可以产生满足频率要求的发声方波。这个方波经驱动放大就可以使扬声器发出相应的声音。
所以8255在这里完成两个任务,它不仅从A口中采集到数据,而且B口的PB1和PB0两个位要控制发声。8253的主要任务就是产生所要求发声的不同频率的方波。
五. 电路图
下图即为本设计中所采用的方案2的硬件连线图。

在设计过程中,独立编址时,用地址线的高位部分和控制信号(如RD、WR、M/IO)进行组合产生 I/O接口电路的片选信号(CS),用地址线的低位部分直接连到 I/O接口芯片实现端口的选择。在此采用的是译码器译码,电路图如下所示,经过74LS138译码后, 输出作为8253的片选信号(CS),即其端口地址为40H~43H。 输出作为8255的片选信号(CS),即其端口地址为60H~63H。

六. 软件思想,流程图,源程序
软件部分对整个系统来说起着重要的作用,在本电子琴系统中,软件可以分为三部分,主程序部分,发音子程序部分和延时子程序部分。
主程序的流程图如下:

发声程序包括3个步骤:
(1)在8253中的42端口送一个控制字0B6H(10110110B),该控制字对定时器2进行初始化,使定时器2准备接收计数初值。
(2)在8253中的42H端口(Timer2)装入一个16位的计数值(533H×895/频率),以建立将要产生的声音频率。
(3)把输出端口61H的PB0、PB1两位置1,发出声音。
以下是发声子程序的流程图:

我们知道LOOP指令执行2801次的时间为10ms,所以延时子程序则很简单,只需要反复执行LOOP指令就可实现,并且所得到的延时时间为10ms的倍数。

下面即为整个程序代码:

B. 什么是DCH驱动程序和标准驱动程序有什么差别

什么是DCH驱动程序?

有关微软官方对于通用驱动程序的更多介绍,可参考:https://docs.microsoft.com/zh-cn/windows-hardware/drivers/develop/getting-started-with-universal-drivers

DCH驱动程序和标准(Standard)驱动程序有什么不同?

虽然基本核心组件文件保持不变,但DCH驱动程序的打包方式与以前的(Standard)标准驱动程序不同。按照 Microsoft 的要求,DCH驱动只含有基础驱动,不包含任何UI和实用工具,也不包含OEM的定制化组件,驱动程序控制面板将不再随驱动程序提供,而是需要通过访问Microsoft Store获取UWP版本的驱动程序控制面板,或是通过Windows Update自动下载安装。

相较于标准驱动程序而言,DCH驱动更干净,而且在同样运行Windows 10 系统的不同硬件设备上,可以使用同一版通用的驱动。

目前电脑硬件厂商中,主要是Intel的核显驱动和Nvidia的独显驱动更新使用了DCH版本。

对于Intel核显驱动来说,用户可以直接从旧版本的标准驱动直接覆盖安装升级至新版本的DCH驱动;而对于Nvidia独显驱动来说,用户无法从旧版本的标准驱动直接覆盖安装升级至新版本的DCH驱动(本文重点)。

以Nvidia显卡驱动为例,如果在原本安装标准驱动程序的机台上下载安装新版本DCH驱动,则会出现如下报错:

如何确认我的驱动程序是标准版还是DCH版?

由于Intel核显驱动可以直接覆盖安装升级为DCH版驱动,我们这里以Nvidia独显驱动为例,右击桌面空白处,打开Nvidia控制面板,在左下角选择系统信息,在弹出的窗口中有一行“Driver Type”,显示DCH即为DCH驱动,显示Standard即为标准驱动:

如何将标准版Nvidia显卡驱动升级为DCH驱动?

如需使用DCH驱动,首先系统必须是Windows 10 1809,Build 17763或更新版本。

在确保系统版本符合要求以及电脑内驱动版本为Standard的前提下,访问Nvidia官网获取新版本DCH驱动下载链接。可以看到在Nvidia官网,对于驱动下载链接有一个下拉菜单进行分类,选择DCH后搜索并下载的便是DCH版驱动:

由于电脑内原先安装的是标准版驱动,无法直接安装DCH驱动,我们需要借助DDU(Display Driver Uninstaller)工具软件来先卸载原有标准版驱动。

获取DDU(Display Driver Uninstaller)

官网:http://www.wagnardsoft.com/

下载链接:http://www.wagnardsoft.com/DDU/download/DDU%20v18.0.0.4.exe/

在开始操作前确保电脑断网,否则Windows Updete会自动安装驱动

按WIN+R输入msconfig打开系统配置

在“引导”选项卡中勾选“安全引导”,确定后重启进入安全模式。

打开DDU,选择设备类型和设备厂商。

点击清除后重启。待系统自动重启后直接安装之前下载好的DCH版驱动即可。

最后,因为DCH驱动是不包含显卡控制面板的,所以可以自行在Microsoft Store里获取安装NVIDIA Control Panel。

C. 单片机控制继电器定时开关的程序流程

板设计的定时开关控制器具有简单易制、价格低廉、控制点数多、控制时间可精确到秒等特点:
1.主板电路部分
本电路主要是利用单片机AT89C2051(-24PI)作为主控制元件,通过外围电路控制用电设备的电源,以达到定时开、关机的目的。AT89C2051具有体积小、功能强大、运行速度快、价格低廉等优点,非常适合制作集成度较高的控制电路。图1为主电路原理图,图2为按其制作的主板(双面)大小只有95mm×70mm的器件位置图。主板电路包括MCUAT89C2051、键盘与显示、输入与输出口、复位和电源滤波等电路组成。
(1)键盘与显示显示电路由U2、U3、Q1~Q7和L1A、L2A组成。U2为BCD-7段译码器(74LS47),通过单片机U1的P1.4~P1.7口将要显示字符的BCD码输出到U2的四个输入端,经U2译码后输出相应的笔段驱动LED数码管(共阳)。LED数码管显示采用动态扫描方式,即在某一时刻,只有一个数码管被点亮。数码管的位选信号由单片机U1的P3.3~P3.5输出,经U3(74HC138)译码后通过Q1~Q6放大,驱动相应的数码管。R17~R24为限流电阻。
由于U2只能输出7段笔段码,而数码管除了七段笔段外,还要控制点亮小数点,因此,小数点必须有另外的驱动电路来完成,在这里,通过Q7来驱动小数点。当需要点亮小数点时,在U1的P1.3输出高电平即可。
键盘电路跟显示电路一样,采用扫描方式,利用动态显示时的数码管驱动位置信号来判断相应按键的状态。U1的P3.3~P3.5口输出的BCD码经U3译码后,相应Y口呈低电平,而U1的P3.7口平时为高电平(由于R8上拉),当某一键按下时,P3.7被下拉为低电平,这时MCU利用程序查询P3.7是否为低电平,如果P3.7为低电平,就读回U1P3.3~P3.5口的值(从缓冲区读取),则可判断是哪个按键按下,然后调用相应的处理程序进行处理。
(2)控制输出、复位与电源滤波电路MCU对控制的输出是通过P3.0~P3.2口完成的。程序开始时这三个口的输出状态是低电平,MCU通过程序查询三路输出的ON或OFF状态预置时间是否已到,如果已到时间,则改变相应的输出状态,就完成了对外部电路的控制。复位电路如图1左上角所示,C3和R25完成上电复位,S6为手动复位,按键输入干扰和抖动的预防是由软件完成的。+5V电源由JP2输入,经C4~C9滤波后给U1和其它器件供电。
2.电源与控制电路
电源及控制电路。其中,市电经总开关K后由B降压、V1整流、C11~C14滤波、U4、U5稳压后给主板和控制电路板提供稳定的工作电源;主板送过来的三路控制信号通过Q12~Q14分别控制继电器J1、J2、J3,对外部电路实施直接控制。继电器这里没有给出具体型号,您可根据耐压及通流大小选用相应的继电器,如在大电流和强电磁场干扰的环境里工作,最好利用中间继电器来间接控制。
3.程序软件工作过程
(1)秒脉冲发生器秒脉冲发生器是由定时器T0和内存空间TT0配合完成的。T0工作于16位计数器模式,当T0向上计数由全1变为全0时产生中断,本程序中T0的初值为0DC00H,大约0.01s中断一次。这里使用的晶振频率为11.0592MHz,由此可计算出日误差约为0.78s。
图4为程序流程图。系统产生中断后,首先保存ACC和PSW的值,然后为T0重装初值,判断中断次数是否小于100,是则转出中断服务,反之则为秒计数器加1,秒计数器如果大于59,则为分计数器加1,同时秒计数器清0。同样分计数器如大于59则为时计数器加1,同时分计数器清0,时计数器如大于23则清0并转出中断服务。T0中断100次的时间刚好为1秒钟。
(2)主程序上电复位过程:首先P0~P2口全部置1,P3口高5位置1,低3位置0。设置定时器T0工作于16位计数器模式,并赋初值TH0=0DCH,TL0=00H,关闭外部中断和串行口中断,时间计数器TS、TM、TH清0,所有预置时间存储区全部赋值FFH,至此所有初始化工作完成。
主程序工作过程:首先循环进行六个数码管扫描显示(DISPLY段),然后比较所有预置时间(COMP段)是否与当前时间相等,如相等则转向相应处理程序。在比较完成(或处理完成)后判断有无按键(PP2段),没有则返回继续显示、比较、判断;有按键则转向相应处理程序。按键转移采用偏移量加表格跳转转移法(KEY段),简单、明了。预置时间比较则采用逐一比较法,即对每一个预置值进行比较,如相等则做相应处理。具体比较时(COMP1段)先比较TH值,如不相等则直接转出并置“时间到”标志CCB为0,如TH、TM、TS全部对应相等,则置该标志为1。
本程序在显示及按键处理(设置过程)中巧妙使用R1寄存器作为公用地址寄存工具,对实时时间和预置时间的显示和修改调用同一程序完成,使源代码长度大大缩短,提高了程序的可读性和运行效率。在本刊的网站(www.eleworld.com)上给出了源程序,供读者参考。
4.制作与调试
(1)主板的制作与调试主板的制作稍微复杂一点。首先是制作印刷板,利用Protel99按照本文所示器件位置图放置好元器件,然后手动布线(双面),线宽为0.8mm左右,太宽做出的板子太大,太窄无法进行自制。绘好印制板图后转成BMP格式利用电脑刻字机镂空(要用进口的即时贴纸,不然容易断开),贴在双面敷铜板上,就可以用FeCl3腐蚀了。具体的制作方法这里不再赘述,但最好在印制板布线时做个阻焊层,同时在即时贴上刻出来,当板子制好清洗干净后敷在上面,用浅绿色油漆或清漆喷上薄薄的一层,好看又防腐蚀。
(2)元器件的选择如果按照本文所附器件位置图布线的话,数码管需选用图示型号才能安装(5361BH,一拖三数码管),选用不同型号数码管时可能需修改器件位置参数,然后再布线即可;晶振为11.0592MHz;S1~S5选用黑色小型轻触开关,S6则用红色同类型开关;变压器B选用15V、10W左右即可,V1硅堆应与B配合选用;控制继电器根据需要选用适合的型号,如5、12、24V等,如果选用5V的,相应的B、V1可选小一点的,7812则不要。如选用24V的,那么B、V1、7812、7805都需同时根据实际情况来选用;交流220V输出插座没有特殊要求,其耐压和通流符合受控器件要求即可。其它元器件选用通用的就行。
(3)焊接元器件元器件购回后应先进行预处理(引脚打磨、上焊锡),然后逐一焊接。在焊接MCU(当然2051要烧好程序后才能焊接)和其它集成电路时应使用有良好接地的烙铁(断电焊接也可),以免被击穿。由于双面印刷板存在一个穿孔问题,器件引脚穿过后,两面都要点上焊锡;如只是过孔,可用细铜线穿过并在两面焊接后剪掉即可。
在印刷板制作良好,连线没有不应有的开路或短路,且焊接没有虚焊的情况下,不用调试即可正常工作(本程序已制作成品并调试通过,不需再行调试)。如果您觉得自己制作的印刷板不够漂亮或太麻烦可联络凯思迪邮购(焊接好的整板也有),本刊网站有与凯思迪公司网站的链接。
(4)电源与控制板的制作可以将电源与控制板做在同一个板子上,也可分开制作,视所使用的情况而定,但JP1与JZ1之间的连线不宜太长。印刷板的制作同前所述,要注意的是在布线时对220V市电进入和输出(包括中线)的线宽设计要宽一点(根据工作电流大小来定为好),还要注意市电与直流电源的隔离,以免在使用中造成触电事故。
5.操作使用
本系统在加电后数码管显示“00.00.00”,输出继电器均不动作,此时可直接按S1、S2、S3键分别对时、分、秒进行调整,使当前时间与北京时间相符,时间设置过程中将停止计时,在设置好后按S4退出,时钟即进入正常计时。如果要设置输出控制的预置时间则先按S5,数码管显示“95.95.95”,此时可再按S1、S2、S3键分别对第一路输出状态ON的时、分、秒进行设置,设好后再按一次S5键,数码管也显示“95.95.95”,然后按S1、S2、S3键则分别对第一路输出状态OFF的时、分、秒进行设置,依此类推,按第七次时退出设定。任一路任一状态被执行后其预置值即被清除,24小时后并不有效,如果需要每天循环执行则对程序进行简单的修改即可(预置值不清除就可)。
6.改进与扩展
本文所述的AT89C2051在控制输出时只使用了P3.0~P3.2三个口,所以只能控制三路六个状态,如果把不用的P1.0~P1.2三个口用起来,则可控制六路十二个状态,外围电路相应增加三路继电器,程序软件只需稍事修改即可。当然如果需要控制更多路输出状态,那么在使用锁存器、译码器、触发器等后最多可以扩展到控制26=64路128个状态。在对控制输出的路数要求不多,而显示部分需要比较多的情况下,如还要显示年月日、农历、星期等,只要对其进行扩展就可实现:P1.4~P1.7不动,选通端用两个138,输出口用P3.2~P3.5就有24=16个数码显示。这时仍然利用上述方法最多可扩展到控制25=32路64个状态。当然年月日、农历、星期的计算(如大月小月、闰年、闰月等)分别汇编相应的子程序插入即可

D. lntel显卡DCH驱动有什么用啊

DCH驱动主要是用于显卡驱动的,没有驱动显卡是无法使用的。

Intel显卡DCH驱动是WIN10系统下的新驱动模式的模块化卡驱动程序,一般不包括控制界面等附加功能,基本上是纯驱动,控制面板(如果有)则需要通过WIN10应用商店另外下载。

DCH只是一种新的驱动部署形式,微软鼓励厂商和用户采用这种形式来提供/安装设备驱动,一个典型的DCH驱动需要包括基础的驱动、可选的组件包和可选的硬件支持应用。

采用这种结构的目的是可以让OEM很方便地在IHV提供的原始驱动基础上加入自己的客制化功能,而不需要对原始驱动进行修改。

E. 英伟达显卡驱动,DCH、GRD、SD这些的区别是什么

DCH:Declarative Componentized Hardware supported apps(中文:声明性组件化硬件支持应用),而DCH驱动则是微软提出中握的新驱动程序开发规范,用于基于通用Windows平台的Windows 10版本上安装和运行的驱动程序包。

GRD:Game Ready Driver,NVIDIA定义的概念,官方宣称主要针对游戏做优化。

SD:Studio Driver,同样是NVIDIA定义的概念,官方宣称主要针对生产力类应用(比如PR、AE等)做优化。

介绍

显示芯片(Video chipset)是显卡的主要处理单元,因此又闹培纤称为图形处理器(Graphic Processing Unit,GPU),GPU是NVIDIA公司在发布GeForce 256图形处理芯片时首先提出的概念。尤其是在处理3D图形时,GPU使显卡减少了对CPU的依赖,并完成部分原本属于CPU的工作。

GPU所采用的核心技术有硬件T&L(几何转换和光照处理)、立方环境材质贴图和顶点混合、纹理压缩和凹凸映射贴图、双重液仿纹理四像素256位渲染引擎等,而硬件T&L技术可以说是GPU的标志。

F. 51单片机做数字电子钟

源程序如下: ORG 0000H ;程序开始入口

LJMP START

ORG 0003H ;外中断丛行0中断程序入口

RETI

ORG 000BH ;定时器T0中断程序入口

LJMP INTT0 ;跳至INTTO执行

ORG 0013H ;外中断1中断程序入口

RETI

ORG 001BH ;定时器T1中断程序入口

LJMP INTT1

ORG 0023H ;串行中断程序入口地址

RETI

;---------------主程序----------------------;

START:MOV R0,#70H ;70给R0,清渗姿哗70-7FH显示内存

MOV R7,#0FH

CLEARDISP:MOV @R0,#00H ;0给R0中的数为地址的内存中存放(70H)

INC R0

DJNZ R7,CLEARDISP

MOV 78H,#2 ;默认时间为12:00,闹册巧钟5:00

MOV 79H,#1

MOV 74H,#2 ;防止上电时数码管显示00小时

MOV 75H,#1

MOV 66H,#1 ;中断退出时66H为1时,分、时计时单元数据移入显存标志

MOV 68H,#1 ;上电默认闹钟开状态

MOV 7DH,#6 ;闹钟时十位

MOV 7CH,#3

MOV 69H,#0

MOV 7AH,#0AH ;放入"熄灭符"数据

MOV TMOD,#11H ;设T0、T1为16位定时器

MOV TL0,#0B0H ;50MS定时初值(T0计时用)

MOV TH0,#3CH

SETB EA ;总中断开放

SETB ET0 ;允许T0中断

SETB TR0 ;T0定时器开始计时

MOV R4,#14H ;1秒定时用初值(50MS×20)

START1:LCALL DISPLAY ;显示子程序

LCALL BEEP ;闹钟查询

JNB P1.7,SETTIME ;P1.7口为0时转时间调整程序

JMP START1 ;P1.7口为1时跳回START1

;-----------------------时间闹钟调整系统--------------------------;

NFLAG:MOV A,68H ;设置闹钟开关状态

CJNE A,#1,BEE68

MOV 68H,#0

JMP E6

BEE68:MOV 68H,#1

E6:MOV 66H,#8 ;中断退出66H不为1时分、时计时单元数据移入显存标志

MOV 72H,7BH

MOV 73H,7CH

MOV 74H,7DH

MOV 75H,7EH

LCALL DDL

LCALL DDL

MOV 72H,68H

MOV 73H,69H

MOV 74H,7AH

MOV 75H,7AH

LCALL DDL

LCALL DDL

MOV 66H,#1

LJMP START1

SETTIME:LCALL DDL

JB P1.7,NFLAG ;键按下时间小于1秒,设置闹钟开关状态并查看闹钟时间,不关走时,确保准确,大于1秒调时

MOV TL1,#0B0H ;T1闪烁定时初值

MOV TH1,#3CH

MOV R2,#06H ;进入调时状态,赋闪烁定时初值

MOV 66H,#8 ;调闹钟时保持走时,关闭时钟显示数据

SETB ET1 ;允许T1中断

SETB TR1 ;开启定时器T1

SET1:LCALL DISPLAY ;调用显示,防止键按下无显示

JNB P1.7,SET1 ;P1.7口为0等待键释放

MOV R5,#00H ;清设置类型闪烁标志

SETN1:INC R5 ;闹钟分调整

SET5:LCALL DISPLAY

JB P1.7,SET5

SEETN1:LCALL DDL ;有键按下大于1秒分时间连续加(0.5秒加1),小于1秒转调时状态

JB P1.7,SET6 ;键释放查询,键释放自动转调时

MOV R0,#7CH

LCALL ADD1

MOV A,R3

CLR C

CJNE A,#60H,HHN1

HHN1:JC SEETN1

LCALL CLR0

JMP SEETN1

SET6:INC R5 ;闹钟时调整

SEET6:LCALL DISPLAY

JB P1.7,SEET6

SEETNH1:LCALL DDL

JB P1.7,SETF

MOV R0,#7EH

LCALL ADD1

MOV A,R3

CLR C

CJNE A,#24H,HOUU1

HOUU1:JC SEETNH1

LCALL CLR0

JMP SEETNH1

SETF:LCALL DISPLAY

JB P1.7,SETF

LCALL DDL

JNB P1.7,SETOUT ;短按调时,长按退出

CLR ET0

CLR TR0

MOV 70H,#00H ;设定后的时间从00秒开始走时

MOV 71H,#00H

INC R5

SET3:LCALL DISPLAY

JB P1.7,SET3

SETMM:LCALL DDL

JB P1.7,SET4

MOV R0,#77H

LCALL ADD1

MOV A,R3

CLR C

CJNE A,#60H,MMH

MMH:JC SETMM

LCALL CLR0

AJMP SETMM

SET4:INC R5

SEET4:LCALL DISPLAY

JB P1.7,SEET4

SETHH:LCALL DDL

JB P1.7,SETOUT1

MOV R0,#79H

LCALL ADD1

MOV A,R3

CLR C

CJNE A,#24H,HOUU

HOUU:JC SETHH

LCALL CLR0

AJMP SETHH

SETOUT1:SETB ET0

SETB TR0 ;计时开始

SETOUT:MOV R5,#00H ;清设置类型闪烁标志

CLR TR1 ;关闭T1

CLR ET1 ;关T1中断

MOV 66H,#1

SETOUT2:LCALL DISPLAY

JNB P1.7,SETOUT2

LJMP START1

;--------------------------延时1秒钟-----------------------;

DDL:MOV 18H,#36

DDL0:MOV 17H,#239

DDL1:LCALL DISPLAY

DJNZ 17H,DDL1

DJNZ 18H,DDL0

RET

;----------------------------T0中断程序------------------------;

INTT0: PUSH ACC ;打包

PUSH PSW

CLR ET0

CLR TR0

MOV A,#0B7H

ADD A,TL0

MOV TL0,A

MOV A,#3CH

ADDC A,TH0

MOV TH0,A

SETB TR0

DJNZ R4, OUTT0 ;20次中断未到中断退出

ADDSS: MOV R4,#14H ;20次中断到(1秒)重赋初值

MOV R0,#71H ;指向秒计时单元(70-71H)

ACALL ADD1 ;调用加1程序(加1秒操作)

MOV A,R3 ;秒数据放入A(R3为2位十进制数组合)

CLR C ;清进位标志

CJNE A,#60H,ADDMM

ADDMM: JC OUTT01 ;小于60秒退出

ACALL CLR0 ;等于或大于60秒清0

MOV R0,#77H ;指向分计时单元(76H-77H)

ACALL ADD1

MOV A,R3

CLR C

CJNE A,#60H,ADDHH

ADDHH: JC OUTT0

ACALL CLR0

MOV R0,#79H ;指向小时计时单元(78H-79H)

ACALL ADD1

MOV A,R3

CLR C

CJNE A,#24H,HOUR

HOUR: JC OUTT0

ACALL CLR0

OUTT0: MOV A,66H ;查询标志

CJNE A,#1,OUTT01

MOV 72H,76H ;中断退出时将分、时计时单元数据移入对应显示单元

MOV 73H,77H

MOV 74H,78H

MOV 75H,79H

OUTT01:POP PSW ;出栈

POP ACC

SETB ET0 ;开放T0

RETI ;中断返回

;---------------------------加1程序--------------------------;

ADD1: MOV A,@R0 ;取当前计时单元数据到A

DEC R0 ;指向前一地址

SWAP A ;A中数据高四位与低四位交换

ORL A,@R0 ;前一地址中数据放入A中低四位

ADD A,#01H ;A加1操作

DA A ;十进制调整

MOV R3,A ;移入R3寄存器

ANL A,#0FH ;高四位变0

MOV @R0,A ;放回前一地址单元

MOV A,R3 ;取回R3中暂存数据

INC R0 ;指向当前地址单元

SWAP A ;A中数据高四位与低四位交换

ANL A,#0FH ;高四位变0

MOV @R0,A ;数据放入当削地址单元中

RET

CLR0: CLR C

CLR A ;清累加器

MOV @R0,A ;清当前地址单元

DEC R0 ;指向前一地址

MOV @R0,A ;前一地址单元清0

RET ;子程序返回

;-------------------------调时闪烁程序----------------------;

INTT1: PUSH ACC

PUSH PSW

MOV TL1,#0B0H

MOV TH1,#3CH

DJNZ R2,INTT1OUT ;0.3秒未到退出中断(50MS中断6次)

MOV R2,#06H ;重装0.3秒定时用初值

CPL 02H ;0.3秒定时到对闪烁标志取反

JB 02H,FLASH1 ;02H位为1时显示单元"熄灭"

MOV A,R5

CJNE A,#01H,NL

JMP NNN1

NL:CJNE A,#02H,NL1

LJMP NNN1

NL1:CJNE A,#03H,NL2

LJMP NLL

NL2:CJNE A,#04H,INTT1OUT

LJMP NLL

NLL:MOV 72H,76H

MOV 73H,77H

MOV 74H,78H

MOV 75H,79H

AJMP INTT1OUT

NNN1:MOV 72H,7BH

MOV 73H,7CH

MOV 74H,7DH

MOV 75H,7EH

INTT1OUT:POP PSW ;恢复现场

POP ACC

RETI ;中断退出

FLASH1:MOV A,R5

CJNE A,#01H,ML

LJMP MNN1

ML:CJNE A,#02H,ML1

LJMP MNN2

ML1:CJNE A,#03H,MN

LJMP MLL

MN:CJNE A,#04H,INTT1OUT

LJMP MHL

MLL:MOV 72H,7AH

MOV 73H,7AH ;显示单元(72-73H),将不显示分数据

MOV 74H,78H

MOV 75H,79H

AJMP INTT1OUT

MHL:MOV 72H,76H

MOV 73H,77H

MOV 74H,7AH ;显示单元(74-75H),小时数据将不显示

MOV 75H,7AH

AJMP INTT1OUT

MNN1:MOV 72H,7AH

MOV 73H,7AH ;显示单元(72-73H),将不显示闹钟分数据

MOV 74H,7DH

MOV 75H,7EH

AJMP INTT1OUT

MNN2:MOV 72H,7BH

MOV 73H,7CH

MOV 74H,7AH

MOV 75H,7AH ;显示单元(74-75H),闹钟小时数据将不显示

AJMP INTT1OUT

;-------------------------显示-------------------------------;

DISPLAY:MOV DPTR,#DISDATA

MOV A,70H

MOVC A,@A+DPTR

MOV P3,A

CLR P1.0

NOP

NOP

NOP

SETB P1.0

MOV A,71H

MOVC A,@A+DPTR

MOV P3,A

CLR P1.1

NOP

NOP

NOP

SETB P1.1

MOV A,72H

MOVC A,@A+DPTR

MOV P3,A

CLR P1.2

NOP

NOP

NOP

SETB P1.2

MOV A,73H

MOVC A,@A+DPTR

MOV P3,A

CLR P1.3

NOP

NOP

NOP

SETB P1.3

MOV A,74H

MOVC A,@A+DPTR

MOV P3,A

CLR P1.4

NOP

NOP

NOP

SETB P1.4

MOV A,75H

MOVC A,@A+DPTR

MOV P3,A

CLR P1.5

NOP

NOP

NOP

SETB P1.5

RET

BEEP:MOV A,68H ;查询标志

CJNE A,#1,BEERE

MOV A,78H ;查询闹钟时个位

CJNE A,7DH,BEERE

MOV A,79H ;查询闹钟时十位

CJNE A,7EH,BEERE

MOV A,76H ;查询闹钟分个位

CJNE A,7BH,BEERE

MOV A,77H ;查询闹钟分十位

CJNE A,7CH,BEERE

BB:CLR P1.6

LCALL DDL

SETB P1.6

LCALL DDL

JNB P1.7,BEERR

BEERE:RET

BEERR:SETB P1.6

MOV 68H,#0

LCALL DISPLAY

JNB P1.7,BEERR

JMP BEERE

DISDATA:DB 0C0H,0F9H,64H,70H,59H,52H,42H,0F8H,40H,50H,0FFH ;0123456789空白

END

阅读全文

与如何看懂dch程序流程图相关的资料

热点内容
为什么能收到对方微信空白信息 浏览:294
工厂里调度员和技术员哪个好 浏览:468
专利代理人和期刊编辑哪个好 浏览:321
盛泰手机哪些产品 浏览:320
电脑程序编程怎么学 浏览:785
广联达行业数据怎么用不了 浏览:67
哪个组织最关注货币和技术援助 浏览:161
oem厂家工业化工产品有哪些 浏览:551
牛元牌瓷砖胶韶关总代理店在哪里 浏览:509
市场的大红酸枝有多少陷阱 浏览:537
华安证券除了月月红还有哪些产品 浏览:517
腾讯文档小程序如何查以前时间 浏览:527
全权代理买房怎么弄 浏览:745
怎么在电商上买农产品 浏览:865
怎么做数据路径 浏览:893
检查肚子的程序是什么 浏览:645
2010小件滞销产品都有哪些 浏览:631
ebay怎么批量上传产品 浏览:639
博士伦产品批号怎么理解 浏览:310
如何开机时减少后台程序 浏览:484