2100|1

14

帖子

0

TA的资源

一粒金砂(中级)

楼主
 
为啥我的程序没问题了,但是还是工作不了下面是程序和我的protuse仿真图
#include  
#define uchar unsigned char
#define uint unsigned int  
sbit mo_r = P3^2;   //电机右控制线
sbit mo_l = P3^3;  //电机左控制线
sbit key_menu = P3^4; // 菜单按键
sbit key_on = P3^5;   // 开始按键
sbit key_off = P3^6; //  结束按键  
sbit key_sel = P3^7;  //  菜单选择按键
sbit led_in = P0^0;  // 进水指示灯
sbit led_xi = P0^1;    //  洗衣指示灯
sbit led_pao = P0^2; // 泡洗指示灯
sbit led_xx = P0^3;    //  脱水指示灯
sbit led_out = P0^4;  //   出水指示灯
sbit led_over = P0^5;  // 洗衣结束指示灯
sbit led_work = P0^6;  // 电机工作指示灯
sbit led_wring = P0^7;  // 报警指示灯
sbit buzzer=P3^0;
uchar  code  num[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;    //  进水次数标志
uchar flag2=0;    //  出水次数标志
uchar flag3=0;   //   泡洗次数标志
uchar err =0;    // 报警标志
uchar quan = 0;//正反转计数
//  函数声明  
void delay();// 延时函数
void in(); //   进水子程序
void out();  //   出水子程序
void over();  //  结束子程序
void xi();  //   洗衣子程序
void pao(); //  泡衣子程序
void xx(); // 脱水子程序  
void on(); //  工作on处理子程序
void sel(); //  显示菜单选择  
void SEG_display();  //显示时间子程序
void key_scan();   //  按键扫描子程序 //     
//延时函数
void delay(uint i)
{  
uint x,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)  xi();  
if(flag0 == 2)  pao();  
if(flag0 == 3)  xx();  
if(flag0 == 4)  out();   }  
//  结束子程序
void over()
{   
P0 = 0xff;  
mo_r=0;mo_l=0;
led_over = 0;
buzzer=0;  
EA=0;
}  
//    进水子程序
void in()  
{     
// 洗衣电源控制开关  
P0 = 0xff;
led_in = 0;  
flag1++; //  进水次数标志  
mo_r = 0;mo_l = 0;  
min = 0;sec = 8;
}  
//  洗衣子程序
void xi()
{        
P0 = 0xff;   
led_xi = 0;
led_work = 0;   
// 电机工作指示灯  
mo_r = 1;mo_l = 0;  
min = 0;sec = 20;        
quan = 0;
}
//    泡衣子程序
void pao()
{   
P0 = 0xff;  
led_pao = 0;
led_work = 0;  
flag3++;//泡衣次数标志  
mo_r = 1;mo_l = 0;  
min = 0;sec = 20;
quan = 0;
}  
//  脱水子程序
void xx()
{  
P0 = 0xff;
led_xx = 0;
mo_r = 0;mo_l = 1;  
min = 0;sec = 16;
}
//   出水子程序
void out()
{  
P0 = 0xff;
led_out = 0;  
flag2++;
//出水次数标志  
mo_r = 0;mo_l = 0;
min = 0;sec = 5;
}
//    显示菜单选择
void sel()
{  
P0 = 0xff;  
if(flag0 >= 5)flag0 = 0;   
if(flag0 == 0)
{
led_in = 0;
}  
if(flag0 == 1)  
{
led_xi=0;
}  
if(flag0 == 2)  
{
led_pao=0;
}  
if(flag0 == 3)
{
led_xx=0;
}
if(flag0 == 4)
{
led_out=0;
}
}
//    菜单处理子程序
void menu()
{      
min = 0;sec = 0;  
mo_r=0;mo_l=0;  
SEG_display();     
while(1)  
{
     if(key_on == 0)   
{
    delay(5);   
if(key_on == 0)   
{     
while(!key_on);     
on();break;   
}   
}   
if(key_off == 0)
{
    delay(5);
    if(key_off == 0)
   {
     while(!key_off);
     over();break;
    }
   }
   if(key_sel == 0)
   {
    delay(5);
    if(key_sel == 0)
    {
     while(!key_sel);
     flag0++;
     sel();
    }
   }
     }
}
  //     按键扫描子程序
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;
        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;
     case 10:mo_r=0;mo_l=0;
break;
     case 15:mo_r=0;mo_l=1;
break;
     case 25: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==0))  
//进水结束
   {
          switch(flag1)
  // flag1为进水次数
     {
             case 1:flag0=1;xi();
break;
     case 2:flag0=2;pao();
break;
     case 3:flag0=2;pao();
break;
     case 4:flag0=2;pao();
break;
     default: err=1;led_wring = 0;
     }
   }
   //**********************************//   if((sec<0)&&(min==0)&&(flag0==1))
  //洗衣结束
  {
flag0 = 4;
//flag0 = 4为排水
        out();
   }   
//**********************************//    if((sec<0)&&(min==0)&&(flag0==2))
   //泡衣结束
   {
          switch(flag3)
   //   flag3为泡洗次数标志
    {
      case 1:flag0=4;out();
break;
     case 2:flag0=4;out();
break;
     case 3:flag0=4;out();
break;
    default: err=1;led_wring = 0;
     }
   }
    //**********************************//    if((sec<0)&&(min==0)&&(flag0==4))
  //出水结束
   {
      switch(flag2)   
//  flag2为出水次数标志
     {
      case 1:flag0=0;in();
break;
     case 2:flag0=0;in();
break;
     case 3:flag0=0;in();
break;
     case 4:flag0=3;xx();
break;
    default: err= 1;
led_wring = 0;
     }
   }
    //***********************************//    if((sec<0)&&(min==0)&&(flag0==3))
  //脱水结束
  {
  sec = 0;
over();
}
  }
  }

liuyang.DSN

157.93 KB, 下载次数: 2

此帖出自51单片机论坛

最新回复

“工作不了”是什么情况?  详情 回复 发表于 2017-6-10 00:31
点赞 关注
 

回复
举报

664

帖子

104

TA的资源

纯净的硅(中级)

沙发
 
“工作不了”是什么情况?
此帖出自51单片机论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表