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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于51單片機(jī)的智能卷簾門Proteus仿真程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
有proteus仿真及程序代碼.內(nèi)容包括電機(jī)驅(qū)動模塊,mpx4115壓力傳感器模塊,光敏傳感器模塊,按鍵模塊,指示燈,自己寫文檔畫的圖,有需要的歡迎參考

仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機(jī)源程序如下:
  1. //線性區(qū)間標(biāo)度變換公式:    y=(115-15)/(243-13)*X+15kpa   
  2. #include <reg51.h>
  3. #include <intrins.h>
  4. #include <absacc.h>
  5. #include <stdio.h>

  6. #define  UP   20
  7. #define  DOWN  30
  8. #define  STOP  40
  9. #define uchar unsigned char                // 以后unsigned char就可以用uchar代替
  10. #define uint  unsigned int                // 以后unsigned int 就可以用uint 代替

  11. //壓力傳感器的ADC0832的引腳
  12. sbit ADCS =P2^2;  //ADC0832 chip seclect
  13. sbit ADDI =P2^4;  //ADC0832 k in
  14. sbit ADDO =P2^4;  //ADC0832 k out
  15. sbit ADCLK =P2^3;  //ADC0832 clock signal

  16. //光敏的ADC0832的引腳
  17. sbit ADC_DAT    = P1^5;                 // ADC0832的DI/DO引腳
  18. sbit ADC_CS     = P1^6;                 // ADC0832的CS引腳
  19. sbit ADC_CLK    = P1^7;                 // ADC0832的CLK引腳
  20. sbit BEEP       = P3^4;                        //喇叭
  21. sbit LED_BLUE   = P1^0;               
  22. sbit LED_YELLOW = P1^1;
  23. sbit KEY1       = P1^2;                        //開按鍵
  24. sbit KEY2       = P1^3;                        //關(guān)按鍵
  25. sbit KEY3       = P1^4;                        //停止鍵
  26. sbit Led_P      = P0^7;                // 指示燈
  27. uchar gLight      = 40;                        // 光線強(qiáng)度的閾值

  28. unsigned char getdata; //獲取ADC轉(zhuǎn)換回來的值
  29. void delay()//延時(shí)程序10ms
  30. {
  31.         unsigned i,j,k;
  32.         for(i=0;i<3;i++)
  33.                 for(j=0;j<20;j++)
  34.                         for(k=0;k<81;k++);
  35. }

  36. //讀ADC0832函數(shù),采集并返回
  37. unsigned int Adc0832(unsigned char channel)     //AD轉(zhuǎn)換,返回結(jié)果
  38. {
  39.     unsigned char i=0;
  40.     unsigned char j;
  41.     unsigned int dat=0;
  42.     unsigned char ndat=0;

  43.     if(channel==0)channel=2;
  44.     if(channel==1)channel=3;
  45.     ADDI=1;
  46.     _nop_();
  47.     _nop_();
  48.     ADCS=0;//拉低CS端
  49.     _nop_();
  50.     _nop_();
  51.     ADCLK=1;//拉高CLK端
  52.     _nop_();
  53.     _nop_();
  54.     ADCLK=0;//拉低CLK端,形成下降沿1
  55.     _nop_();
  56.     _nop_();
  57.     ADCLK=1;//拉高CLK端
  58.     ADDI=channel&0x1;
  59.     _nop_();
  60.     _nop_();
  61.     ADCLK=0;//拉低CLK端,形成下降沿2
  62.     _nop_();
  63.     _nop_();
  64.     ADCLK=1;//拉高CLK端
  65.     ADDI=(channel>>1)&0x1;
  66.     _nop_();
  67.     _nop_();
  68.     ADCLK=0;//拉低CLK端,形成下降沿3
  69.     ADDI=1;//控制命令結(jié)束
  70.     _nop_();
  71.     _nop_();
  72.     dat=0;
  73.     for(i=0;i<8;i++)
  74.     {
  75.         dat|=ADDO;//收數(shù)據(jù)
  76.         ADCLK=1;
  77.         _nop_();
  78.         _nop_();
  79.         ADCLK=0;//形成一次時(shí)鐘脈沖
  80.         _nop_();
  81.         _nop_();
  82.         dat<<=1;
  83.         if(i==7)dat|=ADDO;
  84.     }  
  85.     for(i=0;i<8;i++)
  86.     {
  87.         j=0;
  88.         j=j|ADDO;//收數(shù)據(jù)
  89.         ADCLK=1;
  90.         _nop_();
  91.         _nop_();
  92.         ADCLK=0;//形成一次時(shí)鐘脈沖
  93.         _nop_();
  94.         _nop_();
  95.         j=j<<7;
  96.         ndat=ndat|j;
  97.         if(i<7)ndat>>=1;
  98.     }
  99.     ADCS=1;//拉低CS端
  100.     ADCLK=0;//拉低CLK端
  101.     ADDO=1;//拉高數(shù)據(jù)端,回到初始狀態(tài)
  102.     dat<<=8;
  103.     dat|=ndat;
  104.     return(dat);            //return ad k
  105. }
  106. /*********************************************************/
  107. // ADC0832的時(shí)鐘脈沖
  108. /*********************************************************/
  109. void WavePlus()
  110. {
  111.         _nop_();
  112.         ADC_CLK = 1;
  113.         _nop_();
  114.         ADC_CLK = 0;
  115. }
  116. /*********************************************************/
  117. // 獲取指定通道的A/D轉(zhuǎn)換結(jié)果(光敏)
  118. /*********************************************************/
  119. uchar Get_ADC0832()
  120. {
  121.         uchar i;
  122.         uchar dat1=0;
  123.         uchar dat2=0;
  124.        
  125.         ADC_CLK = 0;                                // 電平初始化
  126.         ADC_DAT = 1;
  127.         _nop_();
  128.         ADC_CS = 0;
  129.         WavePlus();                                // 起始信號
  130.         ADC_DAT = 1;
  131.         WavePlus();                                // 通道選擇的第一位
  132.         ADC_DAT = 0;      
  133.         WavePlus();                                // 通道選擇的第二位
  134.         ADC_DAT = 1;       
  135.         for(i=0;i<8;i++)                        // 第一次讀取
  136.         {
  137.                 dat1<<=1;
  138.                 WavePlus();
  139.                 if(ADC_DAT)
  140.                         dat1=dat1|0x01;
  141.                 else
  142.                         dat1=dat1|0x00;
  143.         }       
  144.         for(i=0;i<8;i++)                        // 第二次讀取
  145.         {
  146.                 dat2>>= 1;
  147.                 if(ADC_DAT)
  148.                         dat2=dat2|0x80;
  149.                 else
  150.                         dat2=dat2|0x00;
  151.                 WavePlus();
  152.         }       
  153.         _nop_();                                        // 結(jié)束此次傳輸
  154.         ADC_DAT = 1;
  155.         ADC_CLK = 1;
  156.         ADC_CS  = 1;   
  157.         if(dat1==dat2)                                // 返回采集結(jié)果
  158.                 return dat1;
  159.         else
  160.                 return 0;
  161. }

  162. /*********************************************************/
  163. //   主函數(shù)
  164. /*********************************************************/

  165. void main(void)
  166. {  uchar temp;
  167.   unsigned int ppress = 0;
  168.   LED_BLUE=0;
  169.   BEEP=0;
  170.   while(1)
  171.   {                  /*壓力傳感器控制警報(bào)*/
  172.                 uchar light;
  173.                 uint k;
  174.                 getdata=Adc0832(0);        //獲取壓力值
  175.                 if(getdata>50)                //如果大于限定值
  176.                         for(k=0;k<2;k++)
  177.                         {        LED_BLUE=~LED_BLUE;                //則打開警報(bào)和藍(lán)燈
  178.                                  BEEP=~BEEP;
  179.                                 delay();
  180.                         }
  181.                 else  
  182.                         {        LED_BLUE=0;
  183.                                 BEEP=0;
  184.                         }       
  185.                    /*按鍵控制步進(jìn)電機(jī)*/
  186.                 if(KEY1==0)                //按下KEY1
  187.                 {
  188.                         temp=UP;//控制正轉(zhuǎn)
  189.                         P3=0X00;//清零
  190.                         delay();
  191.                 }
  192.                 if(KEY2==0)
  193.                 {
  194.                         temp=DOWN;//控制反轉(zhuǎn)
  195.                         P3=0X00;
  196.                         delay();
  197.                 }
  198.                 if(KEY3==0)
  199.                 {        temp=STOP;//控制停止 }
  200.                 switch(temp)
  201.                 {
  202.                 case DOWN : P3=0X01;//控制反轉(zhuǎn) //0011  
  203.                                         delay();
  204.                                         delay();
  205.                                         P3=0X02;//0110
  206.                                         delay();
  207.                                         delay();
  208.                                         P3=0X04;//1100
  209.                                         delay();
  210.                                         delay();
  211.                                         P3=0X08;//1001
  212.                                         delay();
  213.                                         delay();
  214.                                         break;
  215.                 case UP :        P3=0X08;//控制正轉(zhuǎn)
  216.                                         delay();
  217.                                         delay();
  218.                                         P3=0X04;
  219.                                         delay();
  220.                                         delay();
  221.                                         P3=0X02;
  222.                                         delay();
  223.                                         delay();
  224.                                         P3=0X01;
  225.                                         delay();
  226.                                         delay();
  227.                                         break;
  228.                 case  STOP ://控制停止
  229.                                         P3=0X00;
  230.                                         delay();
  231.                                         delay();                                       
  232.                                         break;
  233.                 }               
  234.                 /*光線控制黃燈開關(guān)*/
  235.                
  236.                 light=Get_ADC0832();                    // 讀取光照強(qiáng)度
  237.                 light=light/2.5;                                // 縮小光照檢測結(jié)果(在0-99)
  238.                 if(light<gLight)                                // 當(dāng)前光線小于設(shè)置的閾值 即晚上
  239.                 {
  240.                         if(LED_YELLOW==1)                        // 如果黃燈是關(guān)閉的
  241.                         {
  242.                                 LED_YELLOW=0;                        // 則打開黃燈
  243.                         }
  244.                 }
  245.                 else                                                    // 當(dāng)前光線大于或等于設(shè)置的閾值 即白天
  246.                 {
  247.                         if(LED_YELLOW==0)                        // 如果黃燈是打開的
  248.                         {
  249.                                 LED_YELLOW=1;                        // 則關(guān)閉黃燈
  250.                         }
  251.                 }       
  252.                 delay(); // 延時(shí)0.1秒       
  253.                             
  254.   }
  255. }
復(fù)制代碼

這個(gè)錯(cuò)誤如何解決啊?求大神幫忙,下面是報(bào)錯(cuò)的仿真圖:
王杰文檔原理圖及程序.rar (125.68 KB, 下載次數(shù): 30)


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

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲iv一区二区三区 | 不卡av电影在线播放 | 91麻豆精品国产91久久久更新资源速度超快 | 国产精品成人av | 国产精品1区2区3区 欧美 中文字幕 | 欧美成人精品一区二区男人看 | 国产精品久久久久久久久久久免费看 | 亚洲性视频网站 | 97伦理最新伦理 | 国产午夜在线观看 | 精品区一区二区 | 久草在线影 | 国产在线区| 激情五月婷婷综合 | 欧美在线一区二区三区 | av中文在线播放 | 亚洲一区二区三区四区五区午夜 | 欧美日韩第一页 | 亚洲一区二区三区视频在线 | 成人av免费播放 | 亚洲h视频 | 自拍中文字幕 | 日韩在线观看中文字幕 | 日韩精品不卡 | 亚洲一区二区三区在线播放 | 日韩精品一区二区三区视频播放 | www.99re| 91视频在线观看免费 | 久久精品日产第一区二区三区 | 日韩一区二区在线免费观看 | av在线电影网站 | 在线免费小视频 | 国产亚洲精品久久久优势 | 先锋资源吧 | 国产成人精品一区二区 | 欧美精品一区三区 | 亚洲精品丝袜日韩 | 日本电影韩国电影免费观看 | 亚洲精品日日夜夜 | 精品日本中文字幕 | 亚洲一区二区视频 |