51單片機製作簡易電風扇定時控制器

2021-02-23 單片機與嵌入式

一,設計思路:

開始通過手動鍵給單片機供電。直到電源指示燈LED4亮.單片機運行,繼電器2工作給單片機供電。通過按鍵設置繼電器2的工作時間,實現系統的自動斷電,通過設置繼電器1的工作時間,實現風扇的間歇轉動,實現節能。

1. 顯示部分:通過按鍵,在風扇轉動時間,暫停時間,和系統關閉剩餘時間切換顯示。數碼顯示兩位,為「分」走時,其中系統關閉剩餘時間為「小時」走時,LED為紅,黃,藍,分別點亮對應的風扇轉動,暫停,和系統關閉剩餘時間的狀態。

2. 按鍵部分:

l K1為時間調整移位鍵,按下此鍵,數碼閃爍,同時對應的燈閃爍。在風扇轉動時間,暫停時間,和系統之間切換

l K2為加一和狀態切換顯示鍵,當有K1按下,為時間加1。否則,在在風扇轉動時間,暫停時間,和系統之間切換顯示。

l K3為減1和備用鍵,當有K1按下,為時間加1,否則無效。

3. 繼電器部分:

l 繼電器1控制風扇的電源線,實現風扇的轉動和暫時。

l 繼電器2控制單片機系統的電源,實現系統定時關閉。

二,原理圖

三,程序清單

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

系統名稱:電風扇簡易定時控制器

創鍵人:w418781840 日期:2008.7.6

系統功能:

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

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

函數名稱: 聲明區

功能描述:

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

#include

#define uchar unsigned char

#define uint unsigned int

#define SEG P0 //數碼管段選.

#define DIG P2 //數碼管位選

uchar dis[2]; //數碼驅動組

uchar code TAB[]={ 0xC0,0xF9,0xA4,0xB0,0x99,//0-4共陽.

0x92,0x82,0xF8,0x80,0x90,0xff};//5-9,熄滅符

uchar start,stop,close,sum,time; //各其本變量

uchar fliflag,cflag,zflag,x,y;//各標誌位

uint count_T0,count_T1,c_count; //計數變量

sbit K1=P3^7; //功能移位鍵

sbit K2=P3^2; //加一鍵和切換移位鍵.

sbit K3=P3^3; //減一.

sbit RLED=P2^2; //紅燈,表風扇轉動狀態.

sbit YLED=P2^3; //黃燈,表風扇暫停狀態

sbit BLED=P2^4; //藍燈,表系統狀態

sbit CLED=P2^6; //風扇控制位

sbit ZLED=P2^7; //系統工作控制位

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

函數名稱:延時1MS函數

功能描述:顯示調用.

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

void delay1ms(uchar x)

{

uchar i,j;

for(i=0;i for(j=0;j<120;j++);

}

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

函數名稱:顯示函數

功能描述: 顯示分走時,兩位顯示.

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

void display(void)

{

uchar i,scan=1;

for(i=0;i<2;i++)

{ SEG=0xff;

DIG=~scan;

SEG=TAB[dis[i]];

delay1ms(5);

scan<<=1;

}

}

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

函數名稱:延時5MS函數

功能描述:按鍵消抖調用.

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

void delay5ms(uchar x)

{

uchar j;

for(j=0;j display();

}

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

函數名稱: 初始化函數

功能描述: 各變量初始化.

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

void init()

{ fliflag=0;//閃爍標誌.

cflag=1; //風扇狀態標誌.

zflag=0; //轉動標誌.

x=30; //暫存

y=10; //暫存

CLED=1;//系統工作.

sum=0; //移位

start=30; //風扇轉動時間

stop=10; // 暫停時間.

close=5; //系統關閉剩餘時間

count_T0=0; //T0,T1相關

count_T1=0;

c_count=0;

TMOD=0x11;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

TH1=(65536-50000)/256;

TL1=(65536-50000)%256;

EA=1;

ET0=1;

ET1=1;

TR0=1;

}

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

函數名稱: 分離函數

功能描述: 分離顯示十位,個位

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

void disnner(void)

{ if(cflag==1)//1

{ RLED=0;YLED=1;BLED=1;//紅燈閃爍.

time=start; //顯示轉動時間.

}

if(cflag==2)

{ RLED=1;YLED=0;BLED=1;

time=stop;

}

if(cflag==3)

{ RLED=1;YLED=1;BLED=0;

time=close;

}

dis[0]=time/10;

dis[1]=time%10;

}

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

函數名稱:T0中斷函數

功能描述: 產生1分鐘.

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

void timer0(void)interrupt 1

{ TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

if(++count_T0==1200)//一分鐘.

{ count_T0=0;

if(zflag==0) //為0

{ ZLED=1; //則轉動.

if(start!=99)//轉動時間為99,顯示99,不切換標誌.一直轉動.

{

start--; //不,則倒計時.

if(start==0)

{ zflag=1;//倒時時間到.切換標誌.

cflag=2;

start=x;//重賦值

}

}

}

else

{ ZLED=0; //否則暫停.

stop--; //倒計時計數.

if(stop==0)

{ cflag=1; //時間到.

zflag=0;

stop=y;

}

}

if(close!=99)//系統時間為99,顯示99,系統一直工作..

{ if(++c_count==60) //對一分計數60,即一小時後.

{ c_count=0;

close--; //做一小時倒計時.

if(close==0) //時間到,系統斷電.

CLED=0; //低電平有效.

}

}

}

disnner();//分離.送顯示/

}

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

函數名稱:T1中斷服務函數

功能描述: 調整時間閃爍用.

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

void timer1(void)interrupt 3

{

TH1=(65536-50000)/256;

TL1=(65536-50000)%256;

if(++count_T1==6)//閃爍周期30MS

{

count_T1=0;

fliflag=~fliflag; //切換

if(fliflag==0) //標誌有效.

{

if(sum==1)cflag=1;//選用狀態閃爍.

if(sum==2)cflag=2;

if(sum==3)cflag=3;

disnner(); //閃爍用.

dis[0]=10; //放熄滅符.

dis[1]=10;

}

else //否則,正常顯示.

{

RLED=1;YLED=1;BLED=1;

dis[0]=time/10;

dis[1]=time%10;

}

}

}

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

函數名稱:鍵掃描函數

功能描述: 調整時間

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

void scanner(void)

{ if(K1==0) //為0,表有鍵按下.

{

delay5ms(100);//延時500MS.

if(K1==0) //還按下.剛退出.

{

while(K1==0)display();//等待釋放.

delay5ms(2); //消抖.

cflag=1; //退出顯示狀態1.

count_T0=0;

TR0=1; //啟動T0

TR1=0; //關閃爍

sum=0; //歸位.

x=start; //暫存.

y=stop; //暫存.

}

else

{ //否則,有移位鍵按下.

TR0=0; //時間走動停止.

TR1=1; //開閃爍.

sum++; //移位.

if(sum==4)

sum=1;

}

}

if(K2==0)

{

delay5ms(2);

if(K2==0)

{

while(K2==0)display();

delay5ms(2);

if(sum) //有移位

{ if(sum==1)

{

start++;

if(start==61)

start=99;

if(start==100)

start=30;

}

if(sum==2)

{

stop++;

if(stop==61)

stop=5;

}

if(sum==3)

{

close++;

if(close==9)

close=99;

if(close==100)

close=1;

}

}

else //沒移位.

{

cflag++; //則進行顯示狀態移位.

if(cflag==4)

cflag=1;

}

}

}

if(K3==0)

{

delay5ms(2);

if(K3==0)

{

while(K3==0)display();

delay5ms(2);

if(sum==1)

{ start--;

if(start==29)

start=99;

if(start==98)

start=60;

}

if(sum==2)

{ stop--;

if(stop==4)

stop=60;

}

if(sum==3)

{ close--;

if(close==0)

close=99;

if(close==98)

close=8;

}

}

}

}

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

函數名稱:主函數

功能描述:

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

main()

{

init();

while(1)

{

display();//顯示

scanner(); //檢測按鍵..

}

}

       

相關焦點

  • 電風扇陣風控制器電路圖
    電風扇陣風控制器就是一個周期性自動控制通斷的電子開關,它可以讓電風扇斷續工作(時轉時停)而模擬出自然風的效果。
  • 51單片機C語言中斷程序 定時/計數器
    gt;SerialValue)  {   i=0;   led1=!led1;  } } 實用乾貨下載:關注我們「單片機系列」,回復「資料」獲取單片機相關資料。一起走向智能工業革命時代,單片機DIY、基於c語言/彙編的編程。
  • MCS-51單片機內部結構
    8051是MCS-51系列單片機的典型產品,其特性與我們實驗的STC89C52RC完全相同,這裡以8051為例簡介一下單片機的基本知識。
  • 最簡單DIY基於藍牙、51單片機和舵機的鋼鐵愛國者機關槍控制器
    在上一期免費51單片機和舵機開源項目中:最簡單DIY基於51單片機的舵機控制器,我簡述了舵機的控制原理和分享一個舵機控制的程序當時的源碼還是借鑑了網上一些相關的資源。所以就直接免費了。那麼這次源碼進行了大幅度的升級,用52單片機定時器0輸出兩路PWM波來控制兩個自由度的舵機,用定時器1組成波特率發生器控制串口藍牙,加上鐳射雷射模塊,代碼寫得非常精簡和奇妙,最終研製成功了鋼鐵愛國者機關槍控制器。下面是設備的全家福照。
  • 51單片機入門基礎教程
    來源:文章來自網絡論壇第一節、機基礎知識一、單片機概念1、單片機:在一片集成電路晶片上集成微處理器(CPU)、存儲器(ROM和RAM)、I/O接口電路,從而構成了單晶片微型計算機,即單片機(single chip Microcomputer)也叫微控制器(MCU)。
  • 51單片機存儲器詳解
    MCS-51具有64kB程序存儲器尋址空間,它是用於存放用戶程序、數據和表格等信息。對於內部無ROM的8031單片機,它的程序存儲器必須外接,空間地址為64kB,此時單片機的端必須接地。強制CPU從外部程序存儲器讀取程序。
  • 51單片機做的藍牙開關
    (補充一下,我發現12M的晶振不能用11.0592M的數據,原因是定時 器計數產生的波特率與9600差距有點大,誤差到達了8.5%左右,理論上誤差要小於4%才能正常通信,所以通信有錯誤,雖然能通信,但是數據不對,後來 我把晶振換回來就可以了,看來要實踐才知道真理。)
  • 單片機內部結構詳解(以MCS-51為例)
    單片機內部結構詳解(以MCS-51為例)MCS-51單片機結構MCS-51系列單片機產品有8051,8031,8751
  • [原創圖書]51單片機C語言基礎程序設計
    51單片機C語言基礎程序設計,是知創學院Jason大學期間學習51單片機時總結整理的一本51單片機C語言程序設計的基礎入門圖書
  • 【教程】51單片機輕鬆入門與實踐教程
    結合軟體和硬體,由淺入深、通俗易懂地介紹了51單片機應用系統開發的流程、方法、技巧和設計思想。本書通過30個模塊實例全面講解單片機開發中的各種技術,包括單片機接口的擴展、存儲器的擴展、輸入/輸出及顯示技術、實用電子製作、傳感控制技術、電氣傳動及控制技術、單片機通信技術、典型器件及應用技術、外圍電路設計、軟體編程等等內容。本套課程基於暢學51開發板講解。包含:51單片機簡介、寄存器設置及使用、硬體測試、各個應用模塊器件原理及使用、外圍電路設計、51單片機C語言編程。
  • 一文教你用51單片機做藍牙開關
    操作界面,很簡單,打開之後打開藍牙,然後點擊搜索設備,找到你的模塊名字,點擊之後就可以連接了,連接之後下面會顯示藍牙的名稱和地址信息2.單片機程序, 這個程序也很簡單,只要學過一些單片機程序的人應該都知道吧,串口通信,設置好通信的波特率,初始化工作做好,然後在串口中斷程序裡寫上你要做的事情就可 以了,這裡雖然說11.0592的晶振定時器初值為fd,但是如果用12m的晶振也是可以的
  • 51單片機藍牙點燈程序
    適用於:stc15f2k60s2型號單片機(其它型號的51單片機如果想用這個程序,就得修改程序的波特率和某一些的地方才能用)藍牙模塊:hc-05模塊你用手機給藍牙發個0,led燈亮,發個1,led燈滅單片機源程序如下:#include <stc15f2k60s2.h>#include <intrins.h>#define uchar
  • 51單片機函數波形發生器
    這裡介紹一個基於51單片機的函數波形發生器實現方式,包括軟體和硬體實現原理介紹。
  • 51單片機寄存器功能一覽表
    在51單片機內部有一個CPU用來運算、控制,有四個並行I/O口,分別是P0、P1、P2、P3,有ROM,用來存放程序,有RAM,用來存放中間結果,此外還有定時/計數器,串行I/O口,中斷系統,以及一個內部的時鐘電路。在單片機中有一些獨立的存儲單元是用來控制這些器件的,被稱之為特殊功能寄存器(SFR)。
  • 學51單片機必看!51單片機導論
    一:單片機引腳單片機,STC89C52:單片機全稱單片微型計算機;
  • STM32單片機輕鬆入門與實踐 — 暢學單片機
    本課程打破了單片機教學的傳統模式,採取實例模塊製作的方法,從該模塊需用到的單片機理論知識,再加上該模塊用到的「器件介紹」環節,外圍電路設計講解部分以及要實現該模塊的軟體功能-編程詳解,巧妙地將單片機原理與應用、外圍電路設計、單片機C語言編程的知識點融入各個模塊項目中,不僅開闢了單片機應用的視野,又充實了對單片機從基礎到應用所需要的知識。
  • 掌握方法與技巧輕鬆學習51單片機
    單片機是微機的一種,現時有8051、AVR、ARM7、ARM9等系列,其中 「8051」是源自於Intel公司的MCS-51系列晶片,但目前不同生產廠商都以其兼容晶片為主,如Ateml公司的89C51/89S51系統,宏晶公司的STC89C52RC。
  • 掌握方法與技巧,輕鬆玩轉51單片機
    ,如Ateml公司的89C51/89S51系統,宏晶公司的STC89C52RC。學習51系列的CPU需要記憶腳位功能,我學習的時候得益於其簡單的熟記方法,腳位的功能與位置掌握得很快,不用死記硬背,就可以輕鬆記住P0、P1、P2、P3的腳位,請看下圖:學習好腳位功能後,如果要啟動單片機的電路還需要了解外圍連接,這樣才能為日後自己製作單片機控制電路打下基礎。
  • 51單片機簡單交通燈控制程序
    ******************************************************************************/1、用protues進行原理圖繪製2、用keil軟體進行代碼編寫與調試3、Keil + protues進行仿真實驗4、處理器採用Atmel公司的AT89C51
  • STM32單片機和51單片機有何區別?
    ▼ 51單片機特性51單片機之所以成為經典,成為易上手的單片機主要有以下特點:從內部的硬體到軟體有一套完整的按位作業系統,稱作位處理器,處理對象不是字或字節而是位。不但能對片內某些特殊功能寄存器的某位進行處理,如傳送、置位、清零、測試等,還能進行位的邏輯運算,其功能十分完備,使用起來得心應手。