经过2个星期逼着自己学习c51,写了老师的课设,就是我以前发的那个洗衣机的然后写了这个程序,无奈啊,想让大家帮帮忙改一改啥的,写的不好,就别喷了
然后我们学校实验室比较简陋,好像是电动机只能用什么AD还是DA吧,好像不让用P3口好像,然后我也不会写电动机这一块了,写的比较垃圾,洗衣时间算的也不咋明白,帮帮忙,救救孩子吧。
一、洗衣机控制系统设计
设计内容:
1、用直流电机的转速表征三种不同洗衣方式,弱洗、强洗、漂洗;
2、用三个独立按键设置待洗衣物的不同洗涤方式:(40分)
丝质衣服:漂洗定时3秒
棉质衣服:弱洗2秒;强洗5秒;漂洗3秒;
化纤衣服:强洗4秒;漂洗2秒;
3,用按键自行调整洗涤方式,即自行调整弱洗,强洗,漂洗的定时时间
4、定时时间到,光报警提示。(20分)
这个就是我的程序了
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
//****************************//
sbit key_mianzhi=P1^4; // 棉质按键
sbit key_on=P1^5; // 开始按键
sbit key_off=P1^6; // 结束按键
sbit key_sizhi=P1^7; // 丝质按键
sbit key_huaxian=P1^1; // 化纤按键
//***************************//
sbit led_wring=P0^7; // 报警指示灯
//******************************//
uchar codenum[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
//*****************************//
char sec=0; // 时间秒
char min=0; // 时间分
uchar count=0; // 中断计数
uchar flag0=0; // 洗衣机工作状态标志
uchar flag1=0; // piaoxi标志
uchar flag2=0; // qiangxi标志
uchar flag3=0; // ruoxi标志
uchar err=0; // 报警标志
//**********************************//
void delay(); // 延时函数
void over(); // 结束子程序
void piaoxi(); // 票子程序
void ruoxi(); // 弱子程序
void qiangxi(); // 强子程序
void on(); // 工作on处理子程序
void se(); // 显示菜单选择
void SEG_display(); // 显示时间子程序
void key_scan(); // 按键扫描子程序
**************************************
void delay(uint i)
{
uintx,y;
for(x=i;x>0;x--)
for(y=120;y>0;y--);
}
//*********工作on处理子程序**********//
void on()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
P0 = 0xff;
if(flag0==0)
in();
if(flag0==1)
qiangxi();
if(flag0==2)
piaoxi();
if(flag0==3)
ruoxi();
if(flag0==4)
out();
}
//********结束子程序*********//
void over()
{ other=0;
anther=0;
P0=0xff;
mo_r=0;
mo_l=0;
led_over=0;
EA=0;
}
//**********进水子程序**********//
voidin()
{ anther=0;
other=0;
P0=0xff;
led_in=0;
flag1++;
mo_r=0;
mo_l=0;
min=0;
sec=8;
}
//**********漂洗子程序**********//
void piaoxi()
{ anther=1;
other=0;
P0=0xff;
mo_r=1;
mo_l=1;
min=0;
sec=10;
quan=0;
}
//
//********强洗程序********//
void piaoxi()
{
anther=1;
other=0;
P0=0xff;
mo_r=1;
mo_l=0;
min=1;
sec=10;
}
//*********弱洗子程序********//
void ruoxi()
{
other=1;
anther=0;
P0=0xff;
mo_r=1;
mo_l=0;
sec=5;
}
//*********漂洗子程序********//
void piaoxi()
{
other=1;
anther=0;
P0=0xff;
mo_r=1;
sec=5;
mo_l=1;
sec=5;
}
//*********按键扫描子程序*********//
void key_scan()
{
if(key_menu==0)
{
delay(5);
if(key_menu==0)
{
while(!key_menu);
menu();
}
}
//********************************//
if(key_on==0)
{
delay(5);
if(key_on==0)
{
while(!key_on);
on();
}
}
//*********************************//
if(key_off==0)
{
delay(5);
if(key_off==0)
{
while(!key_off);
over();
}
}
}
//*********显示子程序**********//
void SEG_display()
{
P1=0x01;
P2=num[min/10];
delay(10);
P1=0x02;
P2=num[min%10];
delay(10);
P1=0x04;
P2=num[sec/10];
delay(10);
P1=0x08;
P2=num[sec%10];
delay(10);
}
//*********主函数**********//
void main()
{
led_in=0;
anther=0;
other=0;
while(1)
{
SEG_display();
key_scan();
}
}
//*****定时器0中断处理程序*****//
void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
count++;
if(count==20)
{
count=0;
sec--;
if((flag0==1)||(flag0==2))
{
quan++;
switch(quan)
{
case 1:mo_r=1;mo_l=0;break;
case10:mo_r=0;mo_l=0;break;
case15:mo_r=0;mo_l=1;break;
case25:mo_r=0;mo_l=0;break;
default:;
}
if(quan==30)
{
quan=0;
}
}
//**********************************//
if((sec==0)&&(min!= 0))
{
min--;
sec=59;
}
//**********************************//
if((sec<0)&&(min==0)&&(flag0==1)) //洗衣结束
{
flag0=4;
out();
}
//**********************************//
if((sec<0)&&(min==0)&&(flag0==2)) //泡衣结束
{
switch(flag3)
{
case1:flag0=4;out();break;
case2:flag0=4;out();break;
case3:flag0=4;out();break;
default:err=1;led_wring = 0;
}
}
//**********************************//
if((sec<0)&&(min==0)&&(flag0==4)) //出水结束
{
switch(flag2)
{
case1:flag0=0;in();break;
case2:flag0=0;in();break;
case3:flag0=0;in();break;
case4:flag0=3;xx();break;
default:err=1;led_wring=0;
}
}
//***********************************//
if((sec<0)&&(min==0)&&(flag0==3))
{ sec=0;
over();
}
}
}
程序问题挺多的,希望大家帮帮忙。谢谢大家了 |