[51單片機] 以PWM控制直流電機為例建一個簡單的51工程框架


目錄

1)功能概述

2)引腳連接

3)框架介紹

4)模塊說明

5)復用規則

6)工程鏈接


 

1)功能概述

  名稱:獨立按鍵控制直流電機調速
  內容:對應的電機接口需用杜邦線連接到uln2003電機控制端;
     使用5V-12V 小功率電機皆可 2個按鍵分別加速和減速;
     采用8個8段數碼管的后兩位顯示0~10級速度;


 

2)引腳連接

  P3連接按鍵;P0連接8x八段數碼管,P22段碼鎖存,P23位碼鎖存;P1.1連接ULN2003的一個輸入;直流電機端連接ULN2003對應的輸出,另一端連接VCC。


 

3)框架介紹

  本文主要目的不是介紹如何實現功能,而是如何做一種方便復用和理解的框架。如下圖左USER文件中的文件屬於最高層(離用戶最近);FUNC文件夾中的文件屬於功能層(用戶層文件可以調用功能層實現的各種功能,同時功能層內部也有少量的相互調用);INTE文件夾主要是中斷層(本來想把中斷單獨拿出來,但是中斷子程序和用戶層交叉太多,所以僅在這里實現中斷初始化函數,中斷子程序依然放在main.c文件中)

注:注意main.c中的引用!(因為在keil里的文件夾和外部並沒有直接對應關系,外部是我手動建的)


 

4)模塊說明

--> 4.1 delay說明:對外提供兩個延時函數(在I2C、按鍵消抖等地方要用到)

1 #include<reg52.h>
2 
3 void DelayUs2x(unsigned char t);//us級延時函數聲明 
4 void DelayMs(unsigned char t); //ms級延時

 

--> 4.2 key8說明:對外提供按鍵掃描函數,如果有按鍵按下則返回對應的鍵值(這是8按鍵的,不是4x4的)

1 #include<reg52.h>
2 
3 #define KeyPort P3
4 
5 unsigned char KeyScan(void);//按鍵掃描函數,返回掃描鍵值

應用示例:如下KeyScan()被調用來檢測按鍵實現按鍵控制功能~

 

--> 4.3 led8說明:對外提供在8x八段數碼管顯示功能(這里要做特殊處理)

1 #include<reg52.h>
2 
3 #define DataPort P0 //定義數據端口 程序中遇到DataPort 則用P0 替換
4 sbit LATCH1=P2^2;//定義鎖存使能端口 段鎖存
5 sbit LATCH2=P2^3;//                 位鎖存
6 
7 void Display(unsigned char FirstBit,unsigned char Num);

應用示例:如下把要顯示的2位的整數PWN_ON顯示在8X八段數碼管上。在1的地方要分別取PWN_ON的十位和個位然后通過DuanMa轉換為相應的數碼管燈的顯示數值;然后在中斷或具有頻繁周期刷新的函數體內調用display函數進行顯示(display的第一個參數是選擇8x八段數碼管的第幾位開始顯示,0表示從第1位開始;第二個參數是說明要顯示幾位)

特別注意:這里的display(6,2)意思是把一個兩位整數顯示在8個數碼管的后兩個上,而給TempData賦值並不是TempData[6]和TempData[7]!


 

5)復用規則

今后便可采用相同的方法不斷擴充FUNC層,當遇到具體問題可以在main和中斷中做調整。


 

6)工程鏈接

https://github.com/beautifulzzzz/stc89c51-or-stc89c52

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM