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