PIC單片機(jī)實(shí)例一:PROTEUS模擬豆?jié){機(jī)
1引言
目前,人們對生活的質(zhì)量要求越來越高,人們在忙于工作之余,豆?jié){機(jī)是一種新型的家用飲料機(jī),以黃豆為原料,直接加工成熟的熱豆?jié){。若在黃豆中配以芝麻、花生、杏仁等佐料,可以做出各種風(fēng)味的鮮美飲料。 豆?jié){機(jī)由粉碎黃豆的攪拌機(jī)、豆?jié){加熱器和控制電路三大部分組成。用單片機(jī)研制的全自動豆?jié){機(jī)的控制電路,只要按下啟動按鍵,豆?jié){機(jī)就開始工作,一會兒就能喝到美味又營養(yǎng)的豆?jié){。整個過程由單片機(jī)全自動控制,讓您用起來更加地方便、更加的安全。特用PROTEUS模擬,體驗(yàn)單片機(jī)的樂趣.
2豆?jié){機(jī)的功能
單獨(dú)加熱:具有單獨(dú)加熱功能,當(dāng)達(dá)到規(guī)定溫度時停止加熱。
自動工作:流程如下:在有水的情況下,電熱管開始加熱,當(dāng)水溫上升到82℃時,停止加熱,電機(jī)開始工作。電機(jī)每工作30S然后停止5S為一個周期,持續(xù)工作5個周期.當(dāng)豆?jié){產(chǎn)生的泡沫碰到防溢電極時,電機(jī)停轉(zhuǎn),等泡沫降下,電機(jī)繼續(xù)工作,當(dāng)泡沫碰到防溢電極10次后電機(jī)持續(xù)工作5個周期后,結(jié)束并報警。
全過程處于無水報警,停止工作狀態(tài):在單獨(dú)加熱、自動工作期間,任何時刻提起豆?jié){機(jī),都會停止工作并報警。當(dāng)重新將豆?jié){機(jī)放入水中后,回復(fù)以前工作狀態(tài)。
3系統(tǒng)總體方案介紹
硬件組成如圖所示,3個傳感器分別測量水位、溢出、溫度,2個按鍵,1個蜂鳴器輸出口,2種加熱方式選擇。
其中,RB1口通過繼電器觸點(diǎn)接的應(yīng)是電熱絲,但PROTEUS庫里沒有,只好用一個LED代替一下,只要燈亮說明電熱絲正在加熱.另外,三個傳感器均用開關(guān)表示,欠水檢測傳感器的開關(guān)閉后說明有水可以工作,否則不能正常開啟;溫度傳感器開關(guān)閉合說明加熱到指定溫度;溢水檢測傳感器開關(guān)閉合說明豆?jié){泡沫溢出.上述三個開關(guān)均只能手工開啟閉合模擬.選用單片機(jī)為PIC16F877A.
4.程序(C語言)
#include
unsigned int i=1,j=1,k=1,l,m,n=1,x,y,z;//定義程序用到的變量
void sound(void)//警報聲頻率子程序
{
for(z=1;z<=10;z++)
{
for(x=1;x<=100;x++)
{
RB2=0;
}
for(y=1;y<=100;y++)
{
RB2=1;
}
}
}
void main(void)//主程序
{//初始化
TRISB=0X00;
TRISC=0XFF;
PORTB=0X20;//電源指示開
while(1)
{
if(RC0==0)//檢測是否欠水{
if(RC4==0)//檢測加熱按鈕是否按下
{
while(RC1==1&&RC2==1)//檢測溫度是否達(dá)到規(guī)定,是否有溢出
{
RB6=1;//加熱指示
RB1=1;//加熱
}
sound();//加熱完畢報警
}
else
{
RB6=0;//關(guān)閉加熱指示
RB1=0;//關(guān)閉電熱絲
}
if(RC3==0)//全自動模式
{//定時器1初始化
T1CON=0X30;
TMR1IF=0;
TMR1IE=1;
TMR1L=0X2B;
TMR1H=0XCF;
while(RC1==1&&i<=6000)//加熱10分鐘
{
TMR1ON=1;
RB6=1;//加熱
RB1=1;
if(TMR1IF==1)
{
TMR1ON=0;
TMR1IF=0;
TMR1L=0X2B;//重新給初值
TMR1H=0XCF;
i++;
}
}
RB6=0;//停止加熱
RB1=0;
sound();//加熱結(jié)束報警
for(m=1;m<=5&&n<=10;m++)//電機(jī)循環(huán)5個周期
{
while(j<=300&&n<=10)//電機(jī)一周期工作30S
{
TMR1ON=1;
if(RC2==0)
{
n++;
}
while(RC2==0)
{
RB0=0;
RB7=0;
}
RB0=1;//MOTOR IS ON
RB7=1;
if(TMR1IF==1)
{
TMR1ON=0;
TMR1IF=0;
TMR1L=0X2B;
TMR1H=0XCF;
j++;
}
}
while(m==5)//5周期結(jié)束,報警5聲"滴"
{
sound();
for(l=1;l<=15000;l++)
{;}
sound();
for(l=1;l<=20000;l++)
{;}
sound();
for(l=1;l<=15000;l++)
{;}
sound();
for(l=1;l<=20000;l++)
{;}
sound();
m++;
}
sound();//每周期結(jié)束報警一聲
while(k<=50&&n<=10)//電機(jī)每周期停止5S
{
TMR1ON=1;
RB0=0;
RB7=0;
if(TMR1IF==1)
{
TMR1ON=0;
TMR1IF=0;
TMR1L=0X2B;
TMR1H=0XCF;
k++;
}
}
j=0;
k=0;
}
RB0=0;
RB7=0;
n=0;
}
}
}
}(由PROTEUS仿真通過)