洗衣机洗涤部分c语言程序,单片机全自动洗衣机控制程序及原理图等制作资料...

#include

#define  uchar unsigned char   //类型定义,方便书写

#define   uint unsigned int

uchar code roundz[] ={0x01,0x03,0x02,0x06,0x04,0x0C,0x08,0x09};   //步进电机正转控制数组

uchar code roundf[] ={0x08,0x0C,0x04,0x06,0x02,0x03,0x01,0x09};   //步进电机反转控制数组

uchar code disptab[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳极LED显示器显示码

sbit beep=P2^7;

sbit baiwei=P2^0;

sbit shiwei=P2^1;

sbit gewei=P2^2;          //数码管位选

uint num,sec;

#define K1 0x06

#define K20x5

#define K3 0x3   //按键码,分别检测三个按键是否有按下

sbit in_water=P3^3;

sbit out_water=P3^4;

sbit LED_bz=P3^5;

sbit LED_qr=P3^6;

sbit LED_sg=P3^7;        //5个LED灯,分别为进水,出水,标准,轻柔和甩干

//**************基本延迟函数************************************************

void delay(uint dcnt)  // 延迟时间为dcntms

{

uint i,j;

for(i=dcnt;i>0;i--)

for(j=120;j>0;j--);

}

//************定时器0控制倒计时*****************************************

void count_down() interrupt 1

{

int count ;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;   //定时器0每50ms产生一次中断;

count ++;

if(count == 20)          //每50*20=1s sec的值减1

{

count =0;

sec--;

if(sec==0)         //计时结束时,关闭总中断,电机停止转动。

{

EA=0;

P0=0xff;

P1=0xff;

P2=0xff;

P3=0xff;

while(1);

}

}

}

//***************倒计时的数码管显示程序*******************************

void display()  interrupt 3         //利用定时器1来进行数码管显示

{

TH1=(65536-5000)/256;               //每5ms扫描一次

TL1=(65536-5000)%256;

num=(num%3);

P0=0xff;  //消影

switch(num)

{

case 0:

P0=disptab[sec/100];

baiwei=1;   shiwei=0;gewei=0;

break;

case 1:

P0=disptab[(sec/10)%10];

baiwei=0; shiwei=1;  gewei=0;

break;

case 2:

P0=disptab[sec%10];

baiwei=0;  shiwei=0; gewei=1;

break;

default:break;

}

num++;

}

//************************步进电机正转控制函数******************************

void RotateWise(uinttime,uchar stepcnt)           //time为转一步时间,stepcnt为圈数

{

uchar i ,j;

for(i=0;i

{

for(j=0;j<8;j++)

{

P1= roundz[j] ;

delay (time);             //更改delay里数值可改变转速,转一圈时间为time*8 ms

}

}

}

//***********************步进电机反转控制函数****************************

void ContraRotate(uinttime,uchar stepcnt)  //time为转一步时间,stepcnt为圈数

{

uchar i ,j;

for(i=0;i

{

for(j=0;j<8;j++)

{

P1= roundf[j] ;          //更改delay里数值可改变转速,转一圈时间为time*8 ms

delay (time);

}

}

}

//**************************洗涤子程序****************************************

void xidi()

{

uint i;

in_water = 0;

delay(9000);           //开水阀,进水9s

in_water = 1;          //关水阀

delay(1000);

for(i=10;i>0;i--)      //转动十次

{

RotateWise(50,10) ;  //正转10圈,转速为50ms*8

delay(1000);             //停止一秒

ContraRotate(50,10) ;    //反转10圈,转速为50ms*8

delay(1000);

}

}

//**************************漂洗子程序****************************************

void piaoxi()

{

uint i;

in_water = 0;

delay(9000);           //开水阀,进水9s

in_water = 1;          //关水阀

delay(1000);

for(i=5;i>0;i--)       //转动五次

{

RotateWise(100,10) ;     //正转10圈,转速为100ms*8

delay(1000);             //停止一秒

ContraRotate(100,10) ;   //反转10圈,转速为100ms*8

delay(1000);

}

}

//*********************脱水子程序*******************************************

void tuoshui()

{

uint i;

out_water = 0;        //打开排水阀

delay(9000);          //排水9s

for(i=10;i>0;i--)      //转动十次

{

RotateWise(50,10) ;  //正转10圈,转速为50ms*8

}

beep=0;

delay(1000);         //蜂鸣器警报

beep=1;

out_water =1 ;       //甩干完毕,关闭水阀

}

//********************标准模式************************************************

void biaozhun()

{   sec=360;             //设定倒计时数目

LED_bz = 0;         //点亮“标准”LED灯

xidi();              //洗涤

piaoxi();

piaoxi();            //2次漂洗

tuoshui();           //脱水

LED_bz=1;            //熄灭LED灯

}

//*********************轻揉模式********************************************

void qingrou()

{   sec=250;           //设定倒计时数目

LED_qr = 0;        //点亮“轻揉”LED灯

piaoxi();

piaoxi();         //2次漂洗

tuoshui();        //脱水

LED_qr = 1;       //熄灭LED灯

}

//**********************甩干模式********************************************

void shuaigan()

{

sec=50;              //设定倒计时数目

LED_sg = 0;          //点亮“甩干”LED灯

tuoshui();            //脱水

LED_sg = 1;          //熄灭LED灯

}

//********************键盘扫描程序****************************************

uchar scankey()

{

int key;

if((P3&0x07)== 0x07)

return(0xff);               //消抖

delay(30);

if((P3&0x07)== 0x07)

return(0xff);

key = P3&0x07;

while ((P3&0x07)!=0x07);    //当有按键按下的时候,返回key值,判断哪个按键被按下

return key;

}

//******************主函数************************************************

void main()

{

TMOD|=0x11;  //定时器0和定时器1模式  工作方式1

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;  //定时0器寄存器装初值,每50ms产生一次中断

EA=0;                   //关总中断

ET0=1;                  //开定时器0中断

TH1=(65536-5000)/256;   //定时器1寄存器装初值,没5ms产生一次中断

TL1=(65536-5000)%256;

ET1=1;                //打开定时器1中断

TR0=1;

TR1=1;              //打开定时器0和定时器1

while(1)

{

uchar key = scankey();

if (key == K1)

{

EA=1;              //开总中断[em12]

biaozhun();

}

if (key == K2)

{

EA=1;

qingrou();

}

if (key == K3)

{

EA=1;

shuaigan();

}     }   }

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值