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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

現在的單片機電機程序,只能通過輸入才能停,現想使它運行30s后自動停

[復制鏈接]
回帖獎勵 25 黑幣 回復本帖可獲得 5 黑幣獎勵! 每人限 1 次
跳轉到指定樓層
樓主
ID:437743 發表于 2019-7-9 00:38 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  1. #include "reg52.h"    //此文件中定義了單片機的一些特殊功能寄存器
  2. #include "XPT2046.h"
  3. typedef unsigned int u16;   //對數據類型進行聲明定義
  4. typedef unsigned char u8;
  5. u8 receiveData;
  6. sbit led=P2^4;    //手動運行指示燈
  7. sbit xcg=P3^2;   //左行程開關
  8. sbit xck=P3^3;   //右行程開關
  9. u8 tab[]={0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09};
  10. u8 a=0,b=1;//用于記憶行程開關狀態
  11. void delay(u16 i)//延時函數
  12. {
  13. while(i--);
  14. }
  15. void UsartConfiguration()
  16. {
  17. /*       SCON=0X50;   //設置為工作方式1   
  18.         TMOD=0X20;   //設置定時器1工作方式2
  19.   PCON = 0x00;
  20.         TH1=0XFD;    //定時器裝初值(波特率為9600)                     
  21.         TL1=0XFD;
  22.         ES=1;        //開串行中斷                    
  23.         EA=1;        //開總中斷                    
  24.         TR1=1;       //啟動定時器1
  25. */
  26. /*
  27. PCON |= 0x80;  //使能波特率倍速位SMOD 12M 9600
  28. SCON = 0x50;  //8位數據,可變波特率
  29. TMOD &= 0x0F;  //清除定時器1模式位
  30. TMOD |= 0x20;  //設定定時器1為8位自動重裝方式
  31. TL1 = 0xF9;  //設定定時初值
  32. TH1 = 0xF9;  //設定定時器重裝值
  33. ET1 = 0;  //禁止定時器1中斷
  34. TR1 = 1;  //啟動定時器1
  35. */

  36. PCON &= 0x7F;  //波特率不倍速   12M   2400
  37. SCON = 0x50;  //8位數據,可變波特率
  38. TMOD &= 0x0F;  //清除定時器1模式位
  39. TMOD |= 0x20;  //設定定時器1為8位自動重裝方式
  40. TL1 = 0xF3;  //設定定時初值
  41. TH1 = 0xF3;  //設定定時器重裝值
  42. ET1 = 0;  //禁止定時器1中斷
  43. TR1 = 1;  //啟動定時器1


  44. /* PCON &= 0x7F;  //波特率不倍速  11.0592M  9600
  45. SCON = 0x50;  //8位數據,可變波特率
  46. TMOD &= 0x0F;  //清除定時器1模式位
  47. TMOD |= 0x20;  //設定定時器1為8位自動重裝方式
  48. TL1 = 0xFD;  //設定定時初值
  49. TH1 = 0xFD;  //設定定時器重裝值
  50. ET1 = 0;  //禁止定時器1中斷
  51. TR1 = 1;  //啟動定時器1*/
  52. ES=1;        //開串行中斷                    
  53.   EA=1;        //開總中斷   
  54. }
  55. void motor1()//關窗簾
  56. {
  57.   u8 i;
  58.    for(i=0;i<8;i++)
  59.    {
  60.     P1=tab[i];
  61.     delay(180);
  62.   }
  63. }
  64. void motor2()//開窗簾
  65. {
  66.     char i;
  67.    for(i=7;i>=0;i--)
  68.    {
  69.     P1=tab[i];
  70.     delay(180);
  71.    }
  72. }
  73. void xcg1()
  74. {
  75.      if(xcg==0)    //檢測按鍵是否按下
  76. {
  77.   delay(600);   //消除抖動 一般大約10ms
  78.   if(xcg==0)  //再次判斷按鍵是否按下
  79.   {
  80.    a=0;
  81.    b=1;
  82.   }
  83. }
  84. }
  85. void xck1()
  86. {
  87.    if(xck==0)    //檢測按鍵是否按下
  88. {
  89.   delay(600);   //消除抖動 一般大約10ms
  90.   if(xck==0)  //再次判斷按鍵是否按下
  91.   {
  92.    a=1;
  93.    b=0;
  94.   }
  95. }
  96. }
  97. u8 SS='s';
  98. u8 ZZ='z';
  99. u8 TT='t';
  100. u8 KK='k';
  101. u8 GG='g';
  102. void main()
  103. {
  104.   u16 light,mode=1;//開機進入自動模式(mode=1)
  105.   UsartConfiguration();
  106. while(1)
  107. {
  108.   while(mode==1)//自動模式
  109.    {
  110.    led=1;
  111.    light=Read_AD_Data(0xA4);//讀取光敏電阻值
  112.    if(receiveData==SS){mode=0;break;}//手動模式
  113.    while (a==1&&light<150)//關窗簾
  114.    {
  115.     if(receiveData==SS){mode=0;light=150;break;}
  116.     while(receiveData==TT){P1=0xFF;}
  117.      motor1();
  118.       xcg1();
  119.     b=1;
  120.    }
  121.    while (b==1&&light>200)//開窗簾
  122.    {
  123.     if(receiveData==SS){mode=0;light=200;break;}
  124.     while(receiveData==TT){P1=0xFF;}
  125.       motor2();
  126.     xck1();
  127.     a=1;
  128.    }
  129.    P1=0xFF;//電機斷電停止
  130.   // delay(100);
  131.    }
  132.   while(mode==0)//手動模式
  133.   {
  134.      led=0;//手動控制指示燈
  135.     if (receiveData==ZZ){mode=1;break;}
  136.     while (a==1&&receiveData==GG)//關窗簾
  137.    {
  138.     motor1();
  139.       b=1;
  140.       xcg1();
  141.       while(receiveData==TT){P1=0xFF;}
  142.    }
  143.     while (b==1&&receiveData==KK)//開窗簾
  144.    {
  145.         motor2();
  146.      a=1;
  147.      xck1();
  148.      while(receiveData==TT){P1=0xFF;}
  149.    }
  150.    P1=0xFF;
  151.   // delay(100);
  152.    }
  153. }  
  154. }
  155. void Usart() interrupt 4   //串行口中斷                     
  156. {
  157. if(RI)
  158. {
  159.     receiveData=SBUF;      //接收數據      
  160.     RI = 0;            //清除接收中斷標志位
  161. }
  162. }
復制代碼

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

使用道具 舉報

沙發
ID:332444 發表于 2019-7-9 09:00 | 只看該作者
char jishi=0;
158.void Usart() interrupt 4   //串行口中斷                     
159.{
if(++jishi>=30秒)P1=0xFF;//電機斷電停止
160. if(RI)
161. {
162.    receiveData=SBUF;      //接收數據      
163.    RI = 0;            //清除接收中斷標志位
164. }
165.}
之上只給大概思路,具體實現語句就不寫了
回復

使用道具 舉報

板凳
ID:123289 發表于 2019-7-9 09:23 | 只看該作者
提出這個問題,說明你對單片機的運行原理還未弄清楚。
你是如何定義或理解單片機的“停”的呢?
回復

使用道具 舉報

地板
ID:10947 發表于 2019-7-9 10:33 | 只看該作者
打開電機后進行計時,達到30秒就關閉電機
回復

使用道具 舉報

5#
ID:282095 發表于 2019-7-9 10:45 | 只看該作者
單片機控制電機驅動吧
回復

使用道具 舉報

6#
ID:580736 發表于 2019-7-9 11:22 | 只看該作者
搞一個定時器,在程序時查詢定時到了就關閉
回復

使用道具 舉報

7#
ID:407535 發表于 2019-7-9 11:31 | 只看該作者
啟動電機之后, 延時30s讓他關閉啊
回復

使用道具 舉報

8#
ID:542954 發表于 2019-8-11 20:19 | 只看該作者
這個問題本不是問題。
整一個定時器中斷,到時間進入一個while(1)就可以了
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产午夜精品视频 | 一区二区视频在线 | 日韩精品在线免费观看 | 精品精品视频 | av在线伊人 | 亚洲午夜小视频 | 国产一级在线 | 欧美一区视频 | 精品精品视频 | 天堂一区二区三区 | 国产区精品 | 国产免费让你躁在线视频 | 久久成人一区 | 国产一级视频 | 99国产视频 | 精品久久久久久久久久久久久久 | 精品日韩一区二区 | 欧美中文字幕一区 | 久久中文视频 | 国产精品18久久久久久白浆动漫 | 中文字幕亚洲专区 | 国内精品久久久久久 | 日韩一二三区视频 | 亚洲精品在线国产 | 久久久123| 欧美一区日韩一区 | 日韩精品成人一区二区三区视频 | 亚洲精品在线免费看 | 午夜在线电影网 | 日韩精品一区二区三区中文在线 | 激情网站 | 韩日一区二区 | 欧美日韩一区二区在线播放 | 欧美一区二区免费 | 国产精品99久久久久久久久久久久 | 国产91久久精品一区二区 | 狠狠色综合久久婷婷 | 国产精品毛片 | 99国产精品视频免费观看一公开 | 在线播放精品视频 | 蜜桃一区二区三区在线 |