單片機學習筆記.PWM

PWM原理:?

  • 頻率=\frac{1}{?{t{s}}}
  • 占空比:\frac{?{t{H}}}{?{t{s}}}
  • 精度=占空比變化步距?

?電機驅動電路:


利用PWM實現呼吸燈代碼?

sbit LED=P2^0;//引腳定義
unsigned char Time,i;//變量定義
void Delay(unsigned int t)//定義延時
{while(t--);
}

main函數里:

int main()
{unsigned char Time,i;while(1){for(Time=0;Time<255;Time++)//呼吸燈{for(i=0;i<20;i++){LED=0;Delay(Time);LED=1;Delay(255-Time);}}for(Time=255;Time>0;Time--){for(i=0;i<20;i++){LED=0;Delay(Time);LED=1;Delay(255-Time);}}}
}

?利用定時器中斷產生PWM波實現電機調速:

主函數:

#include <REGX52.H>
#include "Delay.h"
#include "key.h"
#include "SEG.h"
#include "timer.h"extern unsigned char Compare;
unsigned char KeyNum,Speed;
int main()
{TIM0_Init();while(1){KeyNum=Key();if(KeyNum==1){Speed++;Speed%=4;if(Speed==0){Compare=0;}if(Speed==1){Compare=50;}if(Speed==2){Compare=75;}if(Speed==3){Compare=100;}}SegDisplay(1,Speed);}
}

延時函數部分:

#include "Delay.h"void Delayms(unsigned char xms)		//@12.000MHz
{unsigned char i, j;while(xms){i = 2;j = 239;do{while (--j);}while (--i);xms--;}
}

按鍵部分:

#include "key.h"
#include <REGX52.H>
#include "Delay.h"extern unsigned char LEDMode;
extern unsigned int Password;
unsigned char Count=0;
/*** @brief  矩陣鍵盤讀取按鍵鍵碼* @param  傳入的參數 無* @retval 返回值 KeyNumber:按下按鍵的鍵碼值*/
unsigned char MatrixKey()//按列掃描
{unsigned char KeyNumber=0;P1=0XFF;P1_3=0;if(P1_7==0){Delayms(20);while(P1_7==0);Delayms(20);KeyNumber=1;}//按鍵釋放后有效if(P1_6==0){Delayms(20);while(P1_6==0);Delayms(20);KeyNumber=5;}if(P1_5==0){Delayms(20);while(P1_5==0);Delayms(20);KeyNumber=9;}if(P1_4==0){Delayms(20);while(P1_4==0);Delayms(20);KeyNumber=13;}P1=0XFF;P1_2=0;if(P1_7==0){Delayms(20);while(P1_7==0);Delayms(20);KeyNumber=2;}if(P1_6==0){Delayms(20);while(P1_6==0);Delayms(20);KeyNumber=6;}if(P1_5==0){Delayms(20);while(P1_5==0);Delayms(20);KeyNumber=10;}if(P1_4==0){Delayms(20);while(P1_4==0);Delayms(20);KeyNumber=14;}P1=0XFF;P1_1=0;if(P1_7==0){Delayms(20);while(P1_7==0);Delayms(20);KeyNumber=3;}if(P1_6==0){Delayms(20);while(P1_6==0);Delayms(20);KeyNumber=7;}if(P1_5==0){Delayms(20);while(P1_5==0);Delayms(20);KeyNumber=11;}if(P1_4==0){Delayms(20);while(P1_4==0);Delayms(20);KeyNumber=15;}P1=0XFF;P1_0=0;if(P1_7==0){Delayms(20);while(P1_7==0);Delayms(20);KeyNumber=4;}if(P1_6==0){Delayms(20);while(P1_6==0);Delayms(20);KeyNumber=8;}if(P1_5==0){Delayms(20);while(P1_5==0);Delayms(20);KeyNumber=12;}if(P1_4==0){Delayms(20);while(P1_4==0);Delayms(20);KeyNumber=16;}return KeyNumber;
}/*** @brief  獨立按鍵* @param  無* @retval 返回值 KeyNumber:按下按鍵的鍵碼值*/
unsigned char Key()
{unsigned char KeyNumber=0;if(P3_1==0){Delayms(20);while(P3_1==0);Delayms(20);KeyNumber=1;}//按鍵釋放后有效if(P3_0==0){Delayms(20);while(P3_0==0);Delayms(20);KeyNumber=2;}if(P3_2==0){Delayms(20);while(P3_2==0);Delayms(20);KeyNumber=3;}//按鍵釋放后有效if(P3_3==0){Delayms(20);while(P3_3==0);Delayms(20);KeyNumber=4;}return KeyNumber;
}

數碼管部分:

#include <REGX52.H>
#include "Delay.h"/*共陰斷碼0~9,A~F*/
unsigned char SegTable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};void SegDisplay(unsigned char Location,Number)//1位顯示數據
{switch(Location){case 1:P2_4=1;P2_3=1;P2_2=1;break;case 2:P2_4=1;P2_3=1;P2_2=0;break;case 3:P2_4=1;P2_3=0;P2_2=1;break;case 4:P2_4=1;P2_3=0;P2_2=0;break;case 5:P2_4=0;P2_3=1;P2_2=1;break;case 6:P2_4=0;P2_3=1;P2_2=0;break;case 7:P2_4=0;P2_3=0;P2_2=1;break;case 8:P2_4=0;P2_3=0;P2_2=0;break;}P0=SegTable[Number];
//	Delayms(1);/*消影:位選 段選(清0)位選 段選 位選 段選 */
//	P0=0x00;
}
void SegTest(void)
{unsigned char a=1,b=0;SegDisplay(a,b++);Delayms(1000);if(b==10){b=0;a++;}if(a==9){a=1;}}

定時器部分:

#include "timer.h"
#include <REGX52.H>
#include "INTRINS.H"unsigned char Compare;
sbit Motor=P1^0;/*** @brief  定時器0初始化,12Mhz,100us* @param  無* @retval 無*/
void TIM0_Init()
{//TMOD=0X01;//模式1TMOD&=0XF0;//	TMOD=TMOD&0XF0;//把TMOD的低4位清零,高4位不變TMOD|=0X01;//	TMOD=TMOD|0X01;//把TMOD的最低位置1,高4位不變TF0=0;TR0=1;//開始計時TL0 = 0x9C;		//設置定時初值TH0 = 0xFF;		//設置定時初值
//中斷配置ET0=1;EA=1;PT0=0;//關閉高優先級
}void TIM0_NVIC(void) interrupt 1
{static unsigned int Tim0_Count;TL0 = 0x9C;//重裝初值TH0 = 0xFF;	Tim0_Count++;
//	if(Tim0_Count>=100)
//	{
//			Tim0_Count=0;
//	}Tim0_Count%=100;//與上述效果一致if(Tim0_Count<Compare){Motor=1;}else{Motor=0;}
}

?利用定時器中斷產生PWM電機調速核心代碼:

extern unsigned char Compare;
unsigned char KeyNum,Speed;
int main()
{TIM0_Init();while(1){KeyNum=Key();if(KeyNum==1){Speed++;Speed%=4;if(Speed==0){Compare=0;}if(Speed==1){Compare=50;}if(Speed==2){Compare=75;}if(Speed==3){Compare=100;}}SegDisplay(1,Speed);}
}
void TIM0_NVIC(void) interrupt 1
{static unsigned int Tim0_Count;TL0 = 0x9C;//重裝初值TH0 = 0xFF;	Tim0_Count++;
//	if(Tim0_Count>=100)
//	{
//			Tim0_Count=0;
//	}Tim0_Count%=100;//與上述效果一致if(Tim0_Count<Compare){Motor=1;}else{Motor=0;}
}

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

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

相關文章

【Git】解決使用SSH連接遠程倉庫時需要多次輸入密碼的問題

問題產生的原因&#xff1a;你的SSH私鑰設置了密碼短語&#xff08;passphrase&#xff09;。解決問題的方法&#xff1a;使用SSH代理&#xff08;ssh-agent&#xff09;&#xff0c;ssh-agent是一個后臺運行程序&#xff0c;它會記住你解鎖過的SSH私鑰的密碼短語&#xff0c;這…

機器學習—邏輯回歸

一介紹邏輯回歸是處理二分類問題的線性模型&#xff0c;通過sigmoid函數將線性輸出映射到[0,1]&#xff0c;輸出事件發生概率&#xff0c;廣泛用于預測與分類。如果做坐標的話&#xff0c;特征就是p1和p2&#xff0c;結果就是y紅的與綠的 二Sigma函數代碼說明Sigmoid 函數定義&…

深入解讀OpenTelemetry分布式鏈路追蹤:原理與實踐指南

深入解讀OpenTelemetry分布式鏈路追蹤&#xff1a;原理與實踐指南 分布式系統在微服務架構下&#xff0c;服務調用鏈越來越復雜&#xff0c;追蹤單次請求在各個微服務之間的執行情況成為運維與性能優化的關鍵。作為新一代開源標準&#xff0c;OpenTelemetry為分布式追蹤、指標與…

【0基礎PS】PS工具詳解--圖案圖章工具

目錄前言一、圖案圖章工具基礎認知?二、工具選項欄參數詳解?三、圖案圖章工具應用案例?總結前言 在 Adobe Photoshop 這一強大的圖像處理軟件中&#xff0c;圖案圖章工具是一個獨具特色的功能&#xff0c;它允許用戶利用預先定義好的圖案進行繪畫操作。 一、圖案圖章工具基…

劇本殺小程序系統開發:構建數字化劇本殺生態圈

在快節奏的現代生活中&#xff0c;人們越來越渴望在閑暇之余找到一種既能放松心情又能增進社交的方式。劇本殺&#xff0c;作為一種集推理、表演、社交于一體的新興娛樂形式&#xff0c;恰好滿足了這一需求。然而&#xff0c;隨著市場的不斷擴大&#xff0c;如何保持劇本殺的新…

【DL學習筆記】計算圖與自動求導

計算圖計算圖&#xff08;Computation Graph&#xff09;是一種用于描述計算過程的圖形化表示方法。在深度學習中&#xff0c;計算圖通常用于描述 網絡結構、運算過程 和數據流向。計算圖是一種有向無環圖&#xff0c;用圖形方式來表示算子與變量之間的關系&#xff0c;直觀高效…

大型地面光伏電站開發建設流程

?地面電站特特點&#xff1a;規模大&#xff0c;通常占用土地、水面等&#xff0c;地面式選址選項多&#xff0c;且不斷拓展出新的用地模式&#xff0c;地面式選址集中在山體、灘涂、沼澤、戈壁、沙漠、受污染土地等閑置或廢棄土地上。

除數博弈(動態規劃)

愛麗絲和鮑勃一起玩游戲&#xff0c;他們輪流行動。愛麗絲先手開局。最初&#xff0c;黑板上有一個數字 n 。在每個玩家的回合&#xff0c;玩家需要執行以下操作&#xff1a;選出任一 x&#xff0c;滿足 0 < x < n 且 n % x 0 。用 n - x 替換黑板上的數字 n 。如果玩家…

一起學springAI系列一:初體驗

Spring AI是干嘛的官網最權威&#xff0c;直接粘貼&#xff1a;“Spring AI”項目旨在簡化那些包含人工智能功能的應用程序的開發過程&#xff0c;同時避免不必要的復雜性。AI相關領域的功能對python的支持是最好的&#xff0c;相關供應商在出了啥功能的時候&#xff0c;都會優…

Ext JS極速項目之 Coworkee

ExtJS Coworkee 是什么? Ext JS 的 Coworkee 是一個由 Sencha 官方提供的完整員工管理應用示例,旨在展示 Ext JS 框架在企業級應用開發中的能力。 在線試用的地址是: https://examples.sencha.com/coworkee/#home 頁面效果與布局 登錄頁面: 主頁效果 左右分區結構:左…

飛算科技:原創技術重塑 Java 開發,引領行業數智化新浪潮

在科技革新的浪潮中&#xff0c;飛算科技作為一家堅持自主創新的數字科技企業&#xff0c;同時也是國家級高新技術企業&#xff0c;正深耕互聯網科技、大數據、人工智能等前沿領域&#xff0c;為眾多企業的數字化與智能化轉型提供強勁動力。?飛算科技的成長軌跡&#xff0c;是…

cesium FBO(一)渲染到紋理(RTT)

一聽到三維的RTT&#xff08;Render To Texture&#xff09;&#xff0c;似乎很神秘&#xff0c;但從底層實現一看&#xff0c;其實也就那樣&#xff0c;設計API的哪些頂級家伙已經幫你安排的明明白白了&#xff0c;咱們只需要學會怎么用就可以了。我認為得從WebGL入手&#xf…

PNP機器人機器人學術年會展示靈巧手動作捕捉方案。

2025年8月1-3日&#xff0c;第六屆中國機器人學術年會&#xff08;CCRS2025&#xff09;在長沙國際會議中心舉行&#xff0c;主題“人機共融&#xff0c;智向未來”。PNP機器人與靈巧智能聯合展出最新靈巧手模仿學習方案&#xff1a;基于少量示教數據即可快速復現復雜抓取動作&…

【45】C#入門到精通——C#調用C/C++生成動態庫.dll及C++ 生成動態庫.dll ,DllImport()方式導入 C++動態庫.dll方法總結

文章目錄1 C 生成動態庫.dll2 C#調用C/C生成動態庫.dll2.1 [DllImport()] 方式導入 C動態庫.dll2.2 調用測試3 C/C 生成通用dll,改進3.1改進后.h3.2 .cpp3.2 C# 調用4 [DllImport()] 方式導入C生成的 .dll 總結4.1 指定路徑導入4.2 .dll放在 執行目錄下&#xff08;一定要放對&…

從協議棧到ath12k_mac_op_tx的完整調用路徑

文章目錄 從協議棧到ath12k_mac_op_tx的完整調用路徑 1. 整體架構概覽 2. 詳細調用路徑分析 2.1 應用層到Socket層 2.2 協議層處理 2.3 網絡設備層到mac80211 2.4 mac80211發送入口 2.5 mac80211核心發送處理 2.6 mac80211發送核心處理 2.7 mac80211發送調度 2.8 最終驅動調用 …

WPFC#超市管理系統(4)入庫管理

入庫管理7. 商品入庫管理7.2 入庫實現顯示名稱、圖片、單位7.3 界面設計7.3 功能實現7. 商品入庫管理 數據庫中StockRecord表需要增加商品出入庫Type類型為nvarchar(50)。C#中的數據庫重新同步StockRecord表在Entity→Model中新建枚舉類型StockType namespace 超市管理系統.E…

CSS 打字特效

效果圖.wxml <view class"tips"><text>{{ tipsText }}</text><text class"tips-line">|</text> </view>.wxss .tips{padding: 50rpx 100rpx;font-size: 28rpx; } .tips-line{color: #ccc;animation: tips-line .5s al…

直播小程序 app 系統架構分析

一、引言 直播行業近年來發展迅猛&#xff0c;直播小程序和 APP 成為眾多用戶獲取直播內容以及主播進行內容輸出的重要平臺。一個完善且高效的系統架構是支撐直播業務穩定運行、提供優質用戶體驗的關鍵。本文將詳細剖析直播小程序 / APP 的系統架構&#xff0c;包括整體架構設計…

Vue常見題目

1. 什么是 Vue.js&#xff1f;它的核心特點是什么&#xff1f; Vue.js 是一個漸進式 JavaScript 框架&#xff0c;用于構建用戶界面。它的核心特點包括&#xff1a; - 響應式數據綁定 - 組件化開發 - 虛擬 DOM - 指令系統 - 輕量級且易于集成 - 豐富的生態系統&#xff08;Vue…

ipynb文件直接發布csdn

第一步&#xff0c;下載markdown文件 file --> save and export notebook as --> markdown第二步&#xff0c;導入markdown文件 進入csdn發布文章界面&#xff0c;點擊導入&#xff0c;選擇第一步下載的markdown文件即可