找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 9339|回復(fù): 4
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)智能插座源碼與PCB電路原理圖設(shè)計(jì)資料

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
搞了好久搞出來的基于51單片機(jī)設(shè)計(jì)的智能插座實(shí)物圖:


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


單片機(jī)程序源碼如下:
  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. /*---本程序運(yùn)行在AT89C2051中----------------------------------*/
  12. /*---時(shí)間設(shè)置步長(zhǎng)為一小時(shí)-------------------------------------*/
  13. /*---可以根據(jù)需要更改變量K的判斷值修改時(shí)間步長(zhǎng)----------------*/
  14. /*---上電后先循環(huán)點(diǎn)亮定時(shí)時(shí)間指示燈并且蜂鳴器響,完成初始化---*/
  15. /*---每按一下按鍵,則定時(shí)時(shí)間增加一個(gè)時(shí)間步長(zhǎng)-----------------*/
  16. /*---充電過程中黃色指示燈閃爍表示正在充電---------------------*/
  17. /*---充電完成則點(diǎn)亮綠色指示燈,關(guān)閉黃色指示燈表示充電完成-----*/
  18. /*---充電完成后可以重新通過按鍵設(shè)置定時(shí)時(shí)間-------------------*/
  19. /*------------------------------------------------------------*/
  20. timer60ms(uchar i)                  //60ms定時(shí)器
  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. /*--------------------------子函數(shù)------------------------------*/
  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. /*--------------------------主函數(shù)------------------------------*/
  56. main()
  57. {
  58.    TMOD=0x01;
  59.    JDQ = 1;        //閉合繼電器,開始充電。
  60.                                 //此代碼不寫也可以,單片機(jī)默認(rèn)上電輸出高電平
  61.         YELLOW = 0; //點(diǎn)亮充電指示燈
  62.    CSH();
  63.    EA=1;                //CPU開放中斷
  64.         EX0=1;                //允許INT0中斷
  65.         IT0=1;            //打開外部中斷0

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

  67.         
  68.         t=1;                //上電默認(rèn)充電一小時(shí)


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

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

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

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

  153. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼


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


評(píng)分

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

查看全部評(píng)分

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

使用道具 舉報(bào)

沙發(fā)
ID:472070 發(fā)表于 2019-1-23 14:57 | 只看該作者
樓主,麻煩補(bǔ)充補(bǔ)充一點(diǎn)這個(gè)作品功能的用法和展示,這樣感興趣的朋友會(huì)更多。

我看這個(gè)標(biāo)題很感興趣,但點(diǎn)進(jìn)來看不知道你這個(gè)咚咚怎么用了
回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

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

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

這定時(shí)器配置 初始化 有for 循環(huán) 要反復(fù)執(zhí)行初始化嗎?

回復(fù)

使用道具 舉報(bào)

5#
ID:71233 發(fā)表于 2021-4-26 13:40 | 只看該作者
智能在哪里?應(yīng)該是一般的電源定時(shí)開關(guān)吧!
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表