| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 331 人关注过本帖
标题:求高手来帮忙修改下
只看楼主 加入收藏
ytechcn
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2012-6-16
结帖率:100%
收藏
 问题点数:0 回复次数:0 
求高手来帮忙修改下
请教各位大虾,我这个程式怎样桥接PB和DC,我试说一下我的要求,求各位大虾指教下.
   一、正常状态下当按下PB键,没其它操作时,时间完了回复正常状态。
   二、正常状态下按DC键,对应ALARM(P1.1)脚有输出。
   三、正常状态下先按PB键,在它的时间还未完成时再按DC键,这时要求要数SWITCH的时间,请问要怎样修改才可以做到这个效果。
         注意:PB为轻触式开关,DC为自锁式开关。

程式如下:

// -----------------------------
//   6 mins timer board
//   Each Button 1 mins
// -----------------------------

#include <reg52.h>
#include <stdio.h>
#include <stdlib.h>

#define uchar unsigned char
#define uint unsigned int

sbit dc=P3^1;       //D/C为NO时,CPU-3脚为1
sbit pb=P3^0;       //按PB时CPU-2脚为0
sbit runled=P3^2;
sbit lamp=P3^5;     //1 fo ON
sbit alarm=P1^1;    //0 for ON , 1 for Off
sbit time1=P1^2;    //0 for on
sbit time2=P1^3;
sbit time3=P1^4;
sbit time4=P1^5;
sbit time5=P1^6;
sbit time6=P1^7;

void init();
void delayms(uint xms);
void run_led();
void delays(uint xms1);
void check_timer();
void check_dc();
void check_pb();

uint delay_time;
uint x50ms=6;
bit start_flag;
bit end_flag;


/**************初始化********************************/

void init()
{

TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
IE=0x82;
TR0=1;
alarm=1;   
delayms(10);
lamp=1;
delayms(10);
delay_time=0;
start_flag=0;
end_flag=0;

}

/************RUN燈***************************/

void timer1() interrupt 1 using 1
{

run_led();

}

/****************RUN燈子函數********************/

void run_led()
{
x50ms--;
if(x50ms==0){
x50ms=6;
//TH0=(65536-50000)/256;
//TL0=(65536-50000)%256;
delayms(100);

runled=~runled;
}
}

/***************大延時******************/

void delays(uint xms1)        //xms1=1000約为1分钟

{
     uint i,j,k;

     for(i=xms1;i>0; i--)
         for(j=110; j>0; j--)
             for(k=50;k>0;k--);
      

}




/***************小延時******************/



void delayms(uint xms)         //xms=1000約为1秒

{
     uint i,j;

     for(i=xms;i>0; i--)
         for(j=110; j>0; j--);

}



/*********按下PB數時間,約10秒還原)************/


void check_pb()

{

  if(pb==0)                           
  {
     delayms(10);
     if(pb==0)
     {
       start_flag=1;
       lamp=0;
       delayms(10000);    //約10 SEC     
       lamp=1;
       delayms(10);     
        
     }
   
  }
 
}


/****************check_timer********************/

void check_timer()
{

delay_time=0;

if (time1==0)
{
    delay_time=delay_time+1;
}
delayms(5);
   
if (time2==0)
{
    delay_time=delay_time+1;
}
delayms(5);

if (time3==0)
{   
    delay_time=delay_time+1;
}
delayms(5);

if (time4==0)
{
    delay_time=delay_time+1;
}
delayms(5);
   
if (time5==0)
{
    delay_time=delay_time+1;
}
delayms(5);

if (time6==0)
{   
    delay_time=delay_time+1;
}
delayms(5);

}


/***************扫描dc*************************/


void check_dc()

{
 if (dc==1)        
     {
           delayms(10);
           if (dc==1)
           {
                  end_flag=dc;                            //不知道是不是这里出了问题
               if(start_flag==1 && end_flag==1)           //不知道是不是这里出了问题

               {
                lamp=0;
                delayms(50);
                switch(delay_time)

                {
                 
                 case 1:
                    delays(1000);     //1 MIN
                    break;

                 case 2:
                    delays(2000);     //2 MIN
                    break;

                 case 3:
                    delays(3000);     //3 MIN
                    break;

                 case 4:
                    delays(4000);     //4 MIN
                    break;

                 case 5:
                    delays(5000);     //5 MIN
                    break;

                 case 6:
                    delays(6000);     //6 MIN
                    break;

                 default:
                    delayms(1000);     //1 SEC
                    break;
               }
             }
            }               
            alarm=0;
            delayms(10);
            while(!dc);

      }

     }

   


               


/***************主函數**************************/

void main()
{
 
     init();


     while(1)

    {
      check_pb();
      delayms(10);
      check_timer();
      check_dc();
      
                 
    }
}
搜索更多相关主题的帖子: 时间 include 
2012-06-19 22:16
快速回复:求高手来帮忙修改下
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017576 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved