1. 畫出控制系統(tǒng)的框圖,說明系統(tǒng)方案設(shè)計(jì)的思路、理由或依據(jù);
2. 選擇、確定組成控制系統(tǒng)的各個(gè)單元,并闡述選擇確定的原則或依據(jù);
3. 畫出完整的電氣原理圖,介紹整體電路的工作原理、性能或特點(diǎn);
4. 如采用單片機(jī)控制,給出單片機(jī)程序的流程圖和清單,說明程序的工作原理。
5. 制作實(shí)物電路,驗(yàn)證設(shè)計(jì)、制作是否正確。
#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
uchar gewei,shiwei;
uchar xiyitime,num3;
uchar shuiweizhi,shuiwei;
uint num1,num2;
sbit wei1=P1^0;
sbit wei2=P1^1;
sbit wei3=P1^2;
sbit wei4=P1^3;
sbit shuiwei0=P1^4; //
sbit shuiwei1=P1^5; //低水位
sbit shuiwei2=P1^6; //中水位
sbit shuiwei3=P1^7; // 高水位
sbit shezhi_key=P2^0;
sbit qidong_key=P2^1;
//sbit xiyi_key=P2^0;
sbit up_key=P2^2;
sbit down_key=P2^3;
sbit shuifa=P2^4;
sbit paishuifa=P2^5;
sbit zhengzhuang=P2^6;
sbit fanzhuang=P2^7;
sbit tuoshui=P3^6;
sbit zhishiled=P3^7;
//此表為 LED 的字模, 共陰數(shù)碼管 0-9 -
unsigned char code segtab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e}; //段碼控制
unsigned char code segtab1[]={0x40,0x4F,0x24,0x30,0x19,0x12,
0x02,0x78,0x00,0x10}; //共陰0-9帶小數(shù)點(diǎn)編碼
//延時(shí)X毫秒函數(shù)11.0592Mhz時(shí)
void delay_xms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
//延時(shí)X秒函數(shù)
void delay_s(uint xs)
{
uint x;
for(x=xs;x>0;x--)
delay_xms(1000);
}
//延時(shí)X分鐘函數(shù)
void delay_min(uint xmin)
{
uint m,n;
for(m=xmin;m>0;m--)
for(n=60;n>0;n--)
delay_s(1);
}
//取操作數(shù)的個(gè)十位
void chuli(uint num)
{
gewei=num%10;
shiwei=(num/10)%10;
}
//按鍵掃描函數(shù)
void keysaomiao()
{
uchar jianzhi;
if(shezhi_key==0)
{
delay_xms(10);
if(!shezhi_key)
{
jianzhi++;
if(jianzhi>2)
jianzhi=1;
while(!shezhi_key);
}
}
if(jianzhi==1) //水位設(shè)置
{
if(up_key==0)
{
delay_xms(10);
if(up_key==0)
{
shuiwei++;
if(shuiwei>3)
{
shuiwei=0;
}
while(!up_key);
}
}
if(down_key==0)
{
delay_xms(10);
if(down_key==0)
{
if(shuiwei<=0)
{
shuiwei=3;
}
shuiwei--;
while(!down_key);
}
}
chuli(shuiwei);
P0=segtab[gewei];
wei1=0;
delay_xms(5);
wei1=1;
P0=segtab[shiwei];
wei2=0;
delay_xms(5);
wei2=1;
P0=0xFE;
wei3=0;
delay_xms(5);
wei3=1;
P0=0x9C;
wei4=0;
delay_xms(5);
wei4=1;
}
if(jianzhi==2)
{
if(up_key==0)
{
delay_xms(10);
if(up_key==0)
{
xiyitime++;
if(xiyitime>12)
{
xiyitime=3;
}
while(!up_key);
}
}
if(down_key==0)
{
delay_xms(10);
if(down_key==0)
{
xiyitime--;
if(xiyitime<3)
{
xiyitime=12;
}
while(!down_key);
}
}
chuli(xiyitime);
P0=segtab[gewei];
wei1=0;
delay_xms(5);
wei1=1;
P0=segtab[shiwei];
wei2=0;
delay_xms(5);
wei2=1;
P0=0xF7;
wei3=0;
delay_xms(5);
wei3=1;
P0=0xA3;
wei4=0;
delay_xms(5);
wei4=1;
}
}
//水位檢測(cè)子函數(shù)
void shuiweijiance()
{
if(shuiwei0==0)
{
delay_xms(10);
if(shuiwei0==0)
{
shuiweizhi=0;
while(!shuiwei0);
}
}
if(shuiwei1==0)
{
delay_xms(10);
if(shuiwei1==0)
{
shuiweizhi=1;
while(!shuiwei1);
}
}
if(shuiwei2==0)
{
delay_xms(10);
if(shuiwei2==0)
{
shuiweizhi=2;
while(!shuiwei2);
}
}
if(shuiwei3==0)
{
delay_xms(10);
if(shuiwei3==0)
{
shuiweizhi=3;
while(!shuiwei3);
}
}
}
//初始化函數(shù)
void init()
{
num2=60;
num3=4;
shuiweizhi=0;
xiyitime=3;
TMOD=0x01;
//TH0=(65536-45872)/256;//11.0592M晶振
//TL0=(65536-45872)%256;
TH0 = 0xB1;//12M晶振
TL0 = 0xE0;
EA=1;
ET0=1;
}
/************主函數(shù)**********************/
void main()
{
uint i,j;
init();
P0=0xbf;
wei1=0;
wei2=0;
wei3=0;
wei4=0;
while(qidong_key)
{
keysaomiao();//水位和洗衣時(shí)間設(shè)置
}
num3=xiyitime-1;
if(qidong_key==0)
{
delay_xms(10);
if(qidong_key==0)//啟動(dòng)鍵按下
{
shuifa=0; //開進(jìn)水閥進(jìn)水
while(shuiwei!=shuiweizhi)//檢測(cè)是否到達(dá)設(shè)定水位
{
shuiweijiance();
chuli(shuiweizhi);
P0=segtab[gewei];
wei1=0;
delay_xms(5);
wei1=1;
P0=segtab[shiwei];
wei2=0;
delay_xms(5);
wei2=1;
delay_xms(5);
chuli(shuiwei);
P0=segtab[gewei];
wei3=0;
delay_xms(5);
wei3=1;
P0=segtab[shiwei];
wei4=0;
delay_xms(5);
wei4=1;
}
while(i<100)
{
i++;
shuiweijiance();
chuli(shuiweizhi);
P0=segtab[gewei];
wei1=0;
delay_xms(5);
wei1=1;
P0=segtab[shiwei];
wei2=0;
delay_xms(5);
wei2=1;
delay_xms(5);
chuli(shuiwei);
P0=segtab[gewei];
wei3=0;
delay_xms(5);
wei3=1;
P0=segtab[shiwei];
wei4=0;
delay_xms(5);
wei4=1;
}
delay_s(1);
while(j<300)
{
j++;
chuli(shuiwei);
P0=segtab[gewei];
wei1=0;
delay_xms(5);
wei1=1;
P0=segtab[shiwei];
wei2=0;
delay_xms(5);
wei2=1;
chuli(xiyitime);
P0=segtab[gewei];
wei3=0;
delay_xms(5);
wei3=1;
P0=segtab[shiwei];
wei4=0;
delay_xms(5);
wei4=1;
}
shuifa=1;
zhishiled=0;
TR0=1;
while(!num3==0)
{
if(num2>=59)
zhengzhuang=0;
if(num2==55)
zhengzhuang=1;
if(num2==52)
fanzhuang=0;
if(num2==46)
fanzhuang=1;
if(num2==42)
zhengzhuang=0;
if(num2==35)
zhengzhuang=1;
if(num2==30)
fanzhuang=0;
if(num2==23)
fanzhuang=1;
if(num2==19)
zhengzhuang=0;
if(num2==13)
zhengzhuang=1;
if(num2==9)
fanzhuang=0;
if(num2==3)
fanzhuang=1;
}
TR0=0;
zhengzhuang=1;
fanzhuang=1;
paishuifa=0;
while(1)
{
if(shuiwei0==0)
delay_xms(10);
if(shuiwei0==0)
{
P0=0xbf;
wei1=0;
wei2=0;
wei3=0;
wei4=0;
tuoshui=0;
delay_min(1);
tuoshui=1;
paishuifa=1;
P0=0;
delay_s(2);
zhishiled=1;
break;
}
}
}
}
}
void zhongduangT0() interrupt 1
{
//TH0=(65536-45872)/256;//11.0592M晶振
//TL0=(65536-45872)%256;
TH0 = 0xB1;//12M晶振
TL0 = 0xE0;
num1++;
if(num1>=50)
{
num2--;
num1=0;
if(num2<=0)
{
num2=59;
num3--;
if(num3==0)
{
TR0=0;
}
}
}
chuli(num2);
wei1=0;
P0=segtab[gewei];
delay_xms(4);
wei1=1;
wei2=0;
P0=segtab[shiwei];
delay_xms(4);
wei2=1;
chuli(num3);
wei3=0;
P0=segtab1[gewei];
delay_xms(4);
wei3=1;
wei4=0;
P0=segtab[shiwei];
delay_xms(4);
wei4=1;
}