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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

智能窗簾設計:51單片機+A/D轉換+光敏電阻+LCD1602+步進電機

  [復制鏈接]
跳轉到指定樓層
樓主
這是我做的仿真,如有不足,還請大家指出。謝謝各位。文件中包含protues仿真、程序。



單片機源程序如下:
  1. #include <reg52.h>         

  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. #define yi 0x80       //LCD第一行的初始位置,因為LCD1602字符地址首位D7恒定為1(100000000=80)
  5. #define er 0x80+0x40 //LCD第二行初始位置(因為第二行第一個字符位置地址是0x40)

  6. uchar display_digit[]={0,0,0};
  7. uchar yuzhi[]={0,0,0};
  8. uchar phasecw[4] ={0x08,0x04,0x02,0x01};//正轉 電機導通相序 D-C-B-A
  9. uchar phaseccw[4]={0x01,0x02,0x04,0x08};//反轉 電機導通相序 A-B-C-D

  10. sbit R_D=P2^0;
  11. sbit W_R=P2^1;        
  12. sbit C_S=P2^2;        

  13. sbit Up=P2^3;               
  14. sbit Down=P2^4;               

  15. sbit rw=P2^5;                 //液晶讀寫端
  16. sbit rs=P2^6;                 //液晶指令/數據輸入控制
  17. sbit en=P2^7;                 //液晶使能端

  18. sbit AD_data=P1;        

  19. sbit bianji=P3^4;
  20. sbit jia=P3^7;
  21. sbit jian=P3^6;

  22. uint adval;
  23. uint fazhi=180;
  24. uchar state=1;//1為窗簾打開,0為窗簾關閉
  25. uchar zhuangtai=1;//1為窗簾打開,0為窗簾關閉

  26. void  Time_init()               
  27. {
  28.         EA=1;
  29.         TMOD=0x11;
  30.         TH0=0xf8;        
  31.         TL0=0xcc;
  32.         ET0=1;
  33.         TR0=0;
  34. }

  35. void delay(uint time)         
  36. {
  37.         uint x,y;                        
  38.         for(x=time;x>0;x--)
  39.         for(y=110;y>0;y--);        
  40. }

  41. void qiangdushuzhi()               
  42. {
  43.         C_S=0;                                 
  44.         W_R=0;                 //啟動AD轉換
  45.         delay(1);
  46.         W_R=1;
  47.         C_S=1;
  48.         delay(10);
  49.         P1=0xff;                //讀取AD轉換值前,先把P1口置1               
  50.         C_S=0;
  51.         R_D=0;                         //AD讀使能
  52.         delay(1);                  
  53.         adval=P1;                  //把AD轉換好的值,賦給 adval
  54.         R_D=1;
  55.         C_S=1;                         //置1后,為下次AD轉換做準備
  56.         delay(1);
  57.         
  58.         display_digit[0]=adval/100;
  59.         display_digit[1]=adval%100/10;                   //取得十位數字
  60.         display_digit[2]=adval%10;                   //取得個位數字
  61. }               

  62. void write_1602com(uchar com)
  63. {
  64.         rs=0;                //數據/指令選擇置為指令
  65.         rw=0;                //讀寫選擇置為寫
  66.         P0=com;              //送入數據
  67.         delay(1);
  68.         en=1;                //拉高使能端,為制造有效的下降沿做準備
  69.         delay(1);
  70.         en=0;                //en由高變低,產生下降沿,液晶執行命令
  71. }

  72. void write_1602dat(uchar dat)
  73. {
  74.         rs=1;               //數據/指令選擇置為數據
  75.         rw=0;               //讀寫選擇置為寫
  76.         P0=dat;             //送入數據
  77.         delay(1);
  78.         en=1;               //en置高電平,為制造下降沿做準備
  79.         delay(1);
  80.         en=0;               //en由高變低,產生下降沿,液晶執行命令
  81. }

  82. void write_1602str(uchar *s)  //寫字符串
  83. {
  84.         while(*s)
  85.                 {
  86.                         write_1602dat(*s++);
  87.     }
  88. }

  89. void lcd_init()
  90. {
  91.         write_1602com(0x38);         //設置液晶工作模式,
  92.         write_1602com(0x0c);         //開顯示不顯示光標
  93.         write_1602com(0x06);         //整屏不移動,光標自動右移
  94.         write_1602com(0x01);         //清顯示
  95.   delay(5);
  96.         write_1602com(yi+5);         //固定符號從第一行第1個位置之后開始顯示
  97.         write_1602str("WELCOME");      
  98.         delay(1000);
  99.         write_1602com(0x01);
  100. }

  101. void display( )
  102. {
  103.         yuzhi[0]=fazhi/100;
  104.         yuzhi[1]=fazhi%100/10;
  105.         yuzhi[2]=fazhi%10;
  106.         write_1602com(yi+0);
  107.         write_1602str(" TARGET:");
  108.   if(yuzhi[0]==0)
  109.         {
  110.                 write_1602dat(0x30+yuzhi[1]);
  111.                 delay(5);
  112.                 write_1602dat(0x30+yuzhi[2]);
  113.                 delay(5);
  114.         }
  115.   if(yuzhi[0]!=0)
  116.         {
  117.                 write_1602dat(0x30+yuzhi[0]);
  118.                 delay(5);
  119.                 write_1602dat(0x30+yuzhi[1]);
  120.                 delay(5);
  121.                 write_1602dat(0x30+yuzhi[2]);
  122.                 delay(5);
  123.         }
  124.         write_1602com(er+0);       //er是頭文件寫的值0x80+0x40
  125.         delay(5);
  126.         write_1602str("CURRENT:");   
  127.         delay(5);
  128.         if(display_digit[0]==0)
  129.         {
  130.                 write_1602dat(0x30+display_digit[1]);      //數字+30得到該數字的LCD1602顯示碼
  131.           delay(5);
  132.           write_1602dat(0x30+display_digit[2]);      //數字+30得到該數字的LCD1602顯示碼                        
  133.     delay(5);        
  134.                 write_1602str(" ");      //數字+30得到該數字的LCD1602顯示碼                        
  135.     delay(5);        
  136.         }
  137.         if(display_digit[0]!=0)
  138.         {
  139.                 write_1602dat(0x30+display_digit[0]);
  140.           delay(5);
  141.           write_1602dat(0x30+display_digit[1]);      //數字+30得到該數字的LCD1602顯示碼
  142.           delay(5);
  143.           write_1602dat(0x30+display_digit[2]);      //數字+30得到該數字的LCD1602顯示碼                        
  144.     delay(5);
  145.         }
  146.         if(zhuangtai==1)
  147.         {
  148.                 write_1602com(yi+12);
  149.                 write_1602str("OPEN");
  150.         }
  151.         if(zhuangtai==0)
  152.         {
  153.                 write_1602com(er+11);
  154.                 write_1602str("CLOSE");
  155.         }
  156. }

  157. void zhengzhuan(uchar step)  //上升
  158. {
  159.         uchar i,j,k;
  160.         if(zhuangtai==0)
  161.         {
  162.                 write_1602com(0x01);
  163.                 write_1602com(yi+6);
  164.                 write_1602str("UP");
  165.                 k=20*step;
  166.                 for(j=0;j<k;j++)
  167.                 {
  168.                         for(i=0;i<4;i++)
  169.                         {
  170.                                 P3=phasecw[i];
  171.                                 delay(10);//轉速調節
  172.                         }
  173.                 }
  174.     P3=0xf1;
  175.                 zhuangtai=1;
  176.         }
  177. }
  178.         
  179. void fanzhuan(uchar step)  //下降
  180. {
  181.         uchar i,j,k;
  182.         if(zhuangtai==1)
  183.         {
  184.                 write_1602com(0x01);
  185.                 write_1602com(yi+6);
  186.                 write_1602str("DOWN");
  187.                 k=20*step;
  188.                 for(j=0;j<k;j++)
  189.                 {
  190.                         for(i=0;i<4;i++)
  191.                         {
  192.                                 P3=phaseccw[i];
  193.                                 delay(10);//轉速調節
  194.                         }
  195.                 }
  196.                 P3=0xf8;
  197.                 zhuangtai=0;
  198.         }
  199. }

  200. void move(uchar level)
  201. {
  202.         switch(level)
  203.                 {
  204.                         case 0:switch(state)
  205.                                 {
  206.                                         case 0:break;
  207.                             case 1:fanzhuan(10);break;
  208.                     }
  209.                         state=0;break;
  210.                   case 1:switch(state)
  211.                                 {
  212.                                         case 0:zhengzhuan(10);break;
  213.                             case 1:break;
  214.                     }
  215.                         state=1;break;
  216.                 }
  217. }


  218. void bijiao()
  219. {
  220.         if(adval>=0&&adval<fazhi)
  221.         move(0);
  222.         if(adval>=fazhi&&adval<500)
  223.         move(1);
  224. }

  225. void yunxing()
  226. {
  227.         if(Down==1)
  228.                 {
  229.                         if(Up==1)
  230.                                 {
  231.                                         bijiao();
  232.                     }
  233.                         else if(Up==0)
  234.                     {
  235.                             zhengzhuan(10);
  236.                     }
  237.           }
  238.         else if(Down==0)
  239.                 {
  240.                   fanzhuan(10);
  241.           }
  242. }

  243. void key()
  244. {
  245.         if(bianji==0)
  246.         {
  247.                 write_1602com(yi+0);
  248.                 write_1602str("ORIGINAL:");
  249.                 if(yuzhi[0]==0)
  250.                 {
  251.                         write_1602dat(0x30+yuzhi[1]);
  252.                         delay(5);
  253.                         write_1602dat(0x30+yuzhi[2]);
  254.                         delay(5);
  255.                 }
  256.                 if(yuzhi[0]!=0)
  257.                 {
  258.                         write_1602dat(0x30+yuzhi[0]);
  259.                         delay(5);
  260.                         write_1602dat(0x30+yuzhi[1]);
  261.                         delay(5);
  262.                         write_1602dat(0x30+yuzhi[2]);
  263.                         delay(5);
  264.                 }
  265.                 write_1602str("    ");
  266.                 delay(5);
  267.                 while(1)
  268.                 {
  269.                         yuzhi[0]=fazhi/100;
  270.                         yuzhi[1]=fazhi%100/10;
  271.                         yuzhi[2]=fazhi%10;
  272.                         write_1602com(er+0);
  273.                         write_1602str("SETTING:");
  274.                         if(yuzhi[0]==0)
  275.                         {
  276.                                 write_1602dat(0x30+yuzhi[1]);
  277.                                 delay(5);
  278.                                 write_1602dat(0x30+yuzhi[2]);
  279.                                 delay(5);
  280.                         }
  281.                         if(yuzhi[0]!=0)
  282.                         {
  283.                                 write_1602dat(0x30+yuzhi[0]);
  284.                                 delay(5);
  285.                                 write_1602dat(0x30+yuzhi[1]);
  286.                                 delay(5);
  287.                                 write_1602dat(0x30+yuzhi[2]);
  288.                                 delay(5);
  289.                         }
  290.                         if(jia==0)
  291.                         {
  292.                                 delay(400);
  293.                                 fazhi=fazhi+5;
  294.                         }
  295.                         if(jian==0)
  296.                         {
  297.                                 delay(400);
  298.                                 fazhi=fazhi-5;
  299.                         }
  300.                         if(bianji==1)
  301.                         {
  302.                                 write_1602com(0x01);
  303.         break;
  304.                         }                                
  305.                 }
  306.         }
  307. }

  308. void main()                                
  309. {
  310.         Time_init();
  311.         delay(50);
  312.         lcd_init();      //調用液晶屏初始化子函數
  313.         while(1)               
  314.         {
  315.                 key();
  316.                 qiangdushuzhi();
  317.                 display();
  318.                 yunxing();
  319.         }
  320. }
復制代碼

所有資料51hei提供下載,用Proteus8.8才能打開:
智能窗簾設計.rar (88 KB, 下載次數: 645)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:563758 發表于 2019-6-28 06:15 | 只看該作者
正在學習中
回復

使用道具 舉報

板凳
ID:524014 發表于 2019-6-28 08:45 | 只看該作者
哇這的不錯
回復

使用道具 舉報

地板
ID:579842 發表于 2019-7-17 10:18 來自手機 | 只看該作者
為什么這個實物焊好液晶屏不顯示呢
回復

使用道具 舉報

5#
ID:489394 發表于 2019-10-31 21:46 | 只看該作者
絕對好帖子 感謝分享!!!
回復

使用道具 舉報

6#
ID:245429 發表于 2019-12-2 20:50 | 只看該作者
為什么仿真打不開,是打包缺什么文件嗎?樓主用的是哪一個版本的PROTEUS
回復

使用道具 舉報

7#
ID:564157 發表于 2019-12-17 19:42 | 只看該作者
hahahaha..... 發表于 2019-7-17 10:18
為什么這個實物焊好液晶屏不顯示呢

你調電位器了嗎
回復

使用道具 舉報

8#
ID:668500 發表于 2019-12-19 18:21 來自手機 | 只看該作者
怎么沒有光敏電阻 電路圖里面?
回復

使用道具 舉報

9#
ID:294123 發表于 2020-2-13 14:39 | 只看該作者
793188403 發表于 2019-12-19 18:21
怎么沒有光敏電阻 電路圖里面?

用滑動變阻器代替了
回復

使用道具 舉報

10#
ID:541150 發表于 2020-2-21 19:36 | 只看該作者
這個只能實現光控嗎?
回復

使用道具 舉報

11#
ID:700745 發表于 2020-3-7 13:49 | 只看該作者
拿去試一下,再來
回復

使用道具 舉報

12#
ID:424140 發表于 2020-3-9 13:08 | 只看該作者

實現了嗎?
回復

使用道具 舉報

13#
ID:729259 發表于 2020-4-25 09:02 | 只看該作者
樓主用的那個版本的軟件?我下載的工程文件打不開,提示錯誤
回復

使用道具 舉報

14#
ID:737782 發表于 2020-4-25 16:08 | 只看該作者
我想弄個溫控的
回復

使用道具 舉報

15#
ID:366000 發表于 2020-4-25 21:57 來自手機 | 只看該作者
設計文檔有嗎?謝謝
回復

使用道具 舉報

16#
ID:582255 發表于 2020-4-25 22:50 | 只看該作者
不能手動自動切換吧?
回復

使用道具 舉報

17#
ID:646835 發表于 2020-5-11 09:47 | 只看該作者
仿真圖為什嗎打不開
回復

使用道具 舉報

18#
ID:137747 發表于 2020-5-11 15:08 | 只看該作者
為什么仿真打不開,是打包缺什么文件嗎?樓主用的是哪一個版本的PROTEUS
回復

使用道具 舉報

19#
ID:646835 發表于 2020-5-13 19:02 | 只看該作者
mqq一米八八 發表于 2020-5-11 09:47
仿真圖為什嗎打不開

打不開,
回復

使用道具 舉報

20#
ID:646835 發表于 2020-5-13 19:38 | 只看該作者

用ISISprotel
回復

使用道具 舉報

21#
ID:766755 發表于 2020-6-4 16:59 | 只看該作者
有設計文檔嗎
回復

使用道具 舉報

22#
ID:763338 發表于 2020-6-5 21:52 | 只看該作者
哪一個打開呀 為什么用proteus打開不了
回復

使用道具 舉報

23#
ID:763338 發表于 2020-6-5 22:18 | 只看該作者
cly5940220 發表于 2020-4-25 09:02
樓主用的那個版本的軟件?我下載的工程文件打不開,提示錯誤

我的也打不開
回復

使用道具 舉報

24#
ID:775795 發表于 2020-6-15 09:30 來自手機 | 只看該作者
有沒有說明書
回復

使用道具 舉報

25#
ID:864140 發表于 2020-12-23 10:31 | 只看該作者
能在這基礎上再加一個轉機嗎?感覺都沒有引腳了
回復

使用道具 舉報

26#
ID:857685 發表于 2020-12-28 19:34 | 只看該作者
想問一下大哥們,就是最近小弟做了個類似的小玩意兒,然后仿真畫好了,程序也寫好了,步進電機跟光敏電阻+LCD1602顯示模塊都分別能用,但是不懂如何把它們寫到一起呀,求懂的大哥給小弟指點一二
回復

使用道具 舉報

27#
ID:674878 發表于 2021-1-5 16:30 | 只看該作者
想問一下這個2003驅動管腳在哪里設置的
回復

使用道具 舉報

28#
ID:935542 發表于 2021-6-15 14:42 來自手機 | 只看該作者
有用STC15來做的嗎?
回復

使用道具 舉報

29#
ID:1034298 發表于 2023-2-4 21:35 | 只看該作者
793188403 發表于 2019-12-19 18:21
怎么沒有光敏電阻 電路圖里面?

左下角RV1就是光敏電阻
回復

使用道具 舉報

30#
ID:1062205 發表于 2023-2-5 16:03 | 只看該作者
單調的唯一的 發表于 2019-12-2 20:50
為什么仿真打不開,是打包缺什么文件嗎?樓主用的是哪一個版本的PROTEUS

需要8.11以上,你的版本低了吧
回復

使用道具 舉報

31#
ID:1062205 發表于 2023-2-5 16:04 | 只看該作者
aktuan007 發表于 2020-4-25 22:50
不能手動自動切換吧?

能,只要重新設置按鍵即可
回復

使用道具 舉報

32#
ID:1062205 發表于 2023-2-5 16:05 | 只看該作者
fx158 發表于 2020-2-21 19:36
這個只能實現光控嗎?

不只是光控,還能控制電機
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美精品一区久久 | 成人精品鲁一区一区二区 | 欧美一级黄色片免费观看 | 成人在线观看免费 | 一区二区在线不卡 | 自拍偷拍一区二区三区 | 色资源在线 | 日韩中文在线观看 | 97国产在线观看 | 天堂在线中文字幕 | 免费一级片 | 91福利影院 | 一二区成人影院电影网 | 日韩成人在线观看 | 一级黄色网页 | 国产91久久精品一区二区 | 亚洲一区二区精品 | a级在线| 午夜丁香视频在线观看 | 亚洲成av人片在线观看 | 国产欧美日韩 | 久久久久久久久久久国产 | 91在线视频免费观看 | 欧美精品乱码99久久影院 | 欧美日韩在线看 | 日韩欧美电影在线 | 国产精品视频导航 | 日本免费视频在线观看 | 久久国产日韩欧美 | 麻豆av片 | 99免费精品视频 | 一区二区三区视频在线 | 黄色国产 | 一区二区高清不卡 | 一区二区三区视频播放 | 91精品久久久久久久久 | 国产精品久久久久久久久免费软件 | 国产精品久久久久久久久久免费看 | 欧美一区二区在线播放 | 亚洲国产第一页 | 亚洲一区二区三区四区五区中文 |