導航:首頁 > 操作系統 > 上海九圖控制技術有限公司單片機

上海九圖控制技術有限公司單片機

發布時間:2022-05-17 04:09:28

A. 控制除了單片機喝PLC之外還有什麼控制,就算是淘汰了的也行

單片機和PLC是由普通的繼電器控制而演變而來的!!單片機和PLC是最常用的,在早期人們用的是繼電器,根據不同繼電器又分為很多種,繼電器中最常見的東西時交流接觸器,這是根據一個電磁感應原理而作的控制器,比較常見!
根據不同,還有機械的齒輪控制,氣動控制,液壓控制等等,這又屬於機械類的問題了,這些都是根據物理原理而作的控制方式。
希望我的回答你能滿意!

B. AT89C52單片機的技術參數求知道的人給下

AT89C52是一個低電壓,高性能CMOS 8位單片機,片內含8k bytes的可反復擦寫的Flash只讀程序存儲器和256 bytes的隨機存取數據存儲器(RAM),器件採用ATMEL公司的高密度、非易失性存儲技術生產,兼容標准MCS-51指令系統,片內置通用8位中央處理器和Flash存儲單元,AT89C52單片機在電子行業中有著廣泛的應用。
編輯本段主要功能特性
1、兼容MCS51指令系統 2、8k可反復擦寫(大於1000次)Flash ROM; 3、32個雙向I/O口; 4、256x8bit內部RAM; 5、3個16位可編程定時/計數器中斷; 6、時鍾頻率0-24MHz; 7、2個串列中斷,可編程UART串列通道; 8、2個外部中斷源,共8個中斷源; 9、2個讀寫中斷口線,3級加密位; 10、低功耗空閑和掉電模式,軟體設置睡眠和喚醒功能; 11、有PDIP、PQFP、TQFP及PLCC等幾種封裝形式,以適應不同產品的需求。
編輯本段引腳功能及管腳電壓
AT89C52為8 位通用微處理器,採用工業標 PDIP封裝的AT89C52引腳圖
準的C51內核,在內部功能及管腳排布上與通用的8xc52 相同,其主要用於會聚調整時的功能控制。功能包括對會聚主IC 內部寄存器、數據RAM及外部介面等功能部件的初始化,會聚調整控制,會聚測試圖控制,紅外遙控信號IR的接收解碼及與主板CPU通信等。主要管腳有:XTAL1(19 腳)和XTAL2(18 腳)為振盪器輸入輸出埠,外接12MHz 晶振。RST/Vpd(9 腳)為復位輸入埠,外接電阻電容組成的復位電路。VCC(40 腳)和VSS(20 腳)為供電埠,分別接+5V電源的正負端。P0~P3 為可編程通用I/O 腳,其功能用途由軟體定義,在本設計中,P0 埠(32~39 腳)被定義為N1 功能控制埠,分別與N1的相應功能管腳相連接,13 腳定義為IR輸入端,10 腳和11腳定義為I2C匯流排控制埠,分別連接N1的SDAS(18腳)和SCLS(19腳)埠,12 腳、27 腳及28 腳定義為握手信號功能埠,連接主板CPU 的相應功能端,用於當前制式的檢測及會聚調整狀態進入的控制功能。
P0 口
P0 口是一組8 位漏極開路型雙向I/O 口, 也即地址/數據匯流排復用口。作為輸出口用時,每位能吸收電流的 方式驅動8 個TTL邏輯門電路,對埠P0 寫「1」時,可作為高阻抗輸入端用。 在訪問外部數據存儲器或程序存儲器時,這組口線分時轉換地址(低8 位)和數據匯流排復用,在訪問期間激活內部上拉電阻。 在Flash 編程時,P0 口接收指令位元組,而在程序校驗時,輸出指令位元組,校驗時,要求外接上拉電阻。
P1 口
P1 是一個帶內部上拉電阻的8 位雙向I/O 口, P1 的輸出緩沖級可驅動(吸收或輸出電流)4 個TTL 邏輯 門電路。對埠寫「1」,通過內部的上拉電阻把埠拉到高電平,此時可作輸入口。作輸入口使用時,因為內部存在上拉 電阻,某個引腳被外部信號拉低時會輸出一個電流(IIL)。 與AT89C51 不同之處是,P1.0 和P1.1 還可分別作為定時/計數器2 的外部計數輸入(P1.0/T2)和輸入(P1.1/T2EX), 參見表1。 Flash 編程和程序校驗期間,P1 接收低8 位地址。 表.P1.0和P1.1的第二功能 引腳號 功能特性
P1.0 T2,時鍾輸出
P1.1 T2EX(定時/計數器2)

P2 口
P2 是一個帶有內部上拉電阻的8 位雙向I/O 口,P2 的輸出緩沖級可驅動(吸收或輸出電流)4 個TTL 邏輯 門電路。對埠P2 寫「1」,通過內部的上拉電阻把埠拉到高電平,此時可作輸入口,作輸入口使用時,因為內部存在上拉電阻,某個引腳被外部信號拉低時會輸出一個電流(IIL)。 在訪問外部程序存儲器或16 位地址的外部數據存儲器(例如執行MOVX @DPTR 指令)時,P2 口送出高8 位地址數據。在訪問8 位地址的外部數據存儲器(如執行MOVX @RI 指令)時,P2 口輸出P2 鎖存器的內容。 Flash 編程或校驗時,P2亦接收高位地址和一些控制信號。
P3 口
P3 口是一組帶有內部上拉電阻的8 位雙向I/O 口。P3 口輸出緩沖級可驅動(吸收或輸出電流)4 個TTL 邏 輯門電路。對P3 口寫入「1」時,它們被內部上拉電阻拉高並可作為輸入埠。此時,被外部拉低的P3 口將用上拉電阻輸出電流(IIL)。 P3 口除了作為一般的I/O 口線外,更重要的用途是它的第二功能 P3 口還接收一些用於Flash 閃速存儲器編程和程序校驗的控制信號。
RST
復位輸入。當振盪器工作時,RST引腳出現兩個機器周期以上高電平將使單片機復位。
ALE/PROG
當訪問外部程序存儲器或數據存儲器時,ALE(地址鎖存允許)輸出脈沖用於鎖存地址的低8 位字 節。一般情況下,ALE 仍以時鍾振盪頻率的1/6 輸出固定的脈沖信號,因此它可對外輸出時鍾或用於定時目的。要注意的是:每當訪問外部數據存儲器時將跳過一個ALE 脈沖。 對Flash 存儲器編程期間,該引腳還用於輸入編程脈沖(PROG)。 如有必要,可通過對特殊功能寄存器(SFR)區中的8EH 單元的D0 位置位,可禁止ALE 操作。該位置位後,只有一條 MOVX 和MOVC指令才能將ALE 激活。此外,該引腳會被微弱拉高,單片機執行外部程序時,應設置ALE 禁止位無效。
PSEN
程序儲存允許(PSEN)輸出是外部程序存儲器的讀選通信號,當AT89C52 由外部程序存儲器取指令(或數 據)時,每個機器周期兩次PSEN 有效,即輸出兩個脈沖。在此期間,當訪問外部數據存儲器,將跳過兩次PSEN信號。
EA/VPP
外部訪問允許。欲使CPU 僅訪問外部程序存儲器(地址為0000H—FFFFH),EA 端必須保持低電平(接 地)。需注意的是:如果加密位LB1 被編程,復位時內部會鎖存EA端狀態。 如EA端為高電平(接Vcc端),CPU 則執行內部程序存儲器中的指令。 Flash 存儲器編程時,該引腳加上+12V 的編程允許電源Vpp,當然這必須是該器件是使用12V 編程電壓Vpp。
XTAL1
振盪器反相放大器的及內部時鍾發生器的輸入端。
XTAL2
振盪器反相放大器的輸出端。
編輯本段特殊功能寄存器
在AT89C52 片內存儲器中,80H-FFH 共128 個單元為特殊功能寄存器(SFE),SFR 的地址空間映象如表2 所示。 並非所有的地址都被定義,從80H—FFH 共128 個位元組只有一部分被定義,還有相當一部分沒有定義。對沒有定義的 單元讀寫將是無效的,讀出的數值將不確定,而寫入的數據也將丟失。 不應將數據「1」寫入未定義的單元,由於這些單元在將來的產品中可能賦予新的功能,在這種情況下,復位後這些單 元數值總是「0」。 AT89C52除了與AT89C51所有的定時/計數器0 和定時/計數器1 外,還增加了一個定時/計數器2。定時/計數器2 的控 制和狀態位位於T2CON(參見表3)T2MOD(參見表4),寄存器對(RCAO2H、RCAP2L)是定時器2 在16 位捕獲方式或16 位 自動重裝載方式下的捕獲/自動重裝載寄存器。
編輯本段數據存儲器
AT89C52 有256 個位元組的內部RAM,80H-FFH 高128 個位元組與特殊功能寄存器(SFR)地址是重疊的,也就是高128 位元組的RAM 和特殊功能寄存器的地址是相同的,但物理上它們是分開的。 當一條指令訪問7FH 以上的內部地址單元時,指令中使用的定址方式是不同的,也即定址方式決定是訪問高128 位元組 RAM 還是訪問特殊功能寄存器。如果指令是直接定址方式則為訪問特殊功能寄存器。 例如,下面的直接定址指令訪問特殊功能寄存器0A0H(即P2 口)地址單元。 MOV 0A0H,#data 間接定址指令訪問高128 位元組RAM,例如,下面的間接定址指令中,R0 的內容為0A0H,則訪問數據位元組地址為0A0H, 而不是P2 口(0A0H)。 MOV @R0,#data 堆棧操作也是間接定址方式,所以,高128 位數據RAM 亦可作為堆棧區使用。 ·定時器0和定時器1: AT89C52的定時器0和定時器1 的工作方式與AT89C51 相同。
編輯本段片上資源
定時器2
基本特性: 定時器2 是一個16 位定時/計數器。它既可當定時器使用,也可作為外部事件計數器使用,其工作方式由特殊功能寄 存器T2CON(如表3)的C/T2 位選擇。定時器2 有三種工作方式:捕獲方式,自動重裝載(向上或向下計數)方式和波 特率發生器方式,工作方式由T2CON 的控制位來選擇。 定時器2 由兩個8 位寄存器TH2 和TL2 組成,在定時器工作方式中,每個機器周期TL2 寄存器的值加1,由於一個機 器周期由12 個振盪時鍾構成,因此,計數速率為振盪頻率的1/12。 在計數工作方式時,當T2 引腳上外部輸入信號產生由1 至0 的下降沿時,寄存器的值加1,在這種工作方式下,每個 機器周期的5SP2 期間,對外部輸入進行采樣。若在第一個機器周期中採到的值為1,而在下一個機器周期中採到的值為0, 則在緊跟著的下一個周期的S3P1 期間寄存器加1。由於識別1 至0 的跳變需要2 個機器周期(24 個振盪周期),因此,最 高計數速率為振盪頻率的1/24。為確保采樣的正確性,要求輸入的電平在變化前至少保持一個完整周期的時間,以保證輸 入信號至少被采樣一次。 捕獲方式: 在捕獲方式下,通過T2CON 控制位EXEN2 來選擇兩種方式。如果EXEN2=0,定時器2 是一個16 位定時器或計數器, 計數溢出時,對T2CON 的溢出標志TF2 置位,同時激活中斷。如果EXEN2=1,定時器2 完成相同的操作,而當T2EX 引 腳外部輸入信號發生1 至0 負跳變時,也出現TH2 和TL2 中的值分別被捕獲到RCAP2H 和RCAP2L 中。另外,T2EX 引 腳信號的跳變使得T2CON 中的EXF2 置位,與TF2 相仿,EXF2 也會激活中斷。捕獲方式如圖4 所示。 自動重裝載(向上或向下計數器)方式: 當定時器2工作於16位自動重裝載方式時,能對其編程為向上或向下計數方式,這個功能可通過特殊功能寄存器T2CON (見表5)的DCEN 位(允許向下計數)來選擇的。復位時,DCEN 位置「0」,定時器2 默認設置為向上計數。當DCEN 置位時,定時器2 既可向上計數也可向下計數,這取決於T2EX 引腳的值,參見圖5,當DCEN=0 時,定時器2 自動設置 為向上計數,在這種方式下,T2CON 中的EXEN2 控制位有兩種選擇,若EXEN2=0,定時器2 為向上計數至0FFFFH 溢 出,置位TF2 激活中斷,同時把16 位計數寄存器RCAP2H 和RCAP2L重裝載,RCAP2H 和RCAP2L 的值可由軟體預置。 若EXEN2=1,定時器2 的16 位重裝載由溢出或外部輸入端T2EX 從1 至0 的下降沿觸發。這個脈沖使EXF2 置位,如果 中斷允許,同樣產生中斷。 定時器2 的中斷入口地址是:002BH ——0032H 。 當DCEN=1 時,允許定時器2 向上或向下計數,如圖6 所示。這種方式下,T2EX 引腳控制計數器方向。T2EX 引腳為邏 輯「1」時,定時器向上計數,當計數0FFFFH 向上溢出時,置位TF2,同時把16 位計數寄存器RCAP2H 和RCAP2L 重裝 載到TH2 和TL2 中。 T2EX 引腳為邏輯「0」時,定時器2 向下計數,當TH2 和TL2 中的數值等於RCAP2H 和RCAP2L 中的值時,計數溢出,置位TF2,同時將0FFFFH 數值重新裝入定時寄存器中。 當定時/計數器2 向上溢出或向下溢出時,置位EXF2 位。 波特率發生器: 當T2CON(表3)中的TCLK 和RCLK 置位時,定時/計數器2 作為波特率發生器使用。如果定時/計數器2 作為發送器或 接收器,其發送和接收的波特率可以是不同的,定時器1 用於其它功能,如圖7 所示。若RCLK 和TCLK 置位,則定時器2 工作於波特率發生器方式。 波特率發生器的方式與自動重裝載方式相仿,在此方式下,TH2 翻轉使定時器2 的寄存器用RCAP2H 和RCAP2L 中的16 位數值重新裝載,該數值由軟體設置。 在方式1 和方式3 中,波特率由定時器2 的溢出速率根據下式確定: 方式1和3的波特率=定時器的溢出率/16 定時器既能工作於定時方式也能工作於計數方式,在大多數的應用中,是工作在定時方式(C/T2=0)。定時器2 作為波 特率發生器時,與作為定時器的操作是不同的,通常作為定時器時,在每個機器周期(1/12 振盪頻率)寄存器的值加1, 而作為波特率發生器使用時,在每個狀態時間(1/2 振盪頻率)寄存器的值加1。波特率的計算公式如下: 方式1和3的波特率=振盪頻率/{32*[65536-(RCP2H,RCP2L)]} 式中(RCAP2H,RCAP2L)是RCAP2H 和RCAP2L中的16 位無符號數。 定時器2 作為波特率發生器使用的電路如圖7 所示。T2CON 中的RCLK 或TCLK=1 時,波特率工作方式才有效。在 波特率發生器工作方式中,TH2 翻轉不能使TF2 置位,故而不產生中斷。但若EXEN2 置位,且T2EX 端產生由1 至0 的 負跳變,則會使EXF2 置位,此時並不能將(RCAP2H,RCAP2L)的內容重新裝入TH2 和TL2 中。所以,當定時器2 作 為波特率發生器使用時,T2EX 可作為附加的外部中斷源來使用。需要注意的是,當定時器2 工作於波特率器時,作為定 時器運行(TR2=1)時,並不能訪問TH2 和TL2。因為此時每個狀態時間定時器都會加1,對其讀寫將得到一個不確定的 數值。 然而,對RCAP2 則可讀而不可寫,因為寫入操作將是重新裝載,寫入操作可能令寫和/或重裝載出錯。在訪問定時器2 或RCAP2 寄存器之前,應將定時器關閉(清除TR2)。 可編程時鍾輸出: 定時器2 可通過編程從P1.0 輸出一個占空比為50%的時鍾信號,如圖8 所示。P1.0 引腳除了是一個標準的I/O 口外, 還可以通過編程使其作為定時/計數器2 的外部時鍾輸入和輸出占空比50%的時鍾脈沖。當時鍾振盪頻率為16MHz 時,輸 出時鍾頻率范圍為61Hz—4MHz。 當設置定時/計數器2 為時鍾發生器時,C/T2(T2CON .1)=0,T2OE (T2MOD.1) =1,必須由TR2(T2CON.2)啟 動或停止定時器。時鍾輸出頻率取決於振盪頻率和定時器2 捕獲寄存器(RCAP2H,RCAP2L)的重新裝載值,公式如下: 輸出時鍾頻率=振盪器頻率/{4*[65536-(RCP2H,RCP2L)]} 在時鍾輸出方式下,定時器2 的翻轉不會產生中斷,這個特性與作為波特率發生器使用時相仿。定時器2 作為波特率 發生器使用時,還可作為時鍾發生器使用,但需要注意的是波特率和時鍾輸出頻率不能分開確定,這是因為它們同使用 RCAP2L和RCAP2L。
UART串口
AT89C52的UART 工作方式與AT89C51 工作方式相同。
時鍾振盪器
AT89C52 中有一個用於構成內部振盪器的高增益反相放大器,引腳XTAL1 和XTAL2 分別是該放大器的輸入端和輸出端。 這個放大器與作為反饋元件的片外石英晶體或陶瓷諧振器一起構成自激振盪器,振盪電路參見圖10。 外接石英晶體(或陶瓷諧振器)及電容C1、C2 接在放大器的反饋迴路中構成並聯振盪電路。對外接電容C1、C2 雖 然沒有十分嚴格的要求,但電容容量的大小會輕微影響振盪頻率的高低、振盪器工作的穩定性、起振的難易程序及溫度穩 定性,如果使用石英晶體,我們推薦電容使用30pF±10pF,而如使用陶瓷諧振器建議選擇40pF±10pF。 用戶也可以採用外部時鍾。採用外部時鍾的電路如圖10 右圖所示。這種情況下,外部時鍾脈沖接到XTAL1 端,即內部 時鍾發生器的輸入端,XTAL2 則懸空。 由於外部時鍾信號是通過一個2 分頻觸發器後作為內部時鍾信號的,所以對外部時鍾信號的占空比沒有特殊要求,但 最小高電平持續時間和最大的低電平持續時間應符合產品技術條件的要求。
編輯本段中斷
AT89C52 共有6 個中斷向量:兩個外中斷(INT0 和INT1),3 個定時器中斷(定時器0、1、2)和串列口中斷。所有 這些中斷源如圖9 所示。 這些中斷源可通過分別設置專用寄存器IE 的置位或清0 來控制每一個中斷的允許或禁止。IE 也有一個總禁止位EA, 它能控制所有中斷的允許或禁止。 注意表5 中的IE.6 為保留位,在AT89C51 中IE.5 也是保留位。程序員不應將「1」寫入這些位,它們是將來AT89 系 列產品作為擴展用的。 定時器2 的中斷是由T2CON 中的TF2 和EXF2 邏輯或產生的,當轉向中斷服務程序時,這些標志位不能被硬體清除, 事實上,服務程序需確定是TF2 或EXF2 產生中斷,而由軟體清除中斷標志位。 定時器0 和定時器1 的標志位TF0 和TF1 在定時器溢出那個機器周期的S5P2 狀態置位,而會在下一個機器周期才查 詢到該中斷標志。然而,定時器2 的標志位TF2 在定時器溢出的那個機器周期的S2P2 狀態置位,並在同一個機器周期內 查詢到該標志。
編輯本段低功耗模式
空閑節電模式
在空閑工作模式狀態, CPU 自身處於睡眠狀態而所有片內的外設仍保持激活狀態,這種方式由軟體產生。此時,同 時將片內RAM 和所有特殊功能寄存器的內容凍結。空閑模式可由任何允許的中斷請求或硬體復位終止。 由硬體復位終止空閑狀態只需兩個機器周期有效復位信號,在此狀態下,片內硬體禁止訪問內部RAM,但可以訪問端 口引腳,當用復位終止空閑方式時,為避免可能對埠產生意外寫入,激活空閑模式的那條指令後一條指令不應是一條對 埠或外部存儲器的寫入指令。
掉電模式
在掉電模式下,振盪器停止工作,進入掉電模式的指令是最後一條被執行的指令,片內RAM 和特殊功能寄存器的內 容在終止掉電模式前被凍結。退出掉電模式的唯一方法是硬體復位,復位後將重新定義全部特殊功能寄存器,但不改變RAM 中的內容,在Vcc恢復到正常工作電平前,復位應無效,且必須保持一定時間以使振盪器重啟動並穩定工作。
編輯本段編程和加密
Flash存儲器的編程
AT89C52單片機內部有8k位元組的Flash PEROM,這個Flash 存儲陣列出廠時已處於擦除狀態(即所有存儲單元的內容 均為FFH),用戶隨時可對其進行編程。編程介面可接收高電壓(+12V)或低電壓(Vcc)的允許編程信號。低電壓編程模 式適合於用戶在線編程系統,而高電壓編程模式可與通用EPROM 編程器兼容。 AT89C52 單片機中,有些屬於低電壓編程方式,而有些則是高電壓編程方式,用戶可從晶元上的型號和讀取晶元內的 簽名位元組獲得該信息。 AT89C52 的程序存儲器陣列是採用位元組寫入方式編程的,每次寫入一個位元組,要對整個晶元內的PEROM 程序存儲器 寫入一個非空位元組,必須使用片擦除的方式將整個存儲器的內容清除。
編程方法
編程前,須按表9 和圖11 所示設置好地址、數據及控制信號, AT89C52 編程方法如下: 1. 在地址線上加上要編程單元的地址信號。 2. 在數據線上加上要寫入的數據位元組。 3. 激活相應的控制信號。 4. 在高電壓編程方式時,將EA/Vpp 端加上+12V 編程電壓。 5. 每對Flash 存儲陣列寫入一個位元組或每寫入一個程序加密位,加上一個ALE/PROG 編程脈沖。每個位元組寫入周期 是自身定時的,通常約為1.5ms。重復1—5 步驟,改變編程單元的地址和寫入的數據,直到全部文件編程結束。
程序存儲器的加密
AT89C52 有3 個程序加密位,可對晶元上的3 個加密位LB1、LB2、LB3 進行編程(P)或不編程(U)來得到。 當加密位LB1 被編程時,在復位期間,EA 端的邏輯電平被采樣並鎖存,如果單片機上電後一直沒有復位,則鎖存起的 初始值是一個隨機數,且這個隨機數會一直保存到真正復位為止。為使單片機能正常工作,被鎖存的EA 電平值必須與該引 腳當前的邏輯電平一致。此外,加密位只能通過整片擦除的方法清除。
數據查詢
AT89C52 單片機用Data Palling 表示一個寫周期結束為特徵,在一個寫周期中,如需讀取最後寫入的一個位元組,則讀出的數據的最高位(P0.7)是原來寫入位元組最高位的反碼。寫周期完成後,所輸出的數據是有效的數據,即可進入下一個位元組的寫周期,寫周期開始後,Data Palling 可能隨時有效。 Ready/Busy:位元組編程的進度可通過「RDY/BSY 輸出信號監測,編程期間,ALE 變為高電平「H」後,P3.4(RDY/BSY)端電平被拉低,表示正在編程狀態(忙狀態)。編程完成後,P3.4 變為高電平表示准備就緒狀態。 程序校驗:如果加密位LB1、LB2 沒有進行編程,則代碼數據可通過地址和數據線讀回原編寫的數據,採用如圖12的電路。加密位不可直接校驗,加密位的校驗可通過對存儲器的校驗和寫入狀態來驗證。 晶元擦除:利用控制信號的正確組合(表6)並保持ALE/PROG 引腳10mS 的低電平脈沖寬度即可將PEROM 陣列(4k位元組)和三個加密位整片擦除,代碼陣列在片擦除操作中將任何非空單元寫入「1」,這步驟需再編程之前進行。 讀片內簽名位元組:AT89C52 單片機內有3 個簽名位元組,地址為030H、031H 和032H。用於聲明該器件的廠商、型號和編程電壓。讀AT89C52 簽名位元組需將P3.6 和P3.7 置邏輯低電平,讀簽名位元組的過程和單元030H、031H 及032H 的正常校驗相仿,只返回值意義如下: (030H)=1EH 聲明產品由ATMEL公司製造。 (031H)=52H 聲明為AT89C52 單片機。 (032H)=FFH 聲明為12V 編程電壓。 (032H)=05H 聲明為5V 編程電壓。

C. 如何用單片機控制繼電器

不要用三極體放大,接上拉電阻即可。

做實驗直接選用線圈電壓為5V的繼電器就可以。單片機輸出引腳與繼電器之間要接一個三極體,單片機I/O直接繼電器電流不夠。

單片機是一個弱電器件,一般情況下它們大都工作在5V甚至更低。驅動電流在mA級以下。而要把它用於一些大功率場合,比如控制電動機,顯然是不行的。

在這里,繼電器驅動含有兩個意思:一是對繼電器進行驅動,因為繼電器本身對於單片機來說就是一個功率器件。


(3)上海九圖控制技術有限公司單片機擴展閱讀:

現在,單片機的某一個需要控制這個繼電器電路的輸出引腳就是一隻"手",當單片機的這個引腳輸出低電平的時候,就像"手"在打開三極體"水龍頭",水就從上往下流,繼電器"水輪機"就開始轉起來了。

反之,如果是輸出高電平,"手"就開始關"水龍頭",繼電器"水輪機"因為沒有水流下來,就會停止。

這就是三極體的開關作用。

簡單的理解和記憶就是:三極體是一個開關器件,其實真的可以將它看成是一個開關,只不過它不是用手來控制,而是用電壓(電流)來控制的,因此,三極體有些時候也被稱做電子開關(與機械開關相區別)。

D. 單片機控制1602顯示 研究方法及技術路線 怎麼寫

這是一個時鍾顯示程序,裡面有1602的操作程序,比較完整絕對能運行
RS=P2.0 RW=P2.1 E=P2.2 DB0---DB7接P0口

/*******************************************************************/
#include<reg51.h>
#include<intrins.h>

#define uchar unsigned char
#define uint unsigned int

sbit LCD_RS = P2^0;
sbit LCD_RW = P2^1;
sbit LCD_EN = P2^2;
sbit LCD_LED = P2^6;

bit flag=1,hour=0,min=0,sec=0;
bit year=0,month=0,day=0,week=0;
bit alarm_flag=0;
uchar timecount=0,count=0;

uchar str1[]=" - - Week: ";
uchar str2[]="Time: ";
uchar str3[]="Alarm: ";

uchar init [] ={0x00,0x00,0x00,0x00,0x00,0x00,0x00}; //
uchar init1[] ={0x00,0x00};
uchar init2[] ={0x00,0x59,0x23,0x01,0x05,0x01,0x06}; //
//秒, 分, 時, 日, 月,星期,年
uchar bj_time[] ={0x00,0x00,0x00};
//秒, 分, 時
uchar code mytab[8] = {0x01,0x1b,0x1d,0x19,0x1d,0x1b,0x01,0x00};//小喇叭

#define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};
void Set_place(uchar row,uchar col);
void Play_nowtime();
void key_set(uchar num,uchar row,uchar col );
void alarm_time();
void Play_alarmtime();
void Time_compare();
/******************************************************************/

/******************************************************************/
void delay1(int ms)
{
unsigned char y;
while(ms--)
{
for(y = 0; y<250; y++)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}

/******************************************************************/
/* */
/*檢查LCD忙狀態 */
/*lcd_busy為1時,忙,等待。lcd-busy為0時,閑,可寫指令與數據。 */
/* */
/******************************************************************/

bit lcd_busy()
{
bit result;
LCD_RS = 0;
LCD_RW = 1;
LCD_EN = 1;
delayNOP();
result = (bit)(P0&0x80);
LCD_EN = 0;
return(result);
}

/*********************************************************/
/* */
/*寫指令數據到LCD */
/*RS=L,RW=L,E=高脈沖,D0-D7=指令碼。 */
/* */
/*********************************************************/

void lcd_wcmd(uchar cmd)
{
while(lcd_busy());
LCD_RS = 0;
LCD_RW = 0;
LCD_EN = 0;
_nop_();
_nop_();
P0 = cmd;
delayNOP();
LCD_EN = 1;
delayNOP();
LCD_EN = 0;
}

/*********************************************************/
/* */
/*寫顯示數據到LCD */
/*RS=H,RW=L,E=高脈沖,D0-D7=數據。 */
/* */
/*********************************************************/
void lcd_wdat(uchar dat)
{
while(lcd_busy());
LCD_RS = 1;
LCD_RW = 0;
LCD_EN = 0;
P0 = dat;
delayNOP();
LCD_EN = 1;
delayNOP();
LCD_EN = 0;
}

/*********************************************************/
/* */
/* LCD初始化設定 */
/* */
/*********************************************************/

void init_lcd()
{
delay1(15);
lcd_wcmd(0x01); //清除LCD的顯示內容

lcd_wcmd(0x38); //16*2顯示,5*7點陣,8位數據
delay1(5);
lcd_wcmd(0x38);
delay1(5);
lcd_wcmd(0x38);
delay1(5);

lcd_wcmd(0x0c); //顯示開,關游標
delay1(5);
lcd_wcmd(0x06); //移動游標
delay1(5);
lcd_wcmd(0x01); //清除LCD的顯示內容
delay1(5);
}

/*********************************************************/
//
/*********************************************************/
void delay()
{
uchar j;
for(j=250;j>0;j--);
}

/*********************************************************/
/* */
/* 寫字元串函數 */
/* */
/*********************************************************/
void write_str(uchar addr,uchar *p)
{
uchar i=0;
lcd_wcmd(addr);
while(p[i]!='\0')
{
lcd_wdat(p[i]);
i++;
}
}

/*********************************************************/
/* */
/* 設定顯示位置 */
/* */
/*********************************************************/
void write_position(uchar row,uchar col)
{
uchar place;
if(row==1)
{
place=0x80+col-1;
lcd_wcmd(place);
}
else
{
place=0xc0+col-1;
lcd_wcmd(place);
}
}

/*********************************************************/
/* */
/*自定義字元寫入CGRAM */
/* */
/*********************************************************/
void writetab()
{
unsigned char i;
lcd_wcmd(0x40); //寫CGRAM
for (i = 0; i< 8; i++)
lcd_wdat(mytab[i]);
}

/**********************************************************/
//
/**********************************************************/
void write_byte(uchar inbyte)
{
uchar i;
for(i=0;i<8;i++)
{
sclk=0; //寫的時候低電平改變數據
if(inbyte&0x01)
io=1;
else
io=0;
sclk=1; //寫的時候高電平,把數據寫入ds1302
_nop_();
inbyte=inbyte>>1;
}
}

/**********************************************************/

/**********************************************************/
uchar read_byte() //sclk的下跳沿讀數據
{
uchar i,temp=0;
io=1; //設置為輸入口
for(i=0;i<7;i++)
{
sclk=0;
if(io==1)
temp=temp|0x80;
else
temp=temp&0x7f;
sclk=1; //產生下跳沿

temp=temp>>1;
}
return (temp);
}

/**********************************************************/
// 往ds1302的某個地址寫入數據
/**********************************************************/
void write_ds1302(uchar cmd,uchar indata)
{
sclk=0;
reset=1;
write_byte(cmd);
write_byte(indata);

sclk=0;
reset=0;
}

/**********************************************************/
// 讀ds1302某地址的的數據
/**********************************************************/
uchar read_ds1302(uchar addr)
{
uchar backdata;
sclk=0;
reset=1;

write_byte(addr); //先寫地址
backdata=read_byte(); //然後讀數據

sclk=0;
reset=0;
return (backdata);
}

/**********************************************************/
// 設置初始時間
/**********************************************************/
void set_ds1302(uchar addr,uchar *p,uchar n) //寫入n個數據
{
write_ds1302(0x8e,0x00); //寫控制字,允許寫操作
for(;n>0;n--)
{
write_ds1302(addr,*p);
p++;
addr=addr+2;
}
write_ds1302(0x8e,0x80); //防寫,不允許寫
}

/**********************************************************/
// 讀取當前時間
/**********************************************************/
void read_nowtime(uchar addr,uchar *p,uchar n)
{
for(;n>0;n--)
{
*p=read_ds1302(addr);
p++;
addr=addr+2;
}
}

/**********************************************************/
// 初始化DS1302
/**********************************************************/
void init_ds1302()
{
reset=0;
sclk=0;
write_ds1302(0x80,0x00);
write_ds1302(0x90,0xa6); //一個二極體+4K電阻充電
write_ds1302(0x8e,0x80); //防寫控制字,禁止寫
}

/**********************************************************/
/* */
/* 蜂鳴器響一聲 */
/* */
/**********************************************************/
void beep()
{
unsigned char y;
for (y=0;y<100;y++)
{
delay();
BEEP=!BEEP; //BEEP取反
}
BEEP=1; //關閉蜂鳴器
delay1(50);
}

/**********************************************************/
/* */
/* :閃動函數 */
/* */
/**********************************************************/
void flash()
{
if(flag)
{
write_position(2,9);
lcd_wdat(':');
write_position(2,12);
lcd_wdat(':');
}
else
{
write_position(2,9);
lcd_wdat(0x20);
write_position(2,12);
lcd_wdat(0x20);
}
}
/**********************************************************/
// 主函數
/**********************************************************/
void main()
{

LCD_LED=0;
P1=0xff;
TMOD=0x01;
TH0=0x4c; //50ms定時
TL0=0x00;
EA=1;
ET0=1;
TR0=1;
init_lcd(); //初始化LCD
write_str(0x80,str1); //液晶顯示提示信息
write_str(0xc0,str2); //液晶顯示提示信息
init_ds1302(); //初始化ds1302

writetab(); //自定義字元寫入CGRAM
// delay1(5);
// write_position(2,16);
// lcd_wdat(0x00); //顯示自定義字元小喇叭

while(1)
{
//---------------------------------------------------------
if(!K1)
{
if(!K2)
{
set_ds1302(0x80,init2,7); //設置初始時間,日期,年月
beep();
}

if(!K3)
{
write_str(0xc0,str3); //顯示報警信息
if(alarm_flag) //alarm_flag=1,開定時
{
write_position(2,16);
lcd_wdat(0x00); //顯示自定義字元小喇叭
}
Play_alarmtime(); //查看報警時間
beep();
delay1(700);
write_str(0xc0,str2); //顯示時間信息
if(alarm_flag) //alarm_flag=1,開定時
{
write_position(2,16);
lcd_wdat(0x00); //顯示自定義字元小喇叭
}
}

if(!K4)
{
alarm_time(); //K4鍵設定報警時間
if(alarm_flag) //alarm_flag=1,開定時
{
write_position(2,16);
lcd_wdat(0x00); //顯示自定義字元小喇叭
}
}
}
//---------------------------------------------------------
if(!K4)
{
beep();
alarm_flag=~alarm_flag;
if(alarm_flag) //alarm_flag=1,開定時
{
write_position(2,16);
lcd_wdat(0x00); //顯示自定義字元小喇叭
}
else
{
write_position(2,16);
lcd_wdat(0x20); //顯示自定義字元小喇叭
}
}

//---------------------------------------------------------
if(!K3&flag) //開始設定時間
{
write_ds1302(0x8e,0x00); //防寫控制字,允許寫
write_ds1302(0x80,0x80); //停止時鍾運行
write_ds1302(0x8e,0x80); //防寫控制字,禁止寫
beep();
year=1;
count=((init[6]&0xf0)>>4)*10+(init[6]&0x0f); //讀當前年數據
}
while(year) //設定年
{
key_set(99,1,1);

if(!K3)
{
Set_W1302(0x8c);
Set_place(1,1);
year=0;
month=1;
count=((init[4]&0xf0)>>4)*10+(init[4]&0x0f); //讀當前月數據
}
}

while(month) //設定月
{
key_set(12,1,4);

if(!K3)
{
Set_W1302(0x88);
Set_place(1,4);
month=0;
day=1;
count=((init[3]&0xf0)>>4)*10+(init[3]&0x0f); //讀當前日數據
}
}

while(day) //設定日
{
key_set(31,1,7);

if(!K3)
{
Set_W1302(0x86);
Set_place(1,7);
day=0;
week=1;
count=init[5]&0x0f; //讀當前星期數據
}
}

while(week) //設定星期
{
if(!K2)
{
beep();
if(count!=7)
count++;
else count=1;
}
if(!K1)
{
beep();
if(count!=1)
count--;
else count=7;
}

init1[1]=count%10;

if(flag)
{
write_position(1,15);
lcd_wdat(init1[1]+0x30);
}
else
{
write_position(1,15);
lcd_wdat(0x20);
}

if(!K3)
{
Set_W1302(0x8a);
write_position(1,15);
lcd_wdat(init1[1]+0x30);
week=0;
hour=1;
count=((init[2]&0xf0)>>4)*10+(init[2]&0x0f); //讀當前時數據
}
}

while(hour) //設定時
{
key_set(23,2,7);
if(!K3)
{
Set_W1302(0x84);
Set_place(2,7);
hour=0;
min=1;
count=((init[1]&0xf0)>>4)*10+(init[1]&0x0f); //讀當前分數據
}
}

while(min) //設定分
{
key_set(59,2,10);
if(!K3)
{
Set_W1302(0x82);
Set_place(2,10);
min=0;
sec=1;
count=((init[0]&0xf0)>>4)*10+(init[0]&0x0f); //讀當前秒數據
}
}

while(sec) //設定秒
{
key_set(59,2,13);
if(!K3)
{
Set_W1302(0x80);
Set_place(2,13);
sec=0;
count=0;
}
}
Play_nowtime();
Time_compare();
}
}

/**********************************************************/
// Time0中斷函數
/**********************************************************/
void Time0(void) interrupt 1 using 0
{
TH0=0x4c; //50ms定時
TL0=0x00;
timecount++;
if(timecount>9)
{
timecount=0;
flag=~flag;
}
}

/**********************************************************/
// 設定值寫入DS1302
/**********************************************************/
void Set_W1302(uchar addr)
{
uchar temp;
write_ds1302(0x8e,0x00);
temp=(init1[0]<<4)+init1[1];
write_ds1302(addr,temp);
write_ds1302(0x8e,0x80);
beep();
}

/**********************************************************/
// 被設置數據閃動
/**********************************************************/
void Set_Flash(uchar row,uchar col )
{
init1[0]=count/10;
init1[1]=count%10;

if(flag)
{ //顯示
write_position(row,col);
lcd_wdat(init1[0]+0x30);
write_position(row,col+1);
lcd_wdat(init1[1]+0x30);
}
else
{ //清屏
write_position(row,col);
lcd_wdat(0x20);
write_position(row,col+1);
lcd_wdat(0x20);
}
}

/**********************************************************/
// 指定位置顯示
/**********************************************************/
void Set_place(uchar row,uchar col)
{
write_position(row,col);
lcd_wdat(init1[0]+0x30);
write_position(row,col+1);
lcd_wdat(init1[1]+0x30);
}

/**********************************************************/
// 顯示當前時間
/**********************************************************/
void Play_nowtime()
{
read_nowtime(0x81,init,7); //讀出當前時間,讀出7個位元組

write_position(2,7);
lcd_wdat(((init[2]&0xf0)>>4)+0x30);

write_position(2,8);
lcd_wdat('0'+(init[2]&0x0f)); //讀小時

// write_position(2,9);
// lcd_wdat(':');

write_position(2,10);
lcd_wdat('0'+((init[1]&0xf0)>>4));

write_position(2,11);
lcd_wdat('0'+(init[1]&0x0f)); //讀分鍾

// write_position(2,12);
// lcd_wdat(':');

write_position(2,13);
lcd_wdat('0'+((init[0]&0xf0)>>4));

write_position(2,14);
lcd_wdat('0'+(init[0]&0x0f)); //讀秒

write_position(1,1);
lcd_wdat('0'+((init[6]&0xf0)>>4));

write_position(1,2);
lcd_wdat('0'+(init[6]&0x0f)); //讀年

// write_position(1,3);
// lcd_wdat('/');

write_position(1,4);
lcd_wdat('0'+((init[4]&0xf0)>>4));

write_position(1,5);
lcd_wdat('0'+(init[4]&0x0f)); //讀月

// write_position(1,6);
// lcd_wdat('/');

write_position(1,7);
lcd_wdat('0'+((init[3]&0xf0)>>4));

write_position(1,8);
lcd_wdat('0'+(init[3]&0x0f)); //讀日

write_position(1,15);
lcd_wdat('0'+(init[5]&0x0f)); //讀周

flash();
}

/*********************************************************/
// 鍵設定函數
/*********************************************************/
void key_set(uchar num,uchar row,uchar col )
{
if(!K2)
{
beep();
if(count!=num)
count++;
else count=0;
}
if(!K1)
{
beep();
if(count!=0)
count--;
else count=num;
}
Set_Flash(row,col);
}

/*********************************************************/
// 報警時間設定
/*********************************************************/
void alarm_time()
{
// if(!K4&flag) //開始設定報警時間
{
write_str(0xc0,str3); //液晶顯示提示信息
Play_alarmtime();
beep();
hour=1;
count=((bj_time[2]&0xf0)>>4)*10+(bj_time[2]&0x0f); //讀當前時報警數據

while(hour) //設定時
{
key_set(23,2,7);

if(!K4)
{
Set_place(2,7);
bj_time[2]=((init1[0]<<4)|init1[1]);
beep();
hour=0;
min=1;
count=((bj_time[1]&0xf0)>>4)*10+(bj_time[1]&0x0f); //讀當前分報警數據
}
}

while(min) //設定分
{
key_set(59,2,10);

if(!K4)
{
Set_place(2,10);
bj_time[1]=((init1[0]<<4)|init1[1]);
beep();
min=0;
sec=0;
count=((bj_time[0]&0xf0)>>4)*10+(bj_time[0]&0x0f); //讀當前秒報警數據
write_str(0xc0,str2); //液晶顯示提示信息
}
}
/*
while(sec) //設定秒
{
key_set(59,2,13);

if(!K4)
{
Set_place(2,13);
bj_time[0]=((init1[0]<<4)|init1[1]);
beep();
min=0;
sec=0;
count=0;
write_str(0xc0,str2); //液晶顯示提示信息
}
}*/
}
}
/*********************************************************/
// 報警時間顯示
/*********************************************************/
void Play_alarmtime()
{
write_position(2,7);
lcd_wdat(((bj_time[2]&0xf0)>>4)+0x30);

write_position(2,8);
lcd_wdat('0'+(bj_time[2]&0x0f)); //讀小時

write_position(2,9);
lcd_wdat(':');

write_position(2,10);
lcd_wdat('0'+((bj_time[1]&0xf0)>>4));

write_position(2,11);
lcd_wdat('0'+(bj_time[1]&0x0f)); //讀分鍾

write_position(2,12);
lcd_wdat(':');

write_position(2,13);
lcd_wdat('0'+((bj_time[0]&0xf0)>>4));

write_position(2,14);
lcd_wdat('0'+(bj_time[0]&0x0f)); //讀秒
}

/*********************************************************/
// 時間比較
/*********************************************************/
void Time_compare()
{
if(alarm_flag)
{
if(init[2]==bj_time[2])
{
if(init[1]==bj_time[1])
beep();
}
}
}

/*********************************************************/

E. stc89c52單片機怎麼聯接驅動器控制步進電機圖

STC89C52RC通過TB6600步進驅動板控制步進電機的接線方法

PUL+,DIR+和ENA+連一起接到單片機VCC口,PUL-,DIR-和ENA-接到P10,P11和P12口,電源和步進電機接線同上;

PUL是脈沖,DIR是方向,ENA是使能,每個標簽帶 + 符號的是隔離端光耦的正極,帶 - 符號的是負極。把這三個標簽 帶 - 號的都和單片機的地線連接,帶 + 號的和單片機埠連接。


簡單測試程序如下:

#include <reg52.h>
void main()
{
while(1)
{
P1=0x00;
delay(1000);//delay函數略去
P1=0xff;
delay(1000);
}
}

F. 期末大作業 求51單片機控制走馬燈的程序設計然後帶圖

單片機控制的馬上程序,當然根據它的提示來操作就可以了

G. 用單片機做一個簡單的實驗,控制電路什麼的,不要像畢業設計那樣復雜的。

看這篇帖子的,我想都是電子愛好者或電類專業學生。不知道大家都處於什麼一個階段,這篇帖子是寫給入門者的,要解決一個問題:初學者應重點掌握什麼電子知識,大學階段如何學習?

先說點貌似題外的東西——3個謬論。

謬論一:高中老師常對我們說,大家現在好好學,考上了大學就輕鬆了,愛怎麼玩怎麼玩。這真是狗屁。別的專業我不好說,電氣、電子、電力、通信、自動化等電類專業,想要輕松那是不可能地(當然你是天才就另說),專業課上講的東西對決大多數人來說那是雲里霧里,從來都是一知半解,需要你課下大量時間精力地消化。有些東西甚至需要你若干年後在工作中遇著時才回過味:「哦,原來以前學的那東西是干這使的。」你要能想得起,並知道怎麼回頭去補,就算是上學時專業課學得很扎實了。

謬論二:填志願時經常有人對我們說:專業不重要,學校最重要,進了個好學校想學什麼再學。這亦是狗屁。進了學校,本專業的課程就可能會壓得你喘不過氣來,還有多少人有時間和毅力選修第二專業?而所學專業幾乎就是決定了你今後一生的職業生涯。而學校,說實在話本科階段我覺得從老師那學到的東西各校間差別不是很大。課上講的大同小異,課下也不會有什麼好老師給你單獨指導和點撥,若能遇著,那是你的幸運。越牛的學校的越牛的老師就越忙,不要指望他們會在教學上花多少心思,更不要指望他們對你另眼相看。反倒是一些普通院校的小老師們可能跟學生走得更近,輔導更多些,雖然他們可能水平一般,但對於你大學的學習來說還是足夠的。綜上所述,我覺得對於一個電子愛好者來說,成為一名普通重點大學的電子系學生比成為北大的哲學系學生更重要。當然看帖的應該大多數都是學電的,那恭喜你,這個專業不錯的,雖不是什麼「朝陽產業」,但絕對是個「常青行業」。

謬論三:上了大學,可能又有不少人對你說,在大學專業不重要,關鍵的是學好計算機和英語,這樣就不愁找不到好工作了。這也是屁話。你要明確一點:你將來不是純靠英語吃飯的,也不是做編程、搞軟體開發或動畫創作的。我是想說:若果你性格偏內向沉穩、肯鑽研、愛好電子行業,將來想從事電子設計和研發工作,那你一定要學好專業課。當然英語也很重要,但以後工作中用得多的是你的專業英語,即能讀懂英語技術文檔,而不是跟別人比你口語多正宗多流利。至於計算機,那就是一工具,不要花太多時間去學photoshop、3dmax、Flash、網頁製作等流行軟體,這些在你今後的工作中用不著,也會牽扯你大量時間精力。好鋼用在刀刃上,多進進實驗室多搭搭電路吧。當然,電類學生對電腦也有特殊要求,那就是用熟Protel、
Multisim,學好匯編語言、C語言、選學PLD相關軟體。任務也是很重的。

以上說了3個謬論,下面言歸正傳吧。那麼進了大學,讀了電類專業,這4年你該學些什麼呢?

首先要了解:電類專業可分為強電和弱電兩個方向,具體為電力工程及其自動化(電力系統、工廠供變電等)專業屬強電,電氣工程及其自動化以強電為主弱電為輔,電子、通信、自動化專業以弱電為主。其他更進一步的細分要進入研究生階段才劃分。但無論強電還是弱電,基礎都是一樣的。

首先高數是要學好的,以後的信號處理、電磁場、電力系統、DSP等不同方向的專業課都用得著。

專業基礎課最重要的就是電路分析、模擬電路、數字電路。這3門課一定要學好。這3門課一般都是大一下學期到大三上學期開設,對大多數對電子知識還了解不多的同學來說,通常是學得一知半解,迷迷糊糊。所以,最好是在開課之前或是開課的同時讀一兩本通俗淺顯的綜合介紹電子知識的書籍,對書中的知識你不需要都懂,能有個大致感覺就行。

對這這種入門讀物的選擇很重要,難了看不懂可能興趣就此喪失或備受打擊,反而事與願違。在此推薦一本《電子設計從零開始》(楊欣編著,清華大學出版社出版),該書比較系統全面地介紹了電子設計與製作的基礎知識,模電、數電、單片機、Multisim電路模擬軟體等都有涉及,一冊在手基本知識就差不多了,關鍵是淺顯易懂,有一定趣味性。另外科學出版社引進出版的一套小開本(32開)電子系列圖書也不錯,是日本人寫的,科學出版社翻譯出版,插圖較多,也較淺顯,不過這一系列分冊較多,內容分得較細。

除了看書,還要足夠重視動手實踐。電路、模電、數電這些課程進行的同時都會同時開設一些課程試驗,珍惜這個動手機會好好弄一弄,而不要把它當作一個任務應付了事。跟抄作業一樣,拷貝別人的試驗結果在高校中也是蔚然成風,特別是幾個人一個小組的實驗,那就是個別勤奮好學的在那折騰,其他人毫不用心地等著出結果。

我只想說,自己動手努力得來的成果才是甜美的,那種成就感會讓你充實和滿足。游手好閑的,到臨近畢業找工作或在單位試用時,心中那種巨大的惶恐會讓你悔不當初。這種教訓太多了,多少次我們都是蹉跎了歲月才回過頭來追悔莫及。除了實驗課好好准備好好做之外,許多學校都設有開放性實驗室,供學生平時課余自覺來弄弄。珍惜這種資源和條件吧,工作後不會再有誰給你提供這種免費的午餐了。

當然有些學校沒有這么好的條件,或缺少器件,那同學們就在電腦上模擬一把試驗平台吧,就是學好用好Multisim軟體。Multisim是一種電路模擬軟體,筆者上學時叫做EWB,後來隨著版本更新,先後更名為Multisim2001、Multisim7、Multisim8。這個軟體可模擬搭建各種模擬電路和數字電路,並可觀測、分析電路模擬結果。大夥可以把模電、數電中學習的電路在這軟體裡面模擬一下,增加感性認識,實驗前後也可把試驗電路在軟體里模擬,看跟實際試驗結果有多大差別。可以說,只要你是學電的,這個小軟體就是你上學時必須掌握的,對你的學習助益很大。另一個必須掌握的軟體那就是protel了。

上學時,從小學期的綜合設計實驗到畢業設計,最後都會要求你用Protel繪出設計的電路原理圖和PCB版;工作後,Protel也是你必須掌握的基本技能,部分同學畢業後一兩年內的工作,可能就是單純地用這軟體畫板子。Protel的版本也走過了Protel98、Protel99、Protel99SE、ProtelDXP、Protel2004的發展道路。Protel99SE、ProtelDXP、Protel2004這三個版本現在用得最多,目前許多學校教學或公司內工程師使用的都還是Protel99SE,當然若作為新的自學者直接從Protel2004學起似乎好一些。

綜上所敘,作為最基本的EDA(電子設計自動化)軟體,Multisim和Protel是所有電類學生在上學時必須掌握的。其他的如Pspice、Orcad、SYstemview、MATLAB、QuartusII等等,需根據不同的專業方向選學,或是在進入研究生階段或工作後在重點學習使用。那Multisim和Protel好學么?入門應該問題不大,讓師兄師姐指導指導,或是找一兩本入門書看一看就OK了。這里推薦一本《電路設計與模擬——基於Multisim 8與Protel 2004》(也是楊欣編著,清華社出版),作為這兩款軟體的入門學習挺不錯的,關鍵是一本書包含了兩款軟體學習,對窮學生來說比較劃算,若是花錢買兩本書分別去學這兩個軟體,就不值了,因為Multisim的入門不是很難。另用Protel畫PCB電路板學問挺大的,有必要多看一些技術文檔或是買一本高級應用類的圖書。

2.大三大四(學習專業課,嘗試應用)
進入大三,就涉及到專業課的學習了,本文只討論以應用為主的專業課,其他如《電力系統分析》、《電機學》、《自控原理》、《信號與處理》、《高電壓》、《電磁場》等等以理論和計算為主的專業課,咱就不多提了。當然這些課對你今後向研究型人才發展很重要,也都很讓人頭疼,要有建議也只能說是努力學、好好學,懂多少是到少(不過別指望全都懂),以後工作或接著深造用得著時再回過頭來接著補接著學,那時有工作經驗或接觸多了有感性認識,可能學著就容易些了。
那以應用為主的專業課又有哪些呢?不同專業方向有不同的課程,很難面面俱到。這里先簡單羅列一下,有微機原理與介面技術(也稱單片機)、開關電源設計、可編程邏輯器件(PLD)應用、可編程邏輯控制(PLC)應用、變頻器應用、通信電路、數字集成電路分析與設計、DSP、嵌入式等等。可能有同學要問:這么多東西,大學階段要想都學好不容易吧?答案是不僅是不容易,而且是不可能。這些技術每一門展開來都是復雜的一套知識,可以說,你只要精通其中一門,就可以到外邊找個不錯的工作了。
而且在大學階段,這些課程也不是都要學的,而是針對不同專業方向選修其中幾門(具體選哪幾門,多研究研究你們各自的專業培養方案,多請教老師),學的時候爭取能動基本用法即可,真正的應用和深入是要到工作後的;當然你若很勤奮或有天賦,能熟練掌握某一門達到開發產品的程度,那畢業後找個好工作就輕而易舉了。到這里我們需要再明確一點:電子領域知識繁多、浩如煙海,所以一般搞硬體的公司都有較多的員工,一個研發項目是多人細致分工、共同完成的,所以我們經常會聽到團隊意識這個名詞。因為一個人的能力有限,不可能掌握所有的知識。比如一些人專門負責搞驅動,一些人專門從事邏輯設計,一些人專門搞高頻無線,一些人專門搞測試,一些人專門設計外殼,一些人專門設計電路板等等。

看到這里可能有的同學頭都大了:那說來說去大學階段到底究竟應該學些什麼呢?說實話寫到這里我的頭也大了,電子設計涉及方方面面的東西太多了,實在不是一篇文章甚至一本書能說得清楚的。所以我決定剔除這些生澀的課程名目,大致說一下我所認為的一個電類學生或是想要成為電子工程師的自學者應該掌握的基本的專業技能。

現在應該說單片機不知道那是相當嚴重的問題。單片機的知識和應用的技巧成了求職面試中必備的問題。但是單片機的知識較難入手,但是你如果看了《51單片機應用從零開始》(清華大學出版社,王玉鳳,劉湘黔,楊欣編著)就不是這么感覺的了,這是一本中學生都讀得懂的單片機基礎和應用教程。這本教程凝結了國內幾所重點大學中站在科研、教學第一線教師們的心血,也得到了英國劍橋大學、牛津大學、倫敦帝國理工大學、倫敦大學、加的夫大學等世界著名大學多位博士生導師的指導意見。經過多位學者的精心裁剪,本書的脈絡、線索、內容才真正符合讀者學習單片機的需要。

《51單片機應用從零開始》以生動活潑、平實易懂的語言講述。盡量讓單片機學習過程中不斷涌現的專業詞彙,在不知不覺的情況下通過多方面的使用而掌握。本書沒有用專業的描述方法來敘述知識點,取而代之的是以「講故事」的形式把應該了解的內容和盤托出。
十分注重基礎知識的鋪墊。在單片機學習之前,需要對計算機原理和電子技術有一定的了解。本書考慮到不同讀者的知識背景不同,把這兩個基礎理論融入到了單片機的講解當中,使閱讀起來感覺不到有什麼障礙。
構建了全面的學習支撐體系。每章最後的「實例點撥」除了鞏固每章的學習知識外,更重要的是開辟單片機應用的視野;再加上「器件介紹」環節,補足單片機從基礎到應用所需要的知識;以及豐富的附錄內容可作為學習和應用單片機的強力參考。這便構建了一個完整學習單片機的支撐體系。
既授人以魚,也授人以漁。書中有充足的實例應用,可以用在單片機實驗、單片機課程設計當中。但更重要的是,這些實例前後都伴隨著仔細的講解,一個例子下來就能摸清來龍去脈。
敘述的內容全面、新穎、權威。嚴格按照單片機官方的技術參考對其進行講解,包括所有51單片機學習與應用需要的基礎知識。無論敘述的內容或是實例,都是目前世界上單片機應用的主流。
全書渾然一體。雖然每章各具標題,實際上互有聯系。而這種聯系如果在書中忽略不談,則會對理解和記憶產生障礙。本書在正文中多次有知識點的相互映射,這不但能加深前後內容的聯系,而且能深化理解與記憶。

我認為:除了最初提到的電路分析、模擬電路、數字電路、單片機外,應了解並掌握電子元器件識別與選用指導、基本儀器儀表的使用、一些常用電路模塊的分析與設計、單片機的應用、PLD的應用、模擬軟體的應用、電路板設計與製作、電子測量與電路測試。

電子元器件的識別與使用就不用說了,這是元素級的基礎,不過要想掌握好也並不容易,一些電子系學生畢業了,還認不出二極體、三極體實物、分不清電解電容的正負極等等,也不是沒有的事。還是一句話,多進進實驗室,多跑跑電子市場,多看看書。

儀器儀表的使用,大學的實驗課中你至少會用過數字萬用表,波形發生器、電源、示波器、小電機、單片機模擬機,至少要把這些東西的接線方法和用法弄懂吧。

常用電路模塊也是包羅萬相,各種放大電路、比較器、AD轉換電路、DA轉換電路、微分電路、積分電路,還有各種數字邏輯單元電路等等,只能說,大致了解吧,並學會怎麼去查資料、查晶元查管腳。最基本的,做實驗或課程設計中用到的各種晶元要弄熟。

單片機,這是應該掌握的。時下單片機種類繁多,但各大小企業用得最多的還是51系列單片機,而且價格便宜、學習資料也最全,故給自學者推薦。當然各學校開課講的單片機型號會有所不同,沒關系,學好單片機編程,學好了一種,再學別的單片機就容易了。

PLD(可編程邏輯器件),一種集成電路晶元,提供用戶可編程,實現一定的邏輯功能。對可編程邏輯器件的功能設定(即要它實現什麼功能)要有設計者藉助開發工具,通過編寫程序來實現,這跟單片機類似。開發工具可學習Altera公司的Quartus II軟體(這是該公司的第4代PLD開發軟體,第3代是MAX+PLUS II軟體)。編程語言學習硬體描述語言VHDL或Verilog HDL。

模擬軟體最基本的就是前面說的Multisim了,另外還可學MATLAB。其他的試專業情況選學或是工作後學。電路板設計與製作主要是用Protel軟體輔助進行。這在前面已有介紹,讀者應該也比較熟悉。

最後建議同學們積極與各類電子競賽賽事,參加一場比賽一個項目做下來,電子設計的一個流程和各環節的基礎知識就能串起來了,對知識的融會貫通及今後走向工作崗位都有莫大裨益。

以上這些東西我說得籠統,深入下去又是一大堆要學的東西。還是那句話,多啃書本、多實踐!清華大學出版社有一套「電子電路循序漸進系列教程」是按照上面我所講的那個思路出的,可惜好像還沒出全,現在好像只有《單片機在電子電路設計中的應用》、《電路設計與制板——Proetl應用教程》、《模擬軟體教程——Multisim和MATLAB》、《常用電路模塊分析與設計指導》幾本。另外聽聽你們老師的意見、師兄師姐的意見,問問他們應讀些什麼書,當然也不能盡聽盡信,翻開一本書我想你先大致看看他講得是否通俗,自己琢磨著能看懂幾分?我想能有5分懂這本書就值得一看了,示自己現階段的知識情況,太淺顯的書不用看了,太深的書也不要去看,看得迷迷糊糊還打擊自信心喪失了興趣。

好了,就此停筆吧。本來是要寫個書目推薦,可干癟癟的羅列一堆書目有什麼意義?還是寫下這些字,讓同學們自己去思考去選擇去深入吧,希望能對你們有所幫助。

最後一句老生常談也是我的切膚之痛:大學四年會一晃而過,要學的東西太多太多,不要虛度光陰。及時當努力,歲月不待人!
另外,虛機團上產品團購,超級便宜

H. 求基於單片機AT89C51的溫度檢測報警與控制系統電路圖

我把這個資料發你郵箱了!
單片機溫控系統設計
單片機溫控系統設計
摘要
本設計是以一個保溫箱為控制對象,以AT89C51為控制系統核心,通過單片機系統設計實現對保溫箱溫度的顯示和控制功能。本溫度控制系統是一個閉環反饋調節系統,由溫度感測器AD590對保溫箱溫度進行檢測,經過調理電路得到合適的電壓信號。經A/D轉換晶元得到相應的溫度值,將所得的溫度值與設定溫度值相比較得到偏差。通過對偏差信號的處理獲得控制信號,去調節加熱器的通斷,從而實現對保溫箱溫度的顯示和控制。本文主要介紹了保溫箱溫度控制系統的工作原理和設計方法,論文主要由三部分構成。① 系統整體方案設計。② 硬體設計,主要包括溫度檢測電路、A/D轉換電路、顯示電路、鍵盤設計和控制電路。③ 系統軟體設計,軟體的設計採用模塊化設計,主要包括A/D轉換模塊、顯示模塊、鍵盤模塊和控制模塊等。
目錄
1 緒論 1
1.1 課題設計背景和目的 1
1.2 國內外研究狀況和發展趨勢 1
1.3溫度檢測的主要方法 2
1.4課題設計的主要內容 3
2 系統總體方案設計 4
2.1系統硬體設計方案 4
2.1.1 晶元選擇 5
2.1.2 溫度檢測 5
2.1.3 A/D轉換電路 5
2.1.4 鍵盤輸入 6
2.1.5 LED顯示 6
2.1.6 控制電路 6
2.2系統軟體設計方案 6
3 系統硬體設計 7
3.1 中央處理器 7
3.1.1 AT89C51簡介 7
3.1.2管腳說明 8
3.1.3特殊功能存儲器 10
3.1.4晶元擦除
; 10
3.1.5復位電路的設計 11
3.1.6時鍾電路設計 11
3.2溫度感測器AD59011
3.3 信號調理電路 13
3.4溫度標定 14
3.5 A/D轉換 16
3.6 LED顯示 19
3.7 鍵盤介面 22
3.8 控制電路 23
4 系統軟體設計 25
4.1程序初始化 26
4.2主程序 27
4.3 A/D轉換子程序 27
4.4 標度轉換子程序 28
4.5 顯示子程序 29
4.6控制子程序 30
4.7 鍵盤子程序 32
5 結論 35

I. 求單片機原理及介面技術 試題及答案

單片機模擬試卷001
一、選擇題(每題1分,共10分)
1.8031單片機的( )口的引腳,還具有外中斷、串列通信等第二功能。
a)P0 b)P1 c)P2 d)P3
2.單片機應用程序一般存放在( )
a) RAM b)ROM c)寄存器 d)CPU
3.已知某數的BCD碼為0111 0101 0100 0010 則其表示的十進制數值為( )
a) 7542H b) 7542 c) 75.42H d) 75.42
4.下列指令中不影響標志位CY的指令有( )。
a)ADD A,20H b)CLR c)RRC A d)INC A
5.CPU主要的組成部部分為( )
a)運算器、控制器 b)加法器、寄存器
c)運算器、寄存器 d)運算器、指令解碼器
6.INTEL 8051 CPU是( )位的單片機
a) 16 b)4 c)8 d)准16
7.8031復位後,PC與SP的值為( )
a )0000H,00H b) 0000H,07H c) 0003H,07H d)0800H,00H
8.當需要從MCS-51單片機程序存儲器取數據時,採用的指令為( )。
a)MOV A, @R1 b)MOVC A, @A + DPTR
c)MOVX A, @ R0 d)MOVX A, @ DPTR
9.8031單片機中既可位定址又可位元組定址的單元是( )
a)20H b)30H c)00H d)70H
10.下列哪條指令是正確的( )
a) PUSH R2 b) ADD R0,A
c) MOVX A @DPTR d) MOV @R0,A
二、填空題(每空1分,共30分)
1.一個完整的微機系統由 和 兩大部分組成。
2.8051 的引腳RST是____(IN腳還是OUT腳),當其端出現____電平時,8051進入復位狀態。8051一直維持這個值,直到RST腳收到____電平,8051才脫離復位狀態,進入程序運行狀態,從ROM H單元開始取指令並翻譯和執行。
3.半導體存儲器分成兩大類 和 ,其中 具有易失性,常用於存儲 。
4.求十進制數-102的補碼(以2位16進制數表示),該補碼為 。
5.PC存放_______________,具有___________特性。在8051中決定程序執行順序的是PC還是DPTR? 它是______位? (是,不是)SFG?
6.123= B= H。
7.8051內部有 並行口,P0口直接作輸出口時,必須外接 ;並行口作輸入口時,必須先 ,才能讀入外設的狀態。
8.MCS-51的堆棧只可設置在 ,其最大容量為 ,存取數據的原則是 。堆棧寄存器SP是 位寄存器,存放 。
9.中斷處理的全過程分為以下3個段: 、 、 。
10.定時和計數都是對 進行計數,定時與計數的區別是

三、判斷題(對者打√,錯者打×,並改正,每題1分,共10分)
1 中斷服務程序的最後一條指令是RET。
2 存儲器分成內存和外存兩大部分,其中外存可以直接與CPU交換信息。
3 P2口既可以作為I/O使用,又可以作地址/數據復用口使用。
4 在中斷響應階段CPU一定要做如下2件工作:保護斷點和給出中斷服務程序入口地址。
5 RC A為循環左移指令。
6 MOV A,30H的源操作數為立即定址方式。
7 MOV A,@A+DPTR是一條查表指令。
8 MUL AB的執行結果是高8位在A中,低8 位在B中。
9 AJMP跳轉空間最大可達到64KB 。
10 DPTR是由DPH和DPL兩個8位特殊寄存器組成的。
四、簡答題(每題5分,共15分)
1.MCS51的中斷系統有幾個中斷源?幾個中斷優先順序?中斷優先順序是如何控制的?在出現同級中斷申請時,CPU按什麼順序響應(按由高級到低級的順序寫出各個中斷源)?各個中斷源的入口地址是多少?
2.已知單片機系統晶振頻率為6MHz,若要求定時值為10ms時,定時器T0工作在方式1時,定時器T0對應的初值是多少?TMOD的值是多少?TH0=?TL0=?(寫出步驟)
3.MCS51系列單片機的內部資源有哪些?說出8031、8051和8751的區別。
五、作圖題(10分)
用6264(8K*8)構成16K的數據存儲系統。要求採用線選法產生片選信號,並計算6264的地址范圍。
六、設計題(1題13分;2題12分,共25分)
1.某單片機控制系統有8個發光二極體。試畫出89C51與外設的連接圖並編程使它們由左向右輪流點亮。
2.某控制系統有2個開關K1和K2,1個數碼管,當K1按下時數碼管加1,K2按下時數碼管減1。試畫出8051與外設的連接圖並編程實現上述要求。

單片機模擬試卷001答案
一、選擇題(每題1分,共10分)
1. D 2. B 3. B 4. D 5. A 6. C 7. B 8. B 9. A 10. D
二、填空題(每空1分,共30分)
1.一個完整的微機系統由硬體和軟體兩大部分組成。
2.8051 的引腳RST是IN腳(IN腳還是OUT腳),當其端出現高電平時,8051進入復位狀態。8051一直維持這個值,直到RST腳收到低電平,8051才脫離復位狀態,進入程序運行狀態,從ROM 0000 H單元開始取指令並翻譯和執行。
3.半導體存儲器分成兩大類:RAM ROM,其中 RAM 具有易失性,常用於存儲 臨時性數據 。
4.求十進制數-102的補碼(以2位16進制數表示),該補碼為¬¬¬¬ 9AH 。
5.PC存放_CPU將要執行的指令所在的ROM單元的地址,具有自動加1特性。在8051中決定程序執行順序的是PC還是DPTR PC ?它是16位?不是(是,不是)SFG?
6.123= 01010010 B= 52 H。
7.8051內部有 4 個並行口,P0口直接作輸出口時,必須外接 上拉電阻 ;並行口作輸入口時,必須先 將口鎖存器置1 ,才能讀入外設的狀態。
8.MCS-51的堆棧只可設置在 內RAM低128B區 ,其最大容量為 128B ,存取數據的原則是 先進後出 。堆棧寄存器SP是 8 位寄存器,存放 堆棧棧頂的地址 。9.中斷處理的全過程分為以下3個段: 中斷請求 、 中斷響應 、 中斷服務 。
10.定時和計數都是對 脈沖 進行計數,定時與計數的區別是 定時是對周期已知的脈沖計數;計數是對周期未知的脈沖計數 。
三、判斷題(對者打√,錯者打×,並改正,每題1分,共10分)
1 中斷服務程序的最後一條指令是RETRETI。×
2 存儲器分成內存和外存兩大部分,其中外內存可以直接與CPU交換信息。×
3 P2口既可以作為I/O使用,又可以作地址/數據復用口使用。√
4 在中斷響應階段CPU一定要做如下2件工作:保護斷點和給出中斷服務程序入口地址。√
5 LCRL A為循環左移指令。×
6 MOV A,30H的源操作數為立即直接定址方式。
7 MOVMOVC A,@A+DPTR是一條查表指令。×
8 MUL AB的執行結果是高低8位在A中,低高8 位在B中。×
9 AJMP跳轉空間最大可達到642KB 。
10 DPTR是由DPH和DPL兩個8位特殊寄存器組成的。 √
四、簡答題(每題5分,共15分)
1.MCS51的中斷系統有幾個中斷源?幾個中斷優先順序?中斷優先順序是如何控制的?在出現同級中斷申請時,CPU按什麼順序響應(按由高級到低級的順序寫出各個中斷源)?各個中斷源的入口地址是多少?
答:MCS51單片機有5個中斷源,2個中斷優先順序,中斷優先順序由特殊功能寄存器IP控制,在出現同級中斷申請時,CPU按如下順序響應各個中斷源的請求:INT0、T0、INT1、T1、串口,各個中斷源的入口地址分別是0003H、000BH、0013H、001BH、0023H。
2.已知單片機系統晶振頻率為6MHz,若要求定時值為10ms時,定時器T0工作在方式1時,定時器T0對應的初值是多少?TMOD的值是多少?TH0=?TL0=?(寫出步驟)
答:定時值為10ms時,定時器T0工作在方式1時,定時器T0對應的初值是1388H
TMOD的值是00000001B,TH0=13H;TL0=88H。
3.MCS51系列單片機的內部資源有哪些?說出8031、8051和8751的區別。
答:MCS51系列單片機上有1個8位CPU、128B的RAM、21個SFR、4個並行口、1個串列口、2個定時計數器和中斷系統等資源。8031、8051和8751的區別是8031內無ROM;8051內有4KB的掩膜ROM;8751內有4KB的EPROM。
五、作圖題(10分)
答:WR接6264的WE
RD接6264的OE
AB0---AB12接6264的A0---A12
DB0—DB7接6264的D0—D7
AB15、AB14分別接Y0和Y1
地址:0000H---1FFFH;2000H---3FFFH
六、設計題
1.某單片機控制系統有8個發光二極體。試畫出89C51與外設的連接圖並編程使它們由右向左輪流點亮。
答: 圖 (5分) 構思 (3分)
MOV A,#80H (1分)
UP:MOV P1,A (1分)
RR A (2分)
SJMP UP (1分)
2.某控制系統有2個開關K1和K2,1個數碼管,當K1按下時數碼管加1,K2按下時數碼管減1。試畫出8051與外設的連接圖並編程實現上述要求。
答:圖 (5分) 構思 (3分)
程序(4分)
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP AINT0
ORG 0013H
LJMP BINT1
MAIN: MOV IE,#83H
SETB IT0
SETB IT1
MOV R0,#00H
MOV DPTR,#TAB
UP: MOV A,R0
MOVC A,@A+DPTR
MOV P1,A
SJMP UP
AINT0: INC R0
CJNE R0,#10,AINT01
MOV R0,#0
AINT01: RETI
BINT1: DEC R0
CJNE R0,#0FFH,BINT11
MOV R0,#9
BINT11: RETI

閱讀全文

與上海九圖控制技術有限公司單片機相關的資料

熱點內容
程序員直播機器人舞團 瀏覽:767
devc指針編譯問題 瀏覽:998
支持dsd硬解壓音效卡 瀏覽:769
怎麼查看u盤加密區 瀏覽:182
台電加密是什麼格式 瀏覽:155
php論壇版塊在哪個文件夾 瀏覽:442
暗黑的伺服器為什麼維護 瀏覽:624
android內存溢出的原因 瀏覽:18
標志307的壓縮比是多少 瀏覽:636
伺服器啟動為什麼叫三聲 瀏覽:997
追風箏的人英文pdf 瀏覽:940
解壓小熊手機殼 瀏覽:347
成都市區建成面積演算法 瀏覽:662
智能家居單片機 瀏覽:98
買男裝用什麼app好 瀏覽:856
文件夾合並了怎麼拆開 瀏覽:261
波段副圖源碼無未來函數 瀏覽:90
livecn伺服器地址 瀏覽:259
程序員這個工作真的很吃香嗎 瀏覽:848
程序員和數學分析師待遇 瀏覽:681