新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 51單片機控制的微波爐定時程序

51單片機控制的微波爐定時程序

作者: 時間:2012-08-15 來源:網絡 收藏

//免責聲明:這是的定時功能 純?yōu)榧夹g交流、學習之用。
//轉載、使用者切莫用于不正當的用途,一切后果由轉截/使用者自行負責
//按下獨立鍵盤RD按鍵,每按一次增加60秒,按下INT1啟動,按下INT0停止
//我們知道是不會自動運行的,得手動啟動

#include reg52.h>
#define uint unsigned int
#define uchar unsigned uchar
sbit duan=P2^5;
sbit wei=P2^6;
const unsigned char table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,

0x88,0x83,0xC6,0xA1,0x86,0x8E,0xBF}; //數碼管數組
uint bai=0,gg=16,shi=0,ge=0,x;
uint time=60,tt=0; //uint tt,time;

void init()
{

TMOD=0x01;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;
EA=1;

ET0=1;

TR0=0;

}

void scan()
{
if(RD==0)
{
while(!RD);
time=time+60;
}
if(INT0==0)TR0=0;
if(INT1==0)TR0=1;
}
void fuzhi()
{
bai=time/60;
shi=time%60/10;
ge=time%10;
}
uint jishi()
{
if(tt==20)
{
tt=0;
time--;if(time==0)TR0=0; //這個位置不能動,time--必須在if(tt==20)里
}
}
//-------------------函數聲明--------------------------
void disp(uint bai,uint gg,uint shi,uint ge);

void delay(uint x)
{
uint a,b;
for(a=x;a>0;a--)
for(b=110;b>0;b--);
}
void main()
{
init();
while(1)
{
jishi();
scan();

fuzhi();
disp(bai,gg,shi,ge);
if(INT1==0)TR0=1;
}
}
//------------------------------------------------
void disp(uint bai,uint gg,uint shi,uint ge)
{
duan=1;P0=table[bai];duan=0;
wei=1;P0=0x02;wei=0;
delay(5);

duan=1;P0=table[gg];duan=0;
wei=1;P0=0x04;wei=0;
delay(2);

duan=1;P0=table[shi];duan=0;
wei=1;P0=0x08;wei=0;
delay(5);

duan=1;P0=table[ge];duan=0;
wei=1;P0=0x10;wei=0;
delay(5);

}
void tming0() interrupt 1
{
TH0=(65536-50000)/256;

TL0=(65536-50000)%256;
tt++;

}


//-----------------------------------------------

//
//每按一次RD增加60秒,每按一次WR減少60秒,每按一次T1增加30秒,每按一次T0減少30秒
//按下INT1啟動,按下INT0停止
//我們知道微波爐是不會自動運行的,得手動啟動,所以設定好定時時長后按下INT0啟動。結束后蜂鳴器響3聲
//已完善的程序見另一章文章:
//免責聲明:這是模擬微波爐的定時



評論


相關推薦

技術專區(qū)

關閉