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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機軟件部分不清楚錯誤的地方求大神指教

[復制鏈接]
回帖獎勵 50 黑幣 回復本帖可獲得 5 黑幣獎勵! 每人限 1 次
跳轉到指定樓層
樓主
ID:437743 發表于 2019-7-8 18:26 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
電動窗簾主要有以下幾大功能:(1)手動控制:該功能使電動窗簾具有手動正傳、手動反轉 和手動停止的功能。而且增加了工作狀態指示,電機工作在正傳、反轉和停止狀態的時候,手機APP上均有不同工作狀態指示。(2)自動控制:窗簾的關閉和開啟通過環境亮度自動完成窗簾的開啟或關閉操作,“天黑關閉,天亮打開”具有智能管理,不產生誤動作。(3)防過卷功能:通過在窗戶兩邊各安裝一個行程開關,當窗簾開啟或關閉到位時,行程開關動作,然后單片機發出控制信號使步進電機停止動作。
窗簾的正轉、反轉和停止功能可由手機APP通過藍牙通訊向單片機發布命令來控制步進電機的運轉以實現。自動控制通過光線檢測電路來控制單片機輸出電平繼而控制電機的正轉和反轉。
軟件程序代碼:
#include "reg52.h"                         //此文件中定義了單片機的一些特殊功能寄存器
#include"XPT2046.h"      
typedef unsigned int u16;          //對數據類型進行聲明定義
typedef unsigned char u8;
u8 receiveData;
sbit led=P2^4;    //手動運行指示燈
sbit xcg=P3^2;   //左行程開關
sbit xck=P3^3;   //右行程開關
u8 tab[]={0x0e,0x0c,0x0d,0x09,0x0b,0x03,0x07,0x06};
u8 a=0,b=1;//用于記憶行程開關狀態
void delay(u16 i)//延時函數
{
        while(i--);
}
void UsartConfiguration()
{
        SCON=0X50;   //設置為工作方式1                              
        TMOD=0X20;   //設置定時器1工作方式2               
        TH1=0XFD;    //定時器裝初值(波特率為9600)                     
        TL1=0XFD;
        ES=1;        //開串行中斷                    
        EA=1;        //開總中斷                    
        TR1=1;       //啟動定時器1                    
}
void motor1()//關窗簾
{
  u8 i;
          for(i=0;i<8;i++)      
          {
                  P1=tab;
                  delay(180);
}      
}
void motor2()//開窗簾
{
    u8 i;
          for(i=7;i>=0;i--)      
          {
                  P1=tab;
                  delay(180);
          }      
}
void xcg1()
{
     if(xcg==0)                  //檢測按鍵是否按下
        {      
                delay(600);   //消除抖動 一般大約10ms
                if(xcg==0)         //再次判斷按鍵是否按下
                {
                        a=0;
                        b=1;
                }
        }
}
void xck1()
{
   if(xck==0)                  //檢測按鍵是否按下
        {      
                delay(600);   //消除抖動 一般大約10ms
                if(xck==0)         //再次判斷按鍵是否按下
                {
                        a=1;
                        b=0;
                }
}
}
void main()
{      
         u16 light,mode=1;//開機進入自動模式(mode=1)
         UsartConfiguration();
        while(1)
        {
                while(mode==1)//自動模式
          {
                  led=1;
                  light=Read_AD_Data(0xA4);//讀取光敏電阻值
                  if(receiveData=='S'){mode=0;}//手動模式
          while (a==1&&light<150)//關窗簾
          {      
                        if(receiveData=='S'){mode=0;light=150;}
                        while(receiveData=='T'){P1=0xFF;}
                    motor1();
                      xcg1();      
          }
          while (b==1&&light>200)//開窗簾
          {      
                        if(receiveData=='S'){mode=0;light=200;}
                        while(receiveData=='T'){P1=0xFF;}
                motor2();
                        xck1();
          }
                P1=0xFF;//電機斷電停止
          }
         while(mode==0)//手動模式
         {                   led=0;//手動控制指示燈
                   if (receiveData=='Z'){mode=1;}
     while (a==1&&receiveData=='G')//關窗簾
          {      
      motor1();
                                 b=1;
                                 xcg1();
                                 while(receiveData=='T'){P1=0xFF;}
          }
           while (b==1&&receiveData=='K')//開窗簾
          {
                    motor2();
                                a=1;
                                xck1();
                          while(receiveData=='T'){P1=0xFF;}
                }
                P1=0xFF;
   }
        }               
}
void Usart() interrupt 4   //串行口中斷                     
{
    receiveData=SBUF;      //接收數據               
        RI = 0;            //清除接收中斷標志位                                    
}
AD轉換 XPT2046.h程序:
#include"XPT2046.h"
sbit DOUT = P3^7;          //輸出
sbit CLK  = P3^6;          //時鐘
sbit DIN  = P3^4;          //輸入
sbit CS   = P3^5;          //片選
uint Read_AD_Data(uchar cmd);
uint SPI_Read(void);
void SPI_Write(uchar dat);
void SPI_Start(void)
{
        CLK = 0;
  CS  = 1;
DIN = 1;
        CLK = 1;
        CS  = 0;               
}
void SPI_Write(uchar dat)
{
        uchar i;
        CLK = 0;
        for(i=0; i<8; i++)
        {
                DIN = dat >> 7;          //放置最高位
                dat <<= 1;
                CLK = 0;                        //上升沿放置數據
                CLK = 1;
        }
}
uint SPI_Read(void)
{
        uint i, dat=0;
        CLK = 0;
        for(i=0; i<12; i++)                //接收12位數據
        {
                dat <<= 1;
                CLK = 1;
                CLK = 0;
                dat |= DOUT;
        }
        return dat;      
}
uint Read_AD_Data(uchar cmd)
{
        uchar i;
        uint AD_Value;
CLK = 0;
CS  = 0;
        SPI_Write(cmd);
        for(i=6; i>0; i--);         //延時等待轉換結果
        CLK = 1;          //發送一個時鐘周期,清除BUSY
        _nop_();
        _nop_();
        CLK = 0;
        _nop_();
        _nop_();
        AD_Value=SPI_Read();
        CS = 1;
        return AD_Value;      
}



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

使用道具 舉報

沙發
ID:518788 發表于 2019-7-8 20:16 | 只看該作者
這個創意挺好的,但是我并沒有看見你的問題在哪啊?????
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲精品电影网在线观看 | 99re超碰| 久久高清免费视频 | 欧美中文字幕一区二区三区 | 在线观看中文字幕一区二区 | 日本久久一区二区三区 | 亚洲第一在线 | 欧美美女爱爱视频 | 影音先锋中文字幕在线观看 | www在线视频 | 国产精品久久久久久久粉嫩 | 狠狠干五月天 | 亚洲精品自拍视频 | 黄色在线观看网站 | 久久久精品综合 | 成人a视频片观看免费 | 成人免费三级电影 | 欧美一区二区久久 | 欧美精品久久久 | 欧美成人一区二区三区片免费 | 麻豆av网站 | 欧洲色| 欧美在线精品一区 | 羞羞羞视频 | 国产a视频 | 亚洲激情一区二区 | 99视频网站 | 日本中文在线 | 日韩av免费看| 人人性人人性碰国产 | 婷婷五月色综合香五月 | 国产精品久久久久久婷婷天堂 | 韩国av网站在线观看 | 91亚洲精品久久久电影 | 久久亚洲一区 | 国产一区 | 91精品国产91久久久久游泳池 | 91久久久久久久久久久 | 久久久久久国产 | 天天久久| 欧美日韩在线看 |