導航:首頁 > 軟體知識 > 如何看懂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程序流程圖相關的資料

熱點內容
怎麼在電商上買農產品 瀏覽:865
怎麼做數據路徑 瀏覽:893
檢查肚子的程序是什麼 瀏覽:645
2010小件滯銷產品都有哪些 瀏覽:630
ebay怎麼批量上傳產品 瀏覽:638
博士倫產品批號怎麼理解 瀏覽:309
如何開機時減少後台程序 瀏覽:484
分子實驗技術英語怎麼說 瀏覽:23
簡易程序變為普通程序多久能結案 瀏覽:137
適合高中生的代理創業門路干什麼 瀏覽:29
淘寶產品如何產生聚焦 瀏覽:129
專業的股票信息律師在哪裡找 瀏覽:800
做網站用什麼程序好 瀏覽:151
天安門的基本信息有哪些 瀏覽:159
東北總部基地到北市場怎麼走 瀏覽:253
大數據的內容包括哪些 瀏覽:723
愛游戲業務信息服務費是什麼意思 瀏覽:482
潛水進膠產品如何解決縮水問題 瀏覽:982
揚州專業技術開發有哪些 瀏覽:109
雲南哪個技校技術硬 瀏覽:762