2797|1

8

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

PIC16F630程序 PICC9.8写 [复制链接]

#include
__CONFIG(0X3F84);        //设置配置位
#define  delay2   100    //上升或者下降后一秒内不不响应按键或者光藕信号延时1秒(100乘10ms)
#define  delay3   500    //按住停止键5秒以上5脚和6脚功能互换(500乘10ms)
unsigned long   number;  //10MS计数器 (timer0的中断周期是10MS)
unsigned long   number44=0; //无人操作延时计数器(用于无人操作后自动停止电机)
unsigned int  numb;     //上电闪烁3次计数器
unsigned int  number_1miao=delay2; //上升或者下降后一秒内不不响应按键或者光藕信号 1秒计数器
unsigned int  sign=0;   //按键起作用后输出起作用标志位
unsigned int  sign2=0;  //停止按键按下5秒起作用标志位
unsigned int  sign3;    //
unsigned int  number1;  //上升按键按下计数器(用于防止抖动)
unsigned int  number2;  //停止按键按下计数器(用于防止抖动)
unsigned int  number3;  //下降按键按下计数器(用于防止抖动)
unsigned int  number11; //光藕上升起作用计数器(用于防止抖动)
unsigned int  number22; //光藕停止起作用计数器(用于防止抖动)
unsigned int  number33; //光藕下降起作用计数器(用于防止抖动)
unsigned int  number00; //上电闪烁频率计数器(闪烁周期计数器)
unsigned int  number55=0; //上升和下降之间切换延时计数器(用于电反转过程缓冲)
unsigned int  direct=0;   //5和6脚切换标准(direct=0的时候5脚是下降;6脚是上升;direct=1的时候6脚是下降;5脚是上升;)
///////////
///////下面是宏定义
#define  TIME   62        //设置时间500ms(62乘10ms)
#define  dou_dong 10      //设置防抖检测次数(10次)
#define  yan_shi 3000     //设置电机停转时间30秒(3000乘10ms)
#define  delay   300      //设置上升和下降之间延时3秒(300乘10ms)

void up_on(void) //I/O配置函数
{
   RAPU=0;       //使能PORTA口弱上拉
   CMCON=0XFF;  //比较器关闭
   PORTA=0;
   PORTC=0;
   IOCA=0;    //禁止电平变化中断
   INTCON=0x00; //关闭所有中断
   TRISA=0XFB;  //设置A2脚(11脚)为输出;设置A3脚(4脚);A4脚(3脚);A5脚(2脚);为输入
   TRISC=0XCE;  //设置C3脚(7脚);C2脚(8脚);C1脚(9脚)为输入;设置C0脚(10脚);C5脚(5脚);C4脚(6脚)为输出
   WPUA4=1;   //PORTA4使能弱上拉
   WPUA5=1;   //PORTA5使能弱上拉
}
///////////////////
////////////
void tmint0(void)  //timer0初始化函数
  {
    T0CS=0; //TMR0工作于定时器方式
    PSA=0;  //TMR0用分频
    PS2=1;  //TMR0输入32分频
    PS1=0;
    PS0=0;
    T0IF=0; //清除TMR0 的中断标志
    T0IE=1; //TMR0中断允许
  }

/////////
//////////
void interrupt AD_timer(void)   //timer中断函数
{
  
    if(T0IF)     //判断timer0是否发生中断
    {
        
         T0IF=0;        //清除中断标志
         if(number           {
           number++;
          }
         else
          {
           number=0;
          }
     }
   
   
  
  
}
///////////////////////
void shan_suo_3(void)   //上电闪烁3次
{
  for(numb=0;numb<3;numb++)
   {
    number=0;
    RC0=1;
    while(number     number=0;
    RC0=0;
    while(number    }
}
///////////////////
////////////////////

void main(void)

{
   
    up_on(); //I/O配置函数
    tmint0();  //timer0初始化函数
    ei();     //打开所有中断
    shan_suo_3();  //上电闪烁3次
    number=0;
    while(1)
    {
      while(number<1);  //等待10MS延时
      if(number_1miao       number00++;
      number=0;
      if((number00>=30)&&(RC4||RC5))
       {
        RC0=!RC0;      //LED闪烁(10脚取反)
        number00=0;
       }
      
      
      if(!sign&&!RA3&&RA4&&RA5&&RC1&&RC2&&RC3&&!number55&&(number_1miao>=delay2))  //上升按键按下
         {  
            RC0=1;      //LED亮   
            if(number1             number2=0;
            number3=0;
            number11=0;
            number22=0;
            number33=0;
            number44=0;
         }
      else if(!sign&&RA3&&!RA4&&RA5&&RC1&&RC2&&RC3&&!number55)  //停止按键按下
         {
            RC0=1;      //LED亮   
            number1=0;
            if(number2             number3=0;
            number11=0;
            number22=0;
            number33=0;
            number44=0;
         }
       else if(!sign&&RA3&&RA4&&!RA5&&RC1&&RC2&&RC3&&!number55&&(number_1miao>=delay2))  //下降按键按下
         {
            RC0=1;      //LED亮   
            number1=0;
            number2=0;
            if(number3             number11=0;
            number22=0;
            number33=0;
            number44=0;
         }
      else if(!sign&&RA3&&RA4&&RA5&&!RC1&&RC2&&RC3&&!number55&&(number_1miao>=delay2))  //光藕上升按键按下
         {
            RC0=1;      //LED亮   
            number1=0;
            number2=0;
            number3=0;
            if(number11             number22=0;
            number33=0;
            number44=0;
         }
      else if(!sign&&RA3&&RA4&&RA5&&RC1&&!RC2&&RC3&&!number55)  //光藕停止按键按下
         {
            RC0=1;      //LED亮   
            number1=0;
            number2=0;
            number3=0;
            number11=0;
            if(number22             number33=0;
            number44=0;
         }
      else if(!sign&&RA3&&RA4&&RA5&&RC1&&RC2&&!RC3&&!number55&&(number_1miao>=delay2))  //光藕下降按键按下
         {
            RC0=1;      //LED亮   
            number1=0;
            number2=0;
            number3=0;
            number11=0;
            number22=0;
            if(number33             number44=0;
         }
      else if(RA3&&RA4&&RA5&&RC1&&RC2&&RC3)
         {   
            if(!RC4&&!RC5) RC0=0;      //LED熄灭   
            if(!number55)
             {
              number1=0;
              number2=0;
              number3=0;
              number11=0;
              number22=0;
              number33=0;
             }
              sign=0;
              sign2=0;
         }
      else;
/////////////////////////////////////////////////
//下面是停止按键起作用后5秒计数
       if((number2>=dou_dong)&&(number2             number2++;
////////////////////////////////////////////////停止起作用后
       if((number2>=delay3)&&!sign2)
          {
            direct=!direct; //5和6脚切换标志
            sign2=1;
          }
              
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
       if(((number1>=dou_dong)||(number11>=dou_dong))&&!sign) //上升按键或者光藕上升起作用
          {
            if(!direct) sign3=!RC5;
            else sign3=!RC4;
            ///////////////////////////
            if(sign3&&!number55)
               {
                     if(!direct)
                         {
                           RC4=!RC4;  //6脚输出取反
                           RC5=0;     //5脚输出0
                         }
                     else
                         {
                           RC5=!RC5;  //5脚输出取反
                           RC4=0;     //6脚输出0
                         }
                sign=1;
                number55=0;
                number_1miao=0;
               }
            else if(number55>=delay)
              {
                   if(!direct)
                         {
                           RC4=!RC4;  //6脚输出取反
                           RC5=0;     //5脚输出0
                         }
                   else
                         {
                           RC5=!RC5;  //5脚输出取反
                           RC4=0;     //6脚输出0
                         }
               sign=1;
               number55=0;  
               number_1miao=0;
              }
            else
              {
               RC4=0;  //6脚输出0
               RC5=0;   //5脚输出0
               if(number55               }
           
            
          }
       else if(((number2>=dou_dong)||(number22>=dou_dong))&&!sign) //停止按键或者光藕停止起作用
         {
           
           RC4=0;     //6脚输出0
           RC5=0;     //5脚输出0
           sign=1;
           number55=0;
         }
       else if(((number3>=dou_dong)||(number33>=dou_dong))&&!sign) //下降按键或者光藕下降起作用
         {
            if(!direct) sign3=!RC4;
            else sign3=!RC5;
            ///////////////////////////
            if(sign3&&!number55)
              {
                     if(!direct)
                         {   
                          RC5=!RC5;  //5脚输出取反
                          RC4=0;     //6脚输出0
                         }
                      else
                         {
                          RC4=!RC4;  //6脚输出取反
                          RC5=0;     //5脚输出0
                         }  
                sign=1;
                number55=0;
                number_1miao=0;
              }
            else if(number55>=delay)
              {
                 if(!direct)
                         {   
                          RC5=!RC5;  //5脚输出取反
                          RC4=0;     //6脚输出0
                         }
                      else
                         {
                          RC4=!RC4;  //6脚输出取反
                          RC5=0;     //5脚输出0
                         }  
                sign=1;
                number55=0;
                number_1miao=0;
              }
            else
              {
                 RC4=0;  //6脚输出0
                 RC5=0;   //5脚输出0
                 if(number55               }
           
           
         }
       else;
       ////////////////////////////30秒没人动作电机停止
       if(RA3&&RC1&&RA5&&RC3)
         {
           number44++;
           if(number44>=yan_shi)
           {
            number44=yan_shi;
            RC5=0;     //5脚输出0
            RC4=0;     //6脚输出0
           }
         
         }
       ////////////////////////////
    }
}





兼职PIC全系列开发 ;  精通PIC16 PIC18 DSPIC ; 精通51 AVR STM32 TI的C2000系列 精通电机控制;伺服电机控制;精通99SE DXP;精通模拟电路与数字电路;精通C 汇编;精通信号处理方面 FIR IIR FFT IFFT;精通MULTISIM 11 ;PROTEUS 7.9;

QQ 122533653
此帖出自信息发布论坛

最新回复

__CONFIG(0X3F84);       在程序里这么配置  用PICkit3下载   提示有问题 为什么  请教一下 谢谢  详情 回复 发表于 2012-11-23 16:53
点赞 关注
 
 

回复
举报

12

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
__CONFIG(0X3F84);       在程序里这么配置  用PICkit3下载   提示有问题 为什么  请教一下 谢谢
此帖出自信息发布论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表