藍橋杯----鎖存器、LED、蜂鳴器、繼電器、Motor

? ?(七)、鎖存器

?1、原理

???? ?藍橋杯中數據傳入口都是P0,也就是數碼管段選、位選數據、LED亮滅的數據、蜂鳴器啟動或禁用的數據,外設啟動或者關閉都需要通過P0寫入數據,那么如何這樣共用一個端口會造成沖突嘛,答案是肯定的。所以藍橋杯加入了鎖存器---通過P2高三位(22、21、20)操作。如圖 三十LED鎖存器對應地址為Y4C,湊成高三位數據100,后五位自動補零,P2對應數據1000 0000(用十六進制表示0x80)。Y5C對應數據就是1010 0000(0xa0)…

? 2、代碼示范與解讀

?如 圖 三十一,首先定義一個temp臨時變量,再在P0口傳入數據

P2 & 0x1f就是保留低五位,單獨使高三位全為0,因為高三位才是鎖存器的選擇位。

再單獨改變temp = temp | 0x80,0x80是剛剛推出來的數據,這樣|上,就是單獨修改了高三位,低五位 保持不變。再將數據放入P2中,此時P0中數據就已經傳入了。

最后我們temp = P2 & 0x1f就是清空高三位,P2 = temp關閉鎖存器。注意如果此時不關閉鎖存器,那么一旦有數據傳入P0就會被立即寫入。

對這個代碼進行推廣,只需改變0x80那個位置的數據即可,假設想操作數碼管位選的鎖存器Y6C,可知為1100 0000(即為0xc0),將0x80改成0xc0就可以傳入數碼管位選數據了。

? ? ? ? ? ? ? ? ? ? ? ? 圖 三十 LED原理圖

????????????

? ? ? ? ? ? ? ? ?圖 三十一? 借助鎖存器寫入數據

(八)、LED

?1、原理(圖 三十)

????? ??在P00-P07口傳入數據,對應第一盞燈到第八盞燈,打開鎖存器,就可以實現LED亮滅了。由原理圖可知,為共陽極接法,當P0端口傳入低電平數據時,就點亮LED了。注意51單片機LED亮滅可能不同。

?2、代碼解讀(圖 三十二)

? ? ? ? 定義一個數組,傳入LED亮滅的數據,1為亮表示使能,0為滅表示失能

????? ?定義兩個變量,temp_1與temp_1_old,只有這兩者不相等時操作寄存器(改變)寫入,temp_1存放亮滅的八位數據。

? ? ? ?LED_Buf[0]<<0就是將第一個燈數據左移0位,放在temp_1的最低位,就是操作P00第一個燈。LED_Buf[1]<<1就是把第二個燈數據按二進制左移1位,放在temp_1的Bit2位…

? ? ? ?有改變發生,兩者不同了,寫入數據,記住低電平點亮燈,所以要取反,在打開LED的鎖存器,更新temp_1_old的值。

? ? ? 在主程序中我們可以打開定時器0,寫一個1ms中斷函數,在中斷中掃描這個函數。

? ? ? ? ? ? ? ? ? ?圖 三十二 LED代碼解讀

(九)、繼電器、蜂鳴器、Motor

??1、原理(圖 三十三)

????? 最左邊P01~P07是數據輸入端口,最右邊Relay就是對應繼電器,Motor就是發動機,Buzz對應蜂鳴器,低電平0就是打開這個設備,但是ULN2003設備在中間會對數據進行取反,所以打開Relay數據為 空一位011 1111,對應最左邊數據為 0001 0000,即為0x10。同理打開蜂鳴器即為0x40,打開Motor即為0x20。

? ? ? ? ? ? ? ? ? ? 圖 三十三?外設原理圖

???????????????

?2、代碼解讀(圖 三十四 )

???? 開局必須定義兩個全局變量為蜂鳴器、繼電器、發動機共用,防止不同變量操作對其他設備影響。

? ? ?當Flag為1時,必須單獨變化第四位為1,其余的不變,用 | 操作符來實現,|上0這一位就是保持不變,|上1就是強制為1。當Flag為1時,第四位為0,其余的不變,用 & 符來實現。

? ? temp_2就是臨時數據值,temp_2_Old就是記錄上一個狀態的值,不相同說明狀態發生了改變,將數據傳入P0端,打開鎖存器即可。

? ? ? ? ? ? ? ? 圖 三十四?代碼解讀(繼電器)

?3、代碼推廣(圖 三十五、圖 三十六)

? ?將0x10改為0x40就是單獨打開蜂鳴器代碼,改成0x20就是啟動Motor電機代碼,電機適用于設計PWM波形的。一般來說只考繼電器在特定條件下打開與關閉。

? ? ? ? ? ? ? ? ? 圖 三十五?蜂鳴器推廣代碼

? ? ? ? ? ? ? ? ? ? ? 圖 三十六?Motor推廣代碼

4、提供參考代碼,希望對讀者有幫助

#include <STC15F2K60S2.H>idata unsigned char temp_1 = 0x00;
idata unsigned char temp_old_1 = 0xff;
void LED_Disp(unsigned char *LED_Buf)   //傳入LED數據數組,1亮、0滅
{unsigned char temp; temp_1 = 0x00;temp_1 = (LED_Buf[0]<<0) | (LED_Buf[1]<<1) |(LED_Buf[2]<<2) |(LED_Buf[3]<<3) |(LED_Buf[4]<<4) |(LED_Buf[5]<<5) |(LED_Buf[6]<<6) |(LED_Buf[7]<<7);    //通過一個數組傳入8個LED燈的數據  //LED_Buf[0]<<0,假設第一個數據為1,數據<<(按位左移)0就是讓Bit1為1//LED_Buf[1]<<1,假設第一個數據為1,數據<<(按位左移)1就是讓Bit2為1if(temp_1 != temp_old_1)  //數據改變{P0 = ~temp_1;    //一定記得取反temp = P2 & 0x1f;temp = temp | 0x80;   //操作Led燈的鎖存器P2 = temp;temp = P2 & 0x1f;P2 = temp;temp_old_1 = temp_1;   //更新temp_old_1}
}idata unsigned char temp_2 = 0x00;
idata unsigned char temp_2_old = 0xff;//繼電器操作函數
void Relay_Disp(unsigned char Flag)
{unsigned char temp;if(Flag)temp_2 |= 0x10;elsetemp_2 &= ~0x10;if(temp_2 != temp_2_old){P0 = temp_2;temp = P2 & 0x1f;temp = temp | 0xa0;P2 = temp;temp = P2 & 0x1f;P2 = temp;temp_2_old = temp_2;}
}//蜂鳴器操作函數
void Beep_Disp(unsigned char Flag)
{unsigned char temp;if(Flag)temp_2 |= 0x40;elsetemp_2 &= ~0x40;if(temp_2 != temp_2_old){P0 = temp_2;temp = P2 & 0x1f;temp = temp | 0xa0;P2 = temp;temp = P2 & 0x1f;P2 = temp;temp_2_old = temp_2;}
}//Motor操作函數
void Motor_Disp(unsigned char Flag)
{unsigned char temp;if(Flag)temp_2 |= 0x20;elsetemp_2 &= ~0x20;if(temp_2 != temp_2_old){P0 = temp_2;temp = P2 & 0x1f;temp = temp | 0xa0;P2 = temp;temp = P2 & 0x1f;P2 = temp;temp_2_old = temp_2;}
}

5、提供定時器1代碼與中斷

//定時器一初始化,自己加上EA = 1;ET1 = 1;
void Timer1_Init(void)		//1毫秒@12.000MHz
{AUXR &= 0xBF;			//定時器時鐘12T模式TMOD &= 0x0F;			//設置定時器模式TL1 = 0x18;				//設置定時初始值TH1 = 0xFC;				//設置定時初始值TF1 = 0;				//清除TF1標志TR1 = 1;				//定時器1開始計時EA = 1;                 //打開總中斷ET1 = 1;                //打開定時器一中斷允許位
}void Timer1_Routine() interrupt 3
{
LED_Disp(LED_Buf);         //LED掃描
}

?

?

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/92727.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/92727.shtml
英文地址,請注明出處:http://en.pswp.cn/web/92727.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

AI熱點周報(8.3~8.9):OpenAI重返開源,Anthropic放大招,Claude4.1、GPT5相繼發布

名人說&#xff1a;博觀而約取&#xff0c;厚積而薄發。——蘇軾《稼說送張琥》 創作者&#xff1a;Code_流蘇(CSDN)&#xff08;一個喜歡古詩詞和編程的Coder&#x1f60a;&#xff09; 目錄一、OpenAI的"開源回歸"&#xff1a;時隔5年的戰略大轉彎1. GPT-OSS系列&a…

《Kubernetes部署篇:基于x86_64+aarch64架構CPU+containerd一鍵離線部署容器版K8S1.33.3高可用集群》

總結&#xff1a;整理不易&#xff0c;如果對你有幫助&#xff0c;可否點贊關注一下&#xff1f; 更多詳細內容請參考&#xff1a;企業級K8s集群運維實戰 一、部署背景 由于業務系統的特殊性&#xff0c;我們需要針對不同的客戶環境部署基于containerd容器版 K8S 1.33.3集群&a…

Linux抓包命令tcpdump詳解筆記

文章目錄一、tcpdump 是什么&#xff1f;二、基本語法三、常用參數說明四、抓包示例&#xff08;通俗易懂&#xff09;1. 抓所有數據包&#xff08;默認 eth0&#xff09;2. 指定接口抓包3. 抓取端口 80 的數據包&#xff08;即 HTTP 請求&#xff09;4. 抓取訪問某個 IP 的數據…

抖音、快手、視頻號等多平臺視頻解析下載 + 磁力嗅探下載、視頻加工(提取音頻 / 壓縮等)

跟你們說個安卓上的下載工具&#xff0c;還挺厲害的。它能支持好多種下載方式&#xff0c;具體多少種我沒細數&#xff0c;反正挺全乎的。? 平時用得最多的就是視頻解析&#xff0c;像抖音、快手、B 站上那些視頻&#xff0c;想存下來直接用它就行&#xff0c;連海外視頻的也能…

【iOS】JSONModel源碼學習

JSONModel源碼學習前言JSONModel的使用最基礎的使用轉換屬性名稱自定義錯誤模型嵌套JSONModel的繼承源碼實現initWithDictionaryinit__doesDictionaryimportDictionary優點前言 之前了解過JSONModel的一些使用方法等&#xff0c;但是對于底層實現并不清楚了解&#xff0c;今天…

SmartMediaKit 模塊化音視頻框架實戰指南:場景鏈路 + 能力矩陣全解析

?? 引言&#xff1a;從“內核能力”到“模塊體系”的演進 自 2015 年起&#xff0c;大牛直播SDK&#xff08;SmartMediaKit&#xff09;便致力于打造一個可深度嵌入、跨平臺兼容、模塊自由組合的實時音視頻基礎能力框架。經過多輪技術迭代與場景打磨&#xff0c;該 SDK 已覆…

【第5話:相機模型1】針孔相機、魚眼相機模型的介紹及其在自動駕駛中的作用及使用方法

相機模型介紹及相機模型在自動駕駛中的作用及使用方法 相機模型是計算機視覺中的核心概念&#xff0c;用于描述真實世界中的點如何投影到圖像平面上。在自動駕駛系統中&#xff0c;相機模型用于環境感知&#xff0c;如物體檢測和場景理解。下面我將詳細介紹針孔相機模型和魚眼相…

推薦一款優質的開源博客與內容管理系統

Halo是一款由Java Spring Boot打造的開源博客與內容管理系統&#xff08;CMS&#xff09;&#xff0c;在 GitHub上擁有超過36K Start的活躍開發者社區。它使用GPL?3.0授權開源&#xff0c;穩定性與可維護性極高。 Halo的設計簡潔、注重性能&#xff0c;同時保持高度靈活性&a…

【GPT入門】第43課 使用LlamaFactory微調Llama3

【GPT入門】第43課 使用LlamaFactory微調Llama31.環境準備2. 下載基座模型3.LLaMA-Factory部署與啟動4. 重新訓練![在這里插入圖片描述](https://i-blog.csdnimg.cn/direct/e7aa869f8e2c4951a0983f0918e1b638.png)1.環境準備 采購autodl服務器&#xff0c;24G,GPU,型號3090&am…

計算機網絡:如何理解目的網絡不再是一個完整的分類網絡

這一理解主要源于無分類域間路由&#xff08;CIDR&#xff09;技術的廣泛應用&#xff0c;它打破了傳統的基于類的IP地址分配方式。具體可從以下方面理解&#xff1a; 傳統分類網絡的局限性&#xff1a;在早期互聯網中&#xff0c;IP地址被分為A、B、C等固定類別&#xff0c;每…

小米開源大模型 MiDashengLM-7B:不僅是“聽懂”,更能“理解”聲音

目錄 前言 一、一枚“重磅炸彈”&#xff1a;開源&#xff0c;意味著一扇大門的敞開 二、揭秘MiDashengLM-7B&#xff1a;它究竟“神”在哪里&#xff1f; 2.1 “超級耳朵” 與 “智慧大腦” 的協作 2.2 突破&#xff1a;從 “聽見文字” 到 “理解世界” 2.3 創新訓練&a…

mysql出現大量redolog、undolog排查以及解決方案

排查步驟 監控日志增長情況 -- 查看InnoDB狀態 SHOW ENGINE INNODB STATUS;-- 查看redo log配置和使用情況 SHOW VARIABLES LIKE innodb_log_file%; SHOW VARIABLES LIKE innodb_log_buffer_size;-- 查看undo log信息 SHOW VARIABLES LIKE innodb_undo%;檢查長時間運行的事務 -…

華為網路設備學習-28(BGP協議 三)路由策略

目錄&#xff1a; 一、BGP路由匯總1、注&#xff1a;使用network命令注入的BGP不會被自動匯總2、主類網絡號計算過程如下&#xff1a;3.示例 開啟BGP路由自動匯總bgp100 開啟BGP路由自動匯總import-route 直連路由 11.1.1.0 /24對端 為 10.1.12.2 AS 2004.手動配置BGP路…

微信小程序中實現表單數據實時驗證的方法

一、實時驗證的基本實現思路表單實時時驗證通過監聽表單元素的輸入事件&#xff0c;在用戶輸入過程中即時對數據進行校驗&#xff0c;并并即時反饋驗證結果&#xff0c;主要實現步驟包括&#xff1a;為每個表單字段綁定輸入事件在事件處理函數中獲取當前輸入值應用驗證規則進行…

openpnp - 頂部相機如果超過6.5米影響通訊質量,可以加USB3.0信號放大器延長線

文章目錄openpnp - 頂部相機如果超過6.5米影響通訊質量&#xff0c;可以加USB3.0信號放大器延長線概述備注ENDopenpnp - 頂部相機如果超過6.5米影響通訊質量&#xff0c;可以加USB3.0信號放大器延長線 概述 手頭有1080x720x60FPS的攝像頭模組備件&#xff0c;換上后&#xff…

【驅動】RK3576-Debian系統使用ping報錯:socket operation not permitted

1、問題描述 在RK3576-Debian系統中,連接了Wifi后,測試網絡通斷時,報錯: ping www.csdn.net ping: socktype: SOCK_RAW ping: socket: Operation not permitted ping: => missing cap_net_raw+p capability or setuid?2、原因分析 2.1 分析打印日志 socktype: SOCK…

opencv:圖像輪廓檢測與輪廓近似(附代碼)

目錄 圖像輪廓 cv2.findContours(img, mode, method) 繪制輪廓 輪廓特征與近似 輪廓特征 輪廓近似 輪廓近似原理 opencv 實現輪廓近似 輪廓外接矩形 輪廓外接圓 圖像輪廓 cv2.findContours(img, mode, method) mode:輪廓檢索模式&#xff08;通常使用第四個模式&am…

mtrace定位內存泄漏問題(僅限 GNU glibc 的 Linux)

一、mtrace原理 函數攔截機制&#xff1a;mtrace 利用 glibc 的內部機制&#xff0c;對 malloc() / calloc() / realloc() / free() 等內存函數進行 hook&#xff0c;記錄每一次分配和釋放行為。日志記錄&#xff1a;記錄會寫入 MALLOC_TRACE 環境變量指定的日志文件中&#xf…

高校合作 | 世冠科技聯合普華、北郵項目入選教育部第二批工程案例

近日&#xff0c;教育部學位與研究生教育發展中心正式公布第二批工程案例立項名單。由北京世冠金洋科技發展有限公司牽頭&#xff0c;聯合普華基礎軟件、北京郵電大學共同申報的"基于國產軟件棧的汽車嵌入式軟件開發工程案例"成功入選。該項目由北京郵電大學修佳鵬副…

TOMCAT筆記

一、前置知識&#xff1a;Web 技術演進 C/S vs B/S – C/S&#xff1a;Socket 編程&#xff0c;QQ、迅雷等&#xff0c;通信層 TCP/UDP&#xff0c;協議私有。 – B/S&#xff1a;瀏覽器 HTTP&#xff0c;文本協議跨網絡。 動態網頁誕生 早期靜態 HTML → 1990 年 HTTP 瀏覽…