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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4326|回復: 9
收起左側

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

[復制鏈接]
ID:402168 發表于 2019-3-12 18:55 | 顯示全部樓層 |閱讀模式
c51單片機程序 實現一個按鍵閉合繼電器25秒之后斷開;接著閉合另一個繼電器3分鐘然后斷開接著打開一個外接3.3v的led燈1分鐘,單片機上有3.3v的接口,只需要延時1分鐘就行了,然后蜂鳴器響,結束!單片機上有蜂鳴器


最小系統的

最小系統的
IMG_6307.JPG

這個是原理圖

這個是原理圖
截圖03.jpg
截圖07.jpg
回復

使用道具 舉報

ID:10947 發表于 2019-3-13 11:19 | 顯示全部樓層
你自己的邏輯都清楚了,應該挺容易了吧;
先檢測按鍵是否按下,然后一個個順序執行;
有開發板就應該有例程吧,看看按鍵檢測的例程,IO口控制的例程;
繼電器 蜂鳴器 LED都是控制IO口的輸出。
回復

使用道具 舉報

ID:402168 發表于 2019-3-13 16:20 | 顯示全部樓層
lfc315 發表于 2019-3-13 11:19
你自己的邏輯都清楚了,應該挺容易了吧;
先檢測按鍵是否按下,然后一個個順序執行;
有開發板就應該有例 ...

這個 不太會,小白一個
回復

使用道具 舉報

ID:213173 發表于 2019-3-13 17:11 | 顯示全部樓層
這個程序很簡單,按鍵按下開始計時,按順序工作300秒結束,等待按鍵再次按下。
給你寫一個程序,端口根據實際電路自行重新定義,定時時間也可以自行修改。
  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. /****延時程序*****/
  13. void delay(uint t)
  14. {
  15.         while(t--);
  16. }
  17. /****定時器初始化程序*****/
  18. void Timer0Init()        //50毫秒@11.0592MHz
  19. {
  20.         TMOD= 0x01;                //設置定時器模式
  21.         TL0 = 0x00;                //設置定時初值
  22.         TH0 = 0x4C;                //設置定時初值
  23.         TR0 = 1;                //定時器0開
  24.         EA=1;                        //開總中斷
  25.         ET0=1;                        //開定時器0中斷
  26. }
  27. /****主程序*******/
  28. void main()
  29. {
  30.         Timer0Init();
  31.         while(1)
  32.         {
  33.                 if(Key==0)
  34.                 {
  35.                         delay(10000);//延時消抖
  36.                         if((Key==0)&&(sign==0))
  37.                         {
  38.                                 sign=1;//按鍵自鎖 啟動定時器計時
  39.                         }
  40.                 }
  41.         }
  42. }
  43. /****中斷服務程序*******/
  44. void timer0() interrupt        1//50毫秒@11.0592MHz
  45. {
  46.         TL0 = 0x00;                //設置定時初值
  47.         TH0 = 0x4C;                //設置定時初值
  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. }
復制代碼

評分

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

查看全部評分

回復

使用道具 舉報

ID:402168 發表于 2019-3-13 18:08 | 顯示全部樓層
wulin 發表于 2019-3-13 17:11
這個程序很簡單,按鍵按下開始計時,按順序工作300秒結束,等待按鍵再次按下。
給你寫一個程序,端口根據 ...

謝謝 我研究一下
回復

使用道具 舉報

ID:402168 發表于 2019-3-13 18:56 | 顯示全部樓層
wulin 發表于 2019-3-13 17:11
這個程序很簡單,按鍵按下開始計時,按順序工作300秒結束,等待按鍵再次按下。
給你寫一個程序,端口根據 ...

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

使用道具 舉報

ID:402168 發表于 2019-3-13 19:03 | 顯示全部樓層
謝謝 大神 很完美,如果再加一個按鍵,兩個獨立按鍵 能夠獨立的執行 上面一樣的程序 怎么做呀/
回復

使用道具 舉報

ID:213173 發表于 2019-3-14 14:22 | 顯示全部樓層
電子黑火藥 發表于 2019-3-13 19:03
謝謝 大神 很完美,如果再加一個按鍵,兩個獨立按鍵 能夠獨立的執行 上面一樣的程序 怎么做呀/

程序已經改為兩個按鍵控制與單獨分別控制一樣,定時器與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. /****延時程序*****/
  14. void delay(uint t)
  15. {
  16.         while(t--);
  17. }
  18. /****定時器初始化程序*****/
  19. void Timer0Init()                //50毫秒@12.000MHz
  20. {
  21.         TMOD= 0x01;                //設置定時器模式
  22.         TL0 = 0xB0;                //設置定時初值
  23.         TH0 = 0x3C;                //設置定時初值
  24.         TR0 = 1;                        //定時器0開始計時
  25.         EA=1;         //開總中斷
  26.         ET0=1;        //開定時器0中斷
  27. }
  28. /*
  29. void Timer0Init()        //50毫秒@11.0592MHz
  30. {
  31.         TMOD= 0x01;                //設置定時器模式
  32.         TL0 = 0x00;                //設置定時初值
  33.         TH0 = 0x4C;                //設置定時初值
  34.         TR0 = 1;                        //定時器0開
  35.         EA=1;                        //開總中斷
  36.         ET0=1;                        //開定時器0中斷
  37. }*/
  38. /****主程序*******/
  39. void main()
  40. {
  41.         Timer0Init();
  42.         while(1)
  43.         {
  44.                 if((Key1==0)||(Key2==0))
  45.                 {
  46.                         delay(10000);//延時消抖
  47.                         if((Key1==0)||(Key2==0)&&(sign==0))
  48.                         {
  49.                                 sign=1;//按鍵自鎖 啟動定時器計時
  50.                         }
  51.                 }
  52.         }
  53. }
  54. /****中斷服務程序*******/
  55. void timer0() interrupt 1
  56. {
  57. //        TL0 = 0x00;    //設置定時初值50毫秒@11.0592MHz
  58. //        TH0 = 0x4C;    //設置定時初值50毫秒@11.0592MHz
  59.         TL0 = 0xB0;                //設置定時初值50毫秒@12.000MHz
  60.         TH0 = 0x3C;                //設置定時初值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. }
復制代碼



回復

使用道具 舉報

ID:483991 發表于 2019-3-14 15:47 | 顯示全部樓層
少一些求拜,多去看看別人的例子,多敲代,多調試才會進步
回復

使用道具 舉報

ID:402168 發表于 2019-3-27 15:03 | 顯示全部樓層
wulin 發表于 2019-3-14 14:22
程序已經改為兩個按鍵控制與單獨分別控制一樣,定時器與12MHz晶振配套。至于LED亮度不足可能改變供電電壓 ...

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 草草草草视频 | 特黄视频| 在线男人天堂 | 精品久久久久久久久久久久久久 | 6080yy精品一区二区三区 | 刘亦菲国产毛片bd | 色资源站| 亚洲高清一区二区三区 | 91精品国产综合久久久久蜜臀 | 久久久久久中文字幕 | 精品毛片在线观看 | 日本不卡免费新一二三区 | 欧美日本韩国一区二区 | 夜夜爽99久久国产综合精品女不卡 | 亚洲视频第一页 | 日本精品一区二区三区在线观看视频 | 性高湖久久久久久久久3小时 | 一级黄色片一级黄色片 | 日本久久视频 | 亚洲午夜视频在线观看 | 中文字幕一区二区三区精彩视频 | 这里精品 | 色av一区二区 | 国产.com| 中国黄色在线视频 | 久久久www成人免费无遮挡大片 | 亚洲一区综合 | 91免费观看视频 | 一区二区三区精品视频 | 国产精品视频久久 | 国产欧美日韩精品在线观看 | 国产一级淫片a直接免费看 免费a网站 | 91porn成人精品 | 国产精品99久久久久久宅男 | 在线视频一区二区 | 在线观看国产视频 | 欧美一级视频免费看 | 亚洲精品乱码久久久久久9色 | a级片www | 在线观看亚洲精品 | 天天色综 |