久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5022|回復: 3
打印 上一主題 下一主題
收起左側(cè)

帶感應的小夜燈的PIC單片機源碼(可手動控制or自動控制)

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:66086 發(fā)表于 2018-8-25 12:14 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
基于pic16f616單片機  可以手動控制  也可自動控制(開啟感應開關)  

單片機源程序如下:
  1. #include<pic.h>
  2. #define u16 unsigned int
  3. #define u8 unsigned char
  4. u8 second,fen=0,miao=0,key=0,mode;
  5. u16 adval;  //3v/5v*1024=614
  6. u16 x1=512;
  7. bit loop1,yy1;
  8. int pwm;
  9. __CONFIG(0xfd94);   //fdd5 RA4可以輸出主頻率的4分頻
  10. //const u8 table[]={160,130,101,90,80};
  11. const u8 tab[]={150,100,60,30};

  12. void init()
  13. {//OSCTUNE=0x0f;      //修改主頻率
  14.   ADCON0=0x9d;
  15.   ADCON1=0x20;

  16.   INTCON=0xd0;   //開啟總中斷 外部中斷 外設中斷
  17.   INTEDG=1;  // 設置觸發(fā)中斷的條件為電平從低到高觸發(fā)
  18.    PIE1=0x41;             //允許Time1中斷
  19.         TMR1L=(65536-1000)%256;
  20.         TMR1H=(65536-1000)/256;
  21.         T1CON=0x01;            //使能Time1
  22.   
  23.   PR2=160;               //周期計數(shù)
  24.   CCP1CON=0x3c;     //0011 1100單輸出 P1A被調(diào)制    1011 1100半橋輸出 P1A P1B被調(diào)制
  25.   CCPR1L=40;       //脈沖寬度計數(shù)
  26.   
  27. }

  28. void delay500us(u16 x)
  29. {
  30.   u16 a,b;
  31.   for(a=x;a>0;a--)
  32.    for(b=20;b>0;b--);
  33. }

  34. void delayms(u16 x)
  35. {
  36.   u16 a,b;
  37.   for(a=x;a>0;a--)
  38.    for(b=220;b>0;b--);
  39. }

  40. void beep()
  41. {  
  42.    u8 i;

  43.    for(i=255;i>0;i--)
  44.    {
  45.      delay500us(8);
  46.      
  47.      RA1=!RA1;
  48.    }
  49.     RA1=0;
  50. }

  51. void ledstate()
  52. { u8 i;
  53.   RC0=0;
  54.   loop1=1;
  55.    
  56.   while(loop1)
  57.   {
  58.           for(i=3;i>0;i--)
  59.       {  beep();
  60.         RC0=!RC0;
  61.         delayms(1000);
  62.         }  
  63.           loop1=0;
  64. }

  65.   }

  66. void KEY_Scan(void)              //鍵值掃描
  67. {       
  68.           if((RC2==1) || (RC1=1) || (RA4==1) || (RA5==1))
  69.           {
  70.             delayms(50);//去抖動
  71.             if(RC2==1)        //A  led模式與開關
  72.             {
  73.               delayms(200);
  74.           delayms(200);
  75.           delayms(200);
  76.           delayms(200);
  77.           if(RC2==1) key=!key;   //0 on 1 off
  78.           else mode=!mode;      //0 手動模式  1 自動模式
  79.           while(RC2);               
  80.             }
  81.                   else if(RC1==1)   //B 音頻開關
  82.             {
  83.               RC4=!RC4;
  84.           while(RC1!=0);             
  85.             }
  86.                 else if(RA4==1)   //C  亮度加
  87.             {
  88.                  if(mode==0)
  89.                          {  
  90.                    pwm++;
  91.                   if(pwm>=3){pwm=3;beep();}
  92.                   while(RA4);
  93.                          }               
  94.             }
  95.             else if(RA5==1)   //D 亮度減
  96.             {
  97.                   if(mode==0)
  98.                          {
  99.                     pwm--;
  100.                   if(pwm<1){pwm=0;beep();}
  101.                   while(RA5);       
  102.                          }      
  103.             }
  104.      }       
  105. }

  106. void pwm_out()
  107. {
  108.   T2CON=0x04;
  109.   CCP1CON=0x3c;
  110.   RC0=1;
  111.   RA0=0;
  112.   delayms(5);
  113.              
  114.          CCPR1L=tab[pwm];
  115.          delayms(4);       
  116. }

  117. void pwm_out1()
  118. {
  119.   T2CON=0x04;
  120.   CCP1CON=0x3c;
  121.   RC0=1;
  122.   RA0=1;
  123.   delayms(5);
  124.         if(yy1)
  125.     {
  126.       CCPR1L=tab[3];
  127.              delayms(4);
  128.     }
  129.     else
  130.     {
  131.       CCPR1L=tab[0];
  132.              delayms(4);
  133.     }   
  134.                     
  135. }

  136. void stopstate()  //  pwm 停止輸出
  137. {
  138.     T2CON=0x00;
  139.           CCP1CON=0x00;
  140.     RC0=0;
  141.     RA0=0;
  142.     RC5=1;
  143. }

  144. void interrupt time1(void)
  145. {
  146.           if(TMR1IE&&TMR1IF)          //定時器1用于產(chǎn)生秒信號  定時時間為25ms
  147.                  {
  148.                     TMR1IF=0;
  149.                         TMR1L=(65536-50000)%256;
  150.                         TMR1H=(65536-50000)/256;
  151.                            second++;
  152.                         if(second>=40)                  //40*25ms =1000ms
  153.                         { second=0;
  154.                  
  155.                        if(miao++>=60)
  156.                        {  miao=0;
  157.                            fen++;
  158.                           if(fen>=60)
  159.                            fen=0;
  160.                         }
  161.                          }
  162.                   }

  163.       if(INTE&&INTF)         ////外部中斷
  164.            {
  165.              while(RA2==1)
  166.              {
  167.                   
  168.                KEY_Scan();
  169.            
  170.              }
  171.              INTF=0;
  172.            }

  173.      if(ADIE && ADIF)
  174.   {
  175.     ADIF=0; // A/D標志位清零
  176.     adval=ADRESH;//00000000 00000011
  177.         adval=adval<<8|ADRESL;//00000011 11111111
  178.     if(adval>x1) yy1=1;
  179.        else yy1=0;
  180.     GODONE=1;
  181.   }

  182. }

  183. void main()
  184. {  
  185.   TRISC=0x00;
  186.   TRISC|=0x0e;
  187.   TRISA=0x00;
  188.   TRISA|=0x34;
  189.   ANSEL=0x80;
  190.    RC0=0;  //電源指示
  191.    RC4=0;  //繼電器
  192.    RC5=0;  //PWM
  193.    RA0=0;  //手動自動指示
  194.    RA1=0;  //警告音
  195.          ledstate();
  196.           init();
  197.         GODONE=1;
  198.          delayms(100);  
  199.           while(1)
  200.           {  
  201.              if(key==0)
  202.           {
  203.           switch(mode)
  204.             {
  205.               case 0:pwm_out();
  206.                     break;
  207.               case 1:pwm_out1();
  208.                     break;
  209.             }
  210.           }  
  211.          else stopstate();         
  212.           }

  213. }
復制代碼

所有資料51hei提供下載:
xyd.rar (52.5 KB, 下載次數(shù): 70)


評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:221675 發(fā)表于 2018-8-31 14:47 | 只看該作者
謝謝分享,很給力。
回復

使用道具 舉報

板凳
ID:556500 發(fā)表于 2019-6-6 14:30 | 只看該作者
正是需要的
回復

使用道具 舉報

地板
ID:71535 發(fā)表于 2019-6-22 23:02 | 只看該作者
謝謝老司機分享!
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美性视频在线播放 | 97超碰人人草 | 特黄视频| 欧美日韩在线免费 | 久久婷婷国产麻豆91 | 精品国产亚洲一区二区三区大结局 | 国产一级大片 | 毛片视频网站 | 丁香婷婷久久久综合精品国产 | 亚洲午夜精品 | 成人精品免费视频 | 日日夜夜精品 | 久久久久久综合 | 亚洲三级国产 | 欧美日韩国产一区二区三区 | www.国产精品 | www.天天操.com | 久久久久久免费毛片精品 | 亚洲男人天堂av | 精品日韩 | 久久综合狠狠综合久久综合88 | 91精品国产综合久久香蕉麻豆 | 91精品国产综合久久国产大片 | 免费日韩av | 日日夜夜精品视频 | 亚洲一区二区在线电影 | 一区天堂 | 一区二区三区亚洲精品国 | 欧美久久一区二区三区 | 欧美日韩中文在线 | 欧美一区二区三区 | 三级视频国产 | 国产精品永久久久久久久www | 久久国产精品视频 | 美女一级黄 | 久久久久久久亚洲精品 | 精品二| 天堂av在线影院 | 可以看黄的视频 | www.天天操.com | 国产精品永久免费 |