找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

求大神教我如何寫這個(gè)程序?89c52單片機(jī)按鍵控制繼電器

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
c51單片機(jī)程序 實(shí)現(xiàn)一個(gè)按鍵閉合繼電器25秒之后斷開;接著閉合另一個(gè)繼電器3分鐘然后斷開接著打開一個(gè)外接3.3v的led燈1分鐘,單片機(jī)上有3.3v的接口,只需要延時(shí)1分鐘就行了,然后蜂鳴器響,結(jié)束!單片機(jī)上有蜂鳴器


IMG_6306.JPG (2.39 MB, 下載次數(shù): 46)

最小系統(tǒng)的

最小系統(tǒng)的

IMG_6307.JPG (2.37 MB, 下載次數(shù): 41)

IMG_6307.JPG

截圖02.jpg (75.65 KB, 下載次數(shù): 61)

這個(gè)是原理圖

這個(gè)是原理圖

截圖03.jpg (21.94 KB, 下載次數(shù): 56)

截圖03.jpg

截圖07.jpg (8.75 KB, 下載次數(shù): 45)

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

使用道具 舉報(bào)

沙發(fā)
ID:10947 發(fā)表于 2019-3-13 11:19 | 只看該作者
你自己的邏輯都清楚了,應(yīng)該挺容易了吧;
先檢測按鍵是否按下,然后一個(gè)個(gè)順序執(zhí)行;
有開發(fā)板就應(yīng)該有例程吧,看看按鍵檢測的例程,IO口控制的例程;
繼電器 蜂鳴器 LED都是控制IO口的輸出。
回復(fù)

使用道具 舉報(bào)

板凳
ID:402168 發(fā)表于 2019-3-13 16:20 | 只看該作者
lfc315 發(fā)表于 2019-3-13 11:19
你自己的邏輯都清楚了,應(yīng)該挺容易了吧;
先檢測按鍵是否按下,然后一個(gè)個(gè)順序執(zhí)行;
有開發(fā)板就應(yīng)該有例 ...

這個(gè) 不太會,小白一個(gè)
回復(fù)

使用道具 舉報(bào)

地板
ID:213173 發(fā)表于 2019-3-13 17:11 | 只看該作者
這個(gè)程序很簡單,按鍵按下開始計(jì)時(shí),按順序工作300秒結(jié)束,等待按鍵再次按下。
給你寫一個(gè)程序,端口根據(jù)實(shí)際電路自行重新定義,定時(shí)時(shí)間也可以自行修改。
  1. #include<reg51.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int

  4. sbit Key=P3^0;
  5. sbit Relay1=P2^0;
  6. sbit Relay2=P2^1;
  7. sbit LED=P2^2;
  8. sbit Buzzer=P2^3;
  9. uchar Cnt50ms=0;
  10. uint Cnt1s=0;
  11. bit sign=0;       
  12. /****延時(shí)程序*****/
  13. void delay(uint t)
  14. {
  15.         while(t--);
  16. }
  17. /****定時(shí)器初始化程序*****/
  18. void Timer0Init()        //50毫秒@11.0592MHz
  19. {
  20.         TMOD= 0x01;                //設(shè)置定時(shí)器模式
  21.         TL0 = 0x00;                //設(shè)置定時(shí)初值
  22.         TH0 = 0x4C;                //設(shè)置定時(shí)初值
  23.         TR0 = 1;                //定時(shí)器0開
  24.         EA=1;                        //開總中斷
  25.         ET0=1;                        //開定時(shí)器0中斷
  26. }
  27. /****主程序*******/
  28. void main()
  29. {
  30.         Timer0Init();
  31.         while(1)
  32.         {
  33.                 if(Key==0)
  34.                 {
  35.                         delay(10000);//延時(shí)消抖
  36.                         if((Key==0)&&(sign==0))
  37.                         {
  38.                                 sign=1;//按鍵自鎖 啟動定時(shí)器計(jì)時(shí)
  39.                         }
  40.                 }
  41.         }
  42. }
  43. /****中斷服務(wù)程序*******/
  44. void timer0() interrupt        1//50毫秒@11.0592MHz
  45. {
  46.         TL0 = 0x00;                //設(shè)置定時(shí)初值
  47.         TH0 = 0x4C;                //設(shè)置定時(shí)初值
  48.         if(sign==1)
  49.         {
  50.                 Cnt50ms++;
  51.                 if(Cnt50ms>=20)
  52.                 {
  53.                         Cnt50ms=0;
  54.                         Cnt1s++;
  55.                 }
  56.                 if(Cnt1s<25)
  57.                 {
  58.                         Relay1=0;
  59.                 }
  60.                 if(Cnt1s>=25)
  61.                 {
  62.                         Relay1=1;
  63.                         Relay2=0;
  64.                 }
  65.                 if(Cnt1s>=205)
  66.                 {
  67.                         Relay2=1;
  68.                         LED=0;
  69.                 }
  70.                 if(Cnt1s>=265)
  71.                 {
  72.                         LED=1;
  73.                         Buzzer=0;
  74.                 }
  75.                 if(Cnt1s>=300)
  76.                 {
  77.                         sign=0;
  78.                         Cnt50ms=0;
  79.                         Cnt1s=0;
  80.                         Buzzer=1;
  81.                 }
  82.         }
  83. }
復(fù)制代碼

評分

參與人數(shù) 1黑幣 +12 收起 理由
電子黑火藥 + 12 很給力!

查看全部評分

回復(fù)

使用道具 舉報(bào)

5#
ID:402168 發(fā)表于 2019-3-13 18:08 | 只看該作者
wulin 發(fā)表于 2019-3-13 17:11
這個(gè)程序很簡單,按鍵按下開始計(jì)時(shí),按順序工作300秒結(jié)束,等待按鍵再次按下。
給你寫一個(gè)程序,端口根據(jù) ...

謝謝 我研究一下
回復(fù)

使用道具 舉報(bào)

6#
ID:402168 發(fā)表于 2019-3-13 18:56 | 只看該作者
wulin 發(fā)表于 2019-3-13 17:11
這個(gè)程序很簡單,按鍵按下開始計(jì)時(shí),按順序工作300秒結(jié)束,等待按鍵再次按下。
給你寫一個(gè)程序,端口根據(jù) ...

大神 我測試過了 ,很完美,就是我的晶振是12M的,然后led燈一端接3.3v的vcc一端接P2.2電壓不夠 只微微的發(fā)亮。不知道有什么解決的辦法不,然后如果要兩個(gè)按鍵控制單獨(dú)分別控制一樣的程序的話 需要加那些語句呀?
回復(fù)

使用道具 舉報(bào)

7#
ID:402168 發(fā)表于 2019-3-13 19:03 | 只看該作者
謝謝 大神 很完美,如果再加一個(gè)按鍵,兩個(gè)獨(dú)立按鍵 能夠獨(dú)立的執(zhí)行 上面一樣的程序 怎么做呀/
回復(fù)

使用道具 舉報(bào)

8#
ID:213173 發(fā)表于 2019-3-14 14:22 | 只看該作者
電子黑火藥 發(fā)表于 2019-3-13 19:03
謝謝 大神 很完美,如果再加一個(gè)按鍵,兩個(gè)獨(dú)立按鍵 能夠獨(dú)立的執(zhí)行 上面一樣的程序 怎么做呀/

程序已經(jīng)改為兩個(gè)按鍵控制與單獨(dú)分別控制一樣,定時(shí)器與12MHz晶振配套。至于LED亮度不足可能改變供電電壓不易,只能減小限流電阻或換用超高亮LED。
  1. #include<reg51.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int

  4. sbit Key1=P3^0;
  5. sbit Key2=P3^1;
  6. sbit Relay1=P2^0;
  7. sbit Relay2=P2^1;
  8. sbit LED=P2^2;
  9. sbit Buzzer=P2^3;
  10. uchar Cnt50ms=0;
  11. uint Cnt1s=0;
  12. bit sign=0;        
  13. /****延時(shí)程序*****/
  14. void delay(uint t)
  15. {
  16.         while(t--);
  17. }
  18. /****定時(shí)器初始化程序*****/
  19. void Timer0Init()                //50毫秒@12.000MHz
  20. {
  21.         TMOD= 0x01;                //設(shè)置定時(shí)器模式
  22.         TL0 = 0xB0;                //設(shè)置定時(shí)初值
  23.         TH0 = 0x3C;                //設(shè)置定時(shí)初值
  24.         TR0 = 1;                        //定時(shí)器0開始計(jì)時(shí)
  25.         EA=1;         //開總中斷
  26.         ET0=1;        //開定時(shí)器0中斷
  27. }
  28. /*
  29. void Timer0Init()        //50毫秒@11.0592MHz
  30. {
  31.         TMOD= 0x01;                //設(shè)置定時(shí)器模式
  32.         TL0 = 0x00;                //設(shè)置定時(shí)初值
  33.         TH0 = 0x4C;                //設(shè)置定時(shí)初值
  34.         TR0 = 1;                        //定時(shí)器0開
  35.         EA=1;                        //開總中斷
  36.         ET0=1;                        //開定時(shí)器0中斷
  37. }*/
  38. /****主程序*******/
  39. void main()
  40. {
  41.         Timer0Init();
  42.         while(1)
  43.         {
  44.                 if((Key1==0)||(Key2==0))
  45.                 {
  46.                         delay(10000);//延時(shí)消抖
  47.                         if((Key1==0)||(Key2==0)&&(sign==0))
  48.                         {
  49.                                 sign=1;//按鍵自鎖 啟動定時(shí)器計(jì)時(shí)
  50.                         }
  51.                 }
  52.         }
  53. }
  54. /****中斷服務(wù)程序*******/
  55. void timer0() interrupt 1
  56. {
  57. //        TL0 = 0x00;    //設(shè)置定時(shí)初值50毫秒@11.0592MHz
  58. //        TH0 = 0x4C;    //設(shè)置定時(shí)初值50毫秒@11.0592MHz
  59.         TL0 = 0xB0;                //設(shè)置定時(shí)初值50毫秒@12.000MHz
  60.         TH0 = 0x3C;                //設(shè)置定時(shí)初值50毫秒@12.000MHz
  61.         if(sign==1)
  62.         {
  63.             Cnt50ms++;
  64.             if(Cnt50ms>=20)
  65.             {
  66.                     Cnt50ms=0;
  67.                     Cnt1s++;
  68.             }
  69.             if(Cnt1s<25)
  70.             {
  71.                     Relay1=0;
  72.             }
  73.             if(Cnt1s>=25)
  74.             {
  75.                     Relay1=1;
  76.                     Relay2=0;
  77.             }
  78.             if(Cnt1s>=205)
  79.             {
  80.                     Relay2=1;
  81.                     LED=0;
  82.             }
  83.             if(Cnt1s>=265)
  84.             {
  85.                     LED=1;
  86.                     Buzzer=0;
  87.             }
  88.             if(Cnt1s>=300)
  89.             {
  90.                     sign=0;
  91.                     Cnt50ms=0;
  92.                     Cnt1s=0;
  93.                     Buzzer=1;
  94.             }
  95.         }
  96. }
復(fù)制代碼



回復(fù)

使用道具 舉報(bào)

9#
ID:483991 發(fā)表于 2019-3-14 15:47 | 只看該作者
少一些求拜,多去看看別人的例子,多敲代,多調(diào)試才會進(jìn)步
回復(fù)

使用道具 舉報(bào)

10#
ID:402168 發(fā)表于 2019-3-27 15:03 | 只看該作者
wulin 發(fā)表于 2019-3-14 14:22
程序已經(jīng)改為兩個(gè)按鍵控制與單獨(dú)分別控制一樣,定時(shí)器與12MHz晶振配套。至于LED亮度不足可能改變供電電壓 ...

大神兩個(gè)按鍵分開的話,按鍵1控制兩個(gè)繼電器跟之前的一樣,然后按鍵2控制3個(gè)繼電器,比之前多一個(gè)繼電器其他的和之前的一樣,這個(gè)代碼怎么分開呀,加一個(gè)判斷嗎
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

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