继电器和蜂鸣器的使用
首先找到繼電器和蜂鳴器 他們分別連接了一個達林頓管(電流驅動作用),然后連接了753鎖存期,753鎖存器連接的是Y5線上的或非門 ,將753鎖存期打通后,他們對應的io口分別是P04和P06
具體步驟:將38譯碼器的輸出為Y5即輸入為110(C1B1A0),然后輸出一個低電平,通過Y5或非門將它變為高電平,然后使能對應的753鎖存器的LE,打開LE 由于達林頓管中有一個非門,那么IO口就要配置成高電平即P04為 1,P06為1.
注意: 蜂鳴器P06 繼電器P04 IO口配置高電平工作 Y5或非門 繼電器:0x10;蜂鳴器:0x40
小知識:根據原理圖的二進制數,向右旋轉90度后寫成16進制即可
程序的優化:將Yn的或非門的選擇定一個函數,然后又將P0口的選擇定義為一個函數
將Yn選擇定義為一個函數的模板
?然后定義一個函數 調用n和p0要輸入的數據
總結:蜂鳴器打開:0x40,繼電器打開:0x10(對著原理圖順時針旋轉90度寫下來成8位的二進制轉化為16進制即可得到)
?函數封裝38譯碼器選擇的或非門不用去定義 ch138ABC的io口 直接利用P2進行寫
Y4:P2=(P2&0x1f)| 0x80? ?Y5:P2=(P2&0x1f)| 0xa0
Y6:P2=(P2&0x1f)| 0xc0? ??Y7:P2=(P2&0x1f)| 0xe0
怎么來的(一樣通過原理圖化簡成8位2進制數后得到)
總結:先調用73h138封裝函數,然后打開Y5通道,繼電器是IO口給高電平吸合,蜂鳴器給高電平發出響聲。首先不確定繼電器和蜂鳴器的狀態時,要定義一個初始化的函數,P0口全部給0,如果使用不同的通道控制不同的裝置時,可以定義一個函數用來封裝IO口的選擇和138譯碼器的選擇,
代碼總結:定義P0口的輸出函數,可以讓led燈和繼電器蜂鳴器 一起使用 繼電器吸合:0x10;
蜂鳴器響:0x40; 關閉他們是P0口給0 繼電器的蜂鳴器的通道是Y5
?
#include "reg52.h"void Delay(unsigned int t) {while(t--);while(t--); }void InitHC138(unsigned char n) {switch(n){case 4:P2 = (P2 & 0X1f) | 0x80;break;case 5:P2 = (P2 & 0X1f) | 0xa0;break;case 6:P2 = (P2 & 0X1f) | 0xc0;break;case 7:P2 = (P2 & 0X1f) | 0xe0;break;} }void OutPutP0(unsigned char channel, unsigned char dat) {InitHC138(channel);P0 = dat; }void LEDRunning() {unsigned char i;for(i = 0; i < 3; i++){OutPutP0(4,0x00);Delay(60000);Delay(60000);OutPutP0(4,0xff);Delay(60000);Delay(60000);}for(i = 1; i <= 8; i++){OutPutP0(4,(0xff << i));Delay(60000);}OutPutP0(5,0x10);Delay(60000);Delay(60000);OutPutP0(5,0x00);InitHC138(4);for(i = 1; i <= 8; i++){OutPutP0(4,~(0xff << i));Delay(60000);}OutPutP0(5,0x40);Delay(60000);Delay(60000);OutPutP0(5,0x00); }void InitSystem() {OutPutP0(5,0x00); }void main() {InitSystem();while(1){LEDRunning();} }總結
以上是生活随笔為你收集整理的继电器和蜂鸣器的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 神器 Wineskin 基础教程
- 下一篇: 数据库知识:SQLServer变量相关知