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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 9285|回復: 4
打印 上一主題 下一主題
收起左側

單片機智能插座源碼與PCB電路原理圖設計資料

  [復制鏈接]
跳轉到指定樓層
樓主
搞了好久搞出來的基于51單片機設計的智能插座實物圖:


Altium Designer畫的智能插座原理圖和PCB圖如下:(51hei附件中可下載工程文件)


單片機程序源碼如下:
  1. #include <reg51.h>
  2. #define uchar unsigned char
  3. uchar code LED_table[]={0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00};
  4. sbit JDQ=P3^7;           //繼電器(高電平不充電,低電平充電)
  5. sbit Beep=P3^5;            //蜂鳴器
  6. sbit key=P3^2;                //按鍵
  7. sbit GREEN=P3^0;        //充電完成指示燈
  8. sbit YELLOW=P3^1;        //充電中指示燈
  9. /*------------------------------------------------------------*/
  10. /*------------------------程序說明----------------------------*/
  11. /*---本程序運行在AT89C2051中----------------------------------*/
  12. /*---時間設置步長為一小時-------------------------------------*/
  13. /*---可以根據需要更改變量K的判斷值修改時間步長----------------*/
  14. /*---上電后先循環點亮定時時間指示燈并且蜂鳴器響,完成初始化---*/
  15. /*---每按一下按鍵,則定時時間增加一個時間步長-----------------*/
  16. /*---充電過程中黃色指示燈閃爍表示正在充電---------------------*/
  17. /*---充電完成則點亮綠色指示燈,關閉黃色指示燈表示充電完成-----*/
  18. /*---充電完成后可以重新通過按鍵設置定時時間-------------------*/
  19. /*------------------------------------------------------------*/
  20. timer60ms(uchar i)                  //60ms定時器
  21. {
  22.   
  23.   unsigned char k;
  24.   for(k=0;k<i;k++)
  25.   {
  26.     TH0=(65536-60000)/256;
  27.         TL0=(65536-60000)%256;
  28.         ET0=1;
  29.         EA=1;
  30.         TR0=1;

  31.   }
  32. }
  33. delay1ms(unsigned int z)
  34. {
  35.   unsigned int x,y;
  36.         for(x=z;x>0;x--)
  37.                 for(y=114;y>0;y--);
  38. }
  39. /*--------------------------子函數------------------------------*/
  40. uchar i;
  41. unsigned int t = 0;
  42. unsigned int k = 0;
  43. unsigned int m = 0;
  44. CSH()//初始化
  45. {
  46.    for(i=0;i<8;i++)
  47.    {
  48.      P1=LED_table[i];
  49.          delay1ms(150);
  50.    }
  51.    Beep=1;GREEN=0;YELLOW=0;
  52.    delay1ms(300);
  53.    Beep=0; P1=0xff; GREEN=1; YELLOW=1;   
  54. }

  55. /*--------------------------主函數------------------------------*/
  56. main()
  57. {
  58.    TMOD=0x01;
  59.    JDQ = 1;        //閉合繼電器,開始充電。
  60.                                 //此代碼不寫也可以,單片機默認上電輸出高電平
  61.         YELLOW = 0; //點亮充電指示燈
  62.    CSH();
  63.    EA=1;                //CPU開放中斷
  64.         EX0=1;                //允許INT0中斷
  65.         IT0=1;            //打開外部中斷0

  66.         timer60ms(1);        //定時器T0初始化

  67.         
  68.         t=1;                //上電默認充電一小時


  69.         while(1)
  70.         {
  71.       if(t==0)                                 //定時充電已結束
  72.                   P1 = 0xff;                //關閉充電時間指示燈
  73.           else
  74.                   P1=LED_table[t-1];//點亮充電時間指示燈

  75.           /*---充電過程中黃色指示燈閃爍---*/
  76.           if(m > 4)                //每300ms充電指示燈閃爍一次
  77.           {                                //這里沒用m==5去做條件判斷,是因為蜂鳴器響的延時時間過程中,會使m>5
  78.                                         //當m>5后,==去判斷,此處代碼將不會再被執行
  79.                                         //壇友可以修改此處代碼看一下實驗現象就明白了
  80.                                         //PS:也可以用m==5去做條件判斷,只需每次蜂鳴器響后將m重新賦值為0。詳見下面注釋掉的程序代碼
  81.                   m = 0;
  82.                   YELLOW = ~YELLOW;        //取反實現閃爍
  83.           }
  84.          
  85.           if(k==30000)                        //半小時時間到
  86.       {
  87.            k = 0;
  88.                    /*---每減去一小時,蜂鳴器響一下---*/
  89.            t-=1;                        //減去一小時
  90.                    Beep = 1;                //蜂鳴器響一下,提示時間流逝一小時
  91.            delay1ms(500);
  92.            Beep = 0;
  93. //                   m = 0;                        //這句代碼非常關鍵  因為在蜂鳴器響的這段時間延時為500ms,而充電指示燈閃爍的時間間隔為300ms,500ms>300ms,
  94.                                                         //代表時間間隔的m已經大于5,如果此時不將m置0,充電指示燈將不再閃爍
  95.                   
  96.            if(t==0)                        //定時時間已到
  97.            {
  98.                TR0 = 0;        //停止定時器
  99.                TH0 = (65536-60000)/256;   //高8位賦值
  100.                TL0 = (65536-60000)%256;   //低8位賦值
  101.                            
  102.                            JDQ = 0;          //斷開繼電器,停止充電
  103.                            GREEN = 0;        //充電完成指示
  104.                            YELLOW = 1;        //關閉充電指示燈
  105.                            P1 = 0xff;        //關閉充電時間指示燈
  106.                            
  107.                Beep = 1;        //蜂鳴器響一下,提示充電完成
  108.                delay1ms(1000);
  109.                Beep = 0;
  110.            }
  111.                    else                                //定時時間還沒有到,則繼續顯示剩余的定時時間
  112.                    {
  113.                            P1=LED_table[t-1];        //點亮充電時間指示燈
  114.                    }
  115.        }
  116.         }
  117.    
  118.    
  119. }

  120. /*---定時器T0中斷函數---*/
  121. void Timer0() interrupt 1
  122. {
  123.         TH0=(65536-60000)/256;        //賦初值
  124.         TL0=(65536-60000)%256;
  125.         k++;                                        //用于一小時定時的變量+1
  126.         m++;                                        //用于300ms定時的變量+1
  127. }
  128. /*---外部中斷函數---*/
  129. void Int0() interrupt 0        //按鍵操作
  130. {
  131.           delay1ms(50);                        //延時去抖
  132.           if(key==0)                        //有鍵按下
  133.           {
  134.                 Beep = 1;                //蜂鳴器響一聲,作為按鍵音
  135.                 delay1ms(100);
  136.                 Beep = 0;        
  137.         
  138.                 t+=1;                        //按下按鍵一次,則增加一小時
  139.                 if(t>8)                        //8次一個循環
  140.                         t = 1;
  141.                
  142.                 P1=LED_table[t-1];        //點亮時間指示燈
  143.                 GREEN =  1;                        //關閉充電完成指示燈
  144. //                m = 0;                                //為了使充電指示燈重現閃爍
  145.                
  146.                 TR0=0;        //停止定時器
  147.                
  148.                 TH0=(65536-60000)/256;          //高8位賦值    重新賦初始值
  149.                 TL0=(65536-60000)%256;          //低8位賦值
  150.                 TR0=1;        //啟動定時器        

  151.                 JDQ = 1;//閉合繼電器,開始充電
  152. ……………………

  153. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼


所有資料51hei提供下載:
充電定時器.zip (3.34 MB, 下載次數: 133)


評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:472070 發表于 2019-1-23 14:57 | 只看該作者
樓主,麻煩補充補充一點這個作品功能的用法和展示,這樣感興趣的朋友會更多。

我看這個標題很感興趣,但點進來看不知道你這個咚咚怎么用了
回復

使用道具 舉報

板凳
ID:611470 發表于 2020-5-26 14:51 | 只看該作者
這個是干什么滴
回復

使用道具 舉報

地板
ID:5501 發表于 2021-4-25 10:39 | 只看該作者
本帖最后由 shgdd520com 于 2021-4-25 15:32 編輯

  if(k==30000)                        //半小時時間到   
請教下樓主,這個K=30000 是什么意思,定時器定時的是60ms ,這個30000 是怎么計算的呢 timer60ms(uchar i)                  //60ms定時器
{

  unsigned char k;
  for(k=0;k<i;k++)
  {
    TH0=(65536-60000)/256;
                TL0=(65536-60000)%256;
                ET0=1;
                EA=1;
                TR0=1;
  }
}

這定時器配置 初始化 有for 循環 要反復執行初始化嗎?

回復

使用道具 舉報

5#
ID:71233 發表于 2021-4-26 13:40 | 只看該作者
智能在哪里?應該是一般的電源定時開關吧!
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 中文字幕久久精品 | 欧美性一区二区三区 | 在线亚洲精品 | 操操日| 麻豆精品一区二区三区在线观看 | 久久99久久久久 | 国产视频1 | 欧美精品第三页 | 自拍偷拍精品 | 午夜爱爱毛片xxxx视频免费看 | 国产午夜精品一区二区三区四区 | 中文字幕一区在线观看视频 | 久久精品视频免费观看 | 男人av在线播放 | 精品成人佐山爱一区二区 | 久久精品国产久精国产 | 国产精品夜色一区二区三区 | 国产一区二区麻豆 | 久久一热 | 精品久久久久久亚洲精品 | 久久青草av | 日韩区| 久草视频观看 | 免费看淫片 | h视频在线观看免费 | 91免费版在线观看 | 成人二区 | 亚洲高清在线观看 | 久久精品久久综合 | 亚洲精品99| 色天天综合 | 自拍偷拍在线视频 | 欧美日产国产成人免费图片 | 欧美8一10sex性hd | 日本大片在线播放 | 国产一区二区三区四 | 超碰3 | 亚洲日韩中文字幕一区 | 狠狠爱免费视频 | 欧美精品一区二区三区一线天视频 | 欧美日韩国产一区二区三区 |