历史上的今天
返回首页

历史上的今天

今天是:2024年11月23日(星期六)

2019年11月23日 | PIC16F873 C程序(PICC9.8写)

2019-11-23 来源:51hei

#include

unsigned int i,max,X11=0,X12=0,X13=0,X14=0,X15=0,t=2;

unsigned long  AD_vasule[2],ADOUT,ADOUT_2;

unsigned long timer[5]; //11-15脚输出计数器

unsigned long delay11=0 ;    //模拟输入延时

unsigned long  TIMEALL  ; 

unsigned long   DELAY;

#define  TIME   2        //设置时间1秒

void up_on(void) //I/O配置函数

 {

   INTCON=0x00; //关闭所有中断

   ADCON1=0X04; //A/D模块设置AN0 AN1 AN3为模拟输入;其他引脚为数字输出

   TRISC=0XE0;  //设置11-15脚为输出

   RBPU=0;      //RB设置弱上拉

 }

///////////////////

void AD(void)   //A/D配置函数

 {

   ADCS1=1;  //FOSC/32 A/D转换时钟

   ADCS0=0;

   CHS2=0;   //设置AN1为模拟输入

   CHS1=0;

   CHS0=1;

   ADIE=1; //A/D转换中断允许

   PEIE=1; //外围中断允许

   TRISA1=1; //设置RA1 为输入方式

   ADON=1;    //A/D模块开始工作

 }

////////////

void tmint0(void)  //timer0初始化函数

  {

    T0CS=0; //TMR0工作于定时器方式

    PSA=0;  //TMR0用分频

    PS2=0;  //TMR0输入16分频

    PS1=1;

    PS0=1; 

    T0IF=0; //清除TMR0 的中断标志

    T0IE=1; //TMR0中断允许

  }


/////////

//////////

void interrupt AD_timer(void)   //A/D和timer中断函数

{

  

    if(T0IF)     //判断timer0是否发生中断

    {

        

         T0IF=0;        //清除中断标志

         if(!RB4&&RB5&&RB6) {max=0; timer[1]=TIMEALL;timer[2]=TIMEALL;timer[3]=TIMEALL; timer[4]=TIMEALL; t=4;}  //控制方式1

         else if(RB4&&!RB5&&RB6){ max=1; timer[2]=TIMEALL;timer[3]=TIMEALL; timer[4]=TIMEALL;  

                                  if(X12!=1){X11=0;X12=1;X13=0;X14=0;X15=0; i=0; timer[0]=0;timer[1]=TIMEALL; }

                                   t=2;

                                  }//控制方式2

         else if(!RB4&&!RB5&&RB6){ max=2; timer[3]=TIMEALL; timer[4]=TIMEALL; 

                                   if(X13!=1){X11=0;X12=0;X13=1;X14=0;X15=0; i=0; timer[0]=0;timer[1]=TIMEALL;timer[2]=TIMEALL; }

                                  t=3; }  //控制方式3

         else if(RB4&&RB5&&!RB6) {max=3; timer[4]=TIMEALL; 

                                   if(X14!=1){X11=0;X12=0;X13=0;X14=1;X15=0; i=0; timer[0]=0;timer[1]=TIMEALL;timer[2]=TIMEALL;timer[3]=TIMEALL; } 

                                   t=4; }  //控制方式4

         else if(!RB4&&RB5&&!RB6) {max=4 ;    //控制方式5

                                    if(X15!=1){X11=0;X12=0;X13=0;X14=0;X15=1; i=0; timer[0]=0;timer[1]=TIMEALL;timer[2]=TIMEALL;timer[3]=TIMEALL;timer[4]=TIMEALL; }

                                   t=5; }                          

         else max=5;

            

       if(timer[0]          

       if (timer[1]                

       if (timer[2]                

       if (timer[3]                 

       if (timer[4]                 

       if(delay11       else {

                 delay11=0;

                 if(max==0) {i=0;timer[0]=0;}

                 else {

                        if (i                        else   i=0;

                        if(max<5) timer=0;

                      } 

                

             

            }    

     }

   

    if(ADIF)    //判断AD是否发生中断

    { 

    

     AD_vasule[0]=ADRESL; //保存AD转换结果低8位

     AD_vasule[1]=ADRESH; //保存AD转换结果高2位

     AD_vasule[1]=AD_vasule[1]<<2;  //A/D结果高2位左移2位

     AD_vasule[0]=AD_vasule[0]>>6;

     ADOUT=AD_vasule[1]+AD_vasule[0];  //转换成10位结果保存

     ADIF=0; //清除中断标志

     ADGO=1; //开始下次转换

     

   }

  

  

}

///////////////////////

//////////////////////

void OUT_DELAY(void)////计算延时

{

      ADOUT_2=ADOUT;

      if(ADOUT_2<10) ADOUT_2=10;

      if(ADOUT_2>=818) ADOUT_2=1024;

      if(max==0) DELAY=TIMEALL*1024*4/(5*ADOUT_2); //控制方式1延时

      else  DELAY= TIMEALL*1024/(t*ADOUT_2);

            

}


////////////////////

void key5(void)     //控制方式1-5

{  

   

   

     

             OUT_DELAY();//计算延时

       

                  

             if((i==0)&&(timer[0]               {

                 RC0=1;

               }  

             if(((i!=0)&&(timer[0]>=TIMEALL)&&(DELAY<=TIMEALL))||((DELAY>TIMEALL)&&(timer[0]>=TIMEALL)))

              {

                RC0=0;

              } 

///////////////////////////////////

               if((i==1)&&(timer[1]               {

                 RC1=1;

               }  

             if(((i!=1)&&(timer[1]>=TIMEALL)&&(DELAY<=TIMEALL))||((DELAY>TIMEALL)&&(timer[1]>=TIMEALL)))

               {

                 RC1=0;

               } 

//////////////////////////////////////

///////////////////////////////////

               if((i==2)&&(timer[2]               {

                 RC2=1;

               }  

             if(((i!=2)&&(timer[2]>=TIMEALL)&&(DELAY<=TIMEALL))||((DELAY>TIMEALL)&&(timer[2]>=TIMEALL)))

               {

                 RC2=0;

               } 

//////////////////////////////////////

///////////////////////////////////

               if((i==3)&&(timer[3]               {

                 RC3=1;

               }  

             if(((i!=3)&&(timer[3]>=TIMEALL)&&(DELAY<=TIMEALL))||((DELAY>TIMEALL)&&(timer[3]>=TIMEALL)))

               {

                 RC3=0;

               } 

//////////////////////////////////////   

///////////////////////////////////

               if((i==4)&&(timer[4]               {

                 RC4=1;

               }  

             if(((i!=4)&&(timer[4]>=TIMEALL)&&(DELAY<=TIMEALL))||((DELAY>TIMEALL)&&(timer[4]>=TIMEALL)))

               {

                 RC4=0;

               }

推荐阅读

史海拾趣

Digital Core Design公司的发展小趣事

1996年,Core Design推出了其标志性作品《古墓丽影》。这款游戏以其独特的女主角Lara Croft和精心设计的游戏世界吸引了全球玩家的关注。Lara Croft成为游戏界最具代表性的女性角色之一,而《古墓丽影》系列也成为Core Design最成功的游戏系列之一。这款游戏的成功不仅为Core Design带来了巨大的经济收益,也使其在全球游戏市场上赢得了极高的声誉。

Corsair Memory Inc公司的发展小趣事

Corsair Memory Inc公司,由Don Lieberman、John Beekley与Andy Paul于1994年在美国加州佛利蒙创立。起初,公司专注于为英特尔系统生产Cache-On-A-Stick (COAST)模组。然而,随着英特尔将快取内存由主板移至处理器晶体中,Corsair迅速调整战略,将注意力转向电脑内存市场。这一转变不仅使Corsair避开了潜在的市场风险,更为其后续的内存业务奠定了坚实的基础。

GSN Electronics公司的发展小趣事

Corsair Memory Inc公司,由Don Lieberman、John Beekley与Andy Paul于1994年在美国加州佛利蒙创立。起初,公司专注于为英特尔系统生产Cache-On-A-Stick (COAST)模组。然而,随着英特尔将快取内存由主板移至处理器晶体中,Corsair迅速调整战略,将注意力转向电脑内存市场。这一转变不仅使Corsair避开了潜在的市场风险,更为其后续的内存业务奠定了坚实的基础。

Fibrefab Limited公司的发展小趣事

面对全球环境问题日益严峻的现状,Fibrefab积极响应环保号召,推动绿色生产和可持续发展。公司采用环保材料和生产工艺,降低产品生产和使用过程中的能耗和排放。同时,Fibrefab还积极参与环保公益活动和社会责任项目,为保护环境贡献自己的力量。这一举措不仅提升了Fibrefab的企业形象和社会责任感,也为其长期发展奠定了坚实基础。

维峰电子(WCON)公司的发展小趣事

为了进一步扩大市场份额,维峰电子积极开拓国内外市场。公司通过与国内外知名企业的合作,成功进入了多个领域,包括工业控制、汽车和新能源等。特别是新能源领域,维峰电子凭借其在电子连接器方面的技术优势,成功开发出多款适用于新能源领域的产品,受到了市场的广泛认可。

DOMINANT公司的发展小趣事

随着公司业务的不断发展,统明亮开始积极拓展全球市场。它通过与国内外知名企业的合作,不断提升自身的品牌影响力和市场竞争力。同时,统明亮还积极参加各类国际展会和交流活动,与全球各地的客户建立了紧密的合作关系。这些努力使得统明亮在全球LED市场中的份额不断扩大,其品牌影响力也得到了进一步提升。

请注意,由于篇幅限制,以上仅为三个简要故事。如果需要更多关于DOMINANT公司的发展故事,建议查阅相关报道和资料。

问答坊 | AI 解惑

51制作的 红外、315M、433M等遥控编码波形分析板(全套资料)

  秀一下我做的小工具,HOHO!      相当于数字脉冲示波器,并具波形分析功能(单片机通过USB与计算机通讯显示波形),也是USB通讯学习板。   主要用来实现以下功能:         1)可采集红外遥控 ...…

查看全部问答>

MSP430register_guide常用模块原理

MSP430register_guide常用模块原理.…

查看全部问答>

【专题讲座】你不可不知的嵌入式发展趋势(二)

  身在嵌入式领域做设计的我们,是不是有时也会爆出这样的疑问:究竟什么是嵌入式?嵌入式未来几年将如何发展?目前市场最火的嵌入式应用有哪些?最新的嵌入式技术又包括什么?还有哪些是我们未曾想到的?   本期的专题,将携嵌入式领域诸多大 ...…

查看全部问答>

VS编译环境的构建

我按照网上的资料按顺序 安装了   1、安装ActiveSync同步工具,我安装的是ActiveSync 4.5     2、安装VS2005(中文)     3、安装vs2005 SP1(431M),(中文补丁)     4、安装。NET CF 2.0SP2   ...…

查看全部问答>

关于一些wifi网络测试软件问题

一、如何测试wifi的信号强度? 二、如何测试wifi的丢包情况? 有没有这样现成的软件,从未做过应用,请各位老兄提示一下,最好有现成的了。…

查看全部问答>

请教电平转换的问题

请教如何进行5V到2.85V的电平转换?我要用于UART通信不是提供电源。是用什么电路实现呢还是用哪个芯片来实现呢?另外我这个链接的帖子,请大家帮忙去说句话吧!没人回帖我都结不了贴。说句话就给20分结贴了!谢谢了!http://topic.eeworld.net/u/20 ...…

查看全部问答>

液晶模块的抗静电知识(一)

液晶显示模块的生产过程中,从印刷电路板整合进液晶显示面板的制程到各个模块的组装,在待组装物、设备或是人员之间,不可避免都会有移动及接触与再分离的行为出现,因此在待组装物上必然会发生静电放电的现象。虽然在环境温度及相对湿度与接地都会 ...…

查看全部问答>

求助高手 msp430 P1口中断的问题 弄了好长时间了,还是不行啊

帮忙看看一下程序有错吗? #include unsigned char i; void main() {    WDTCTL=WDTPW+WDTHOLD; //关看门                          &nb ...…

查看全部问答>

怎样判断线路的通断?

  在做一个项目,要求开机后能自动检测线路的通断状态,能够让主控设备知道。觉得这个只能检测电流,于是查了查霍尔传感器,但是每条线都得用一,线有十多根,传感器占的空间太大了。请问谁知道体积小的电流传感器IC?或者谁知道更好的检测方 ...…

查看全部问答>