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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于STC8A8單片機智能窗簾源程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:327265 發表于 2020-7-8 14:08 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
LCD1602-光控-按鍵-電機-ds1302-ds18b20-ad采集,后續把原理圖和PCB補上,因為在公司文件工程不在,沒辦法上傳,望能幫到你們

單片機源程序如下:
  1. #include <STC8.h>
  2. #include "INIT.h"


  3. bit flag_200ms ;
  4. sbit beep = P1^0;     //蜂鳴器IO口定義
  5. sbit LED=P1^5;        //燈光模塊
  6. bit flag_relay_en;   
  7. u8 flag_kaig_moshi=0;//開關模式
  8. bit flag_zd_sd;                  //自動 手動 模式

  9. bit flag_lj_en;                 //按鍵連加使能
  10. bit flag_lj_3_en;         //按鍵連3次連加后使能 加的數就越大了
  11. u8 key_time,flag_value;      //用做連加的中間變量
  12. bit key_500ms  ;
  13. u8 menu_shudu = 20;  //用來控制連加的速度
  14. u8 value,i;

  15. u8 k_shi=1,k_fen=2;        //開窗簾時間
  16. u8 g_shi=3,g_fen=4;                        //關窗簾時間

  17. u16 t_high;                  //高溫報警值

  18. sbit DO=P1^3;                //DO定義為P1口的第4位腳,連接ADC0832DO腳
  19. sbit SCL=P1^2;                //SCL定義為P1口的第3位腳,連接ADC0832SCL腳
  20. sbit CS=P1^1;                //CS定義為P1口的第4位腳,連接ADC0832CS腳
  21. u8 guanxian,guanxian_set = 4;     //光線
  22. void write_eepom();


  23. #include "eepom52.h"
  24. #include "key.h"
  25. #include "ds1302.h"
  26. #include "lcd1602.h"
  27. #include "18b20_2lu.h"
  28. #include "bujindianji.h"

  29. sbit key_jia = P3^1;   //加
  30. sbit key_jie = P3^2;   //減


  31. /*************寫單片機內部EEPOM*************/
  32. void write_eepom()
  33. {        
  34.         IapEraseSector(0x0000);               //擦除這個地址的
  35.         IapProgramByte(0x0000,flag_zd_sd);     //自動,手動模式存入
  36.         IapProgramByte(0x0200,k_shi%256);      //開窗時間-小時存入-8位
  37.         IapProgramByte(0x0400,k_fen%256);      //開窗時間-分鐘存入-8位
  38.         IapProgramByte(0x0600,g_shi%256);      //關窗時間-小時存入-8位
  39.         IapProgramByte(0x0800,g_fen%256);      //關窗時間-分鐘存入-8位
  40.         IapProgramByte(0x0A00,t_high%256);     //高溫報警值存入-8位
  41.         IapProgramByte(0x0C00,guanxian_set%256);        //關窗設置存入-8位
  42.         IapProgramByte(0x0E00,bjdj_value%256);          //步進電機的量存入-8位
  43.         IapProgramByte(0x1000,a_a);        
  44. }

  45. /*************讀單片機內部EEPOM*************/
  46. void read_eepom()
  47. {
  48.         flag_zd_sd = IapReadByte(0x0000);        
  49.         k_shi  = IapReadByte(0x0200);        
  50.         k_fen  = IapReadByte(0x0400);        
  51.         g_shi  = IapReadByte(0x0600);        
  52.         g_fen  = IapReadByte(0x0800);        
  53.         t_high  = IapReadByte(0x0A00);        
  54.         guanxian_set  = IapReadByte(0x0C00);        
  55.         bjdj_value  = IapReadByte(0x0E00);        
  56.         a_a = IapReadByte(0x1000);
  57. }        

  58. /*************初始化EEPROM************/
  59. void init_eepom()        //初始化EEPROM
  60. {
  61.         read_eepom();
  62.          if(a_a == 0xff)        
  63.         {
  64.                 flag_zd_sd = 1;     //模式設置
  65.                 a_a = 1;
  66.                 k_shi=8;
  67.                 k_fen=2;                        //開
  68.                 g_shi=3;
  69.                 g_fen=4;                        //關
  70.                 t_high  = 35;        
  71.                 guanxian_set = 4;
  72.                 bjdj_value  = 0;
  73.                 write_eepom();               
  74.         }
  75. }
  76. #include "menu.h"

  77. /***************讀數模轉換數據****************/        
  78. //請先了解ADC0832模數轉換的串行協議,再來讀本函數,主要是對應時序圖來理解,本函數是模擬0832的串行協議進行的
  79.                                                 //  1  0  0 通道
  80.                                                 //  1  1  1 通道
  81. unsigned char ad0832read(bit SGL,bit ODD)
  82. {
  83.         unsigned char i=0,value=0,value1=0;               
  84.                 SCL=0;
  85.                 DO=1;
  86.                 CS=0;                //開始
  87.                 SCL=1;                //第一個上升沿        
  88.                 SCL=0;
  89.                 DO=SGL;
  90.                 SCL=1;          //第二個上升沿
  91.                 SCL=0;
  92.                 DO=ODD;
  93.                 SCL=1;            //第三個上升沿
  94.                 SCL=0;            //第三個下降沿
  95.                 DO=1;
  96.                 for(i=0;i<8;i++)
  97.                 {
  98.                         SCL=1;
  99.                         SCL=0; //開始從第四個下降沿接收數據
  100.                         value<<=1;
  101.                         if(DO)
  102.                                 value++;                                                
  103.                 }
  104.                 for(i=0;i<8;i++)
  105.                 {                        //接收校驗數據
  106.                         value1>>=1;
  107.                         if(DO)
  108.                                 value1+=0x80;
  109.                         SCL=1;
  110.                         SCL=0;
  111.                 }
  112.                 CS=1;
  113.                 SCL=1;        
  114.                 if(value==value1)                //與校驗數據比較,正確就返回數據,否則返回0        
  115.                         return value;
  116.         return 0;
  117. }



  118. /******************1ms 延時函數-晶振24兆*******************/
  119. void delay_1ms(u16 q)   //當q=1時,精確延時1ms
  120. {
  121.         u16 i,j;
  122.         for(i=q;i>0;i--)
  123.                 for(j=1845;j>0;j--);
  124. }

  125. /*************1602顯示ds1302初始化程序***************/
  126. void init_1602_ds1302()
  127. {
  128.         write_sfm2_ds1302(2,4,nian);        
  129.         write_sfm2_ds1302(2,7,yue);        
  130.         write_sfm2_ds1302(2,10,ri);        
  131.         write_sfm2_ds1302(1,4,shi);        
  132.         write_sfm2_ds1302(1,7,fen);        
  133.         write_sfm2_ds1302(1,10,miao);
  134.         write_sfm1(1,14,week);               
  135. }                                                                           


  136. /*************定時器0初始化程序***************/
  137. void init_time0()         
  138. {
  139.         TMOD = Tmod_Data;         
  140.         TH0 = 0X15;
  141.         TL0 = 0XA0;           //30ms
  142.         ET0  = 1;                  //開定時器0中斷
  143.         TR0  = 1;                  //允許定時器0定時
  144.         EA   = 1;                   //開總中斷
  145. }

  146. /*************手動開關窗簾***************/
  147. void shoudong_kaiguan()          //手動開關窗簾
  148. {
  149.         if(flag_zd_sd == 0)          //手動模式
  150.         {
  151.                 if(guanxian <= guanxian_set)
  152.                          LED=0;
  153.                         else
  154.                          LED=1;
  155.                 if(menu_1 == 0)
  156.                 {
  157.                         if(flag_kaig_moshi == 0)
  158.                         {
  159.                                 if(key_can == 2)
  160.                                         flag_z_f = 1;     //手動開窗
  161.                                 if(key_can == 3)
  162.                                         flag_z_f = 2;     //手動關窗
  163.                                 if(flag_lj_en == 0)
  164.                                         flag_z_f = 0;
  165.                         }
  166.                 }
  167.         }
  168.         if(flag_kaig_moshi == 0)
  169.         {
  170.         
  171.                 if(flag_zd_sd == 1)          //自動模式
  172.                 {
  173.                         
  174.                         if(guanxian <= guanxian_set)
  175.                                 flag_z_f = 2;     //手動開窗
  176.                         
  177.                                 
  178.                         else
  179.                                 flag_z_f = 1;     //手動關窗
  180.                 }
  181.         }
  182. }

  183.                                                                                                                         
  184. /*********************智能窗簾處理函數***********************/
  185. void zinengchuanglian_dis()          //智能窗簾處理函數
  186. {
  187.         if((miao == 0) && (fen == k_fen) && (shi == k_shi))          //定時開窗
  188.         {
  189.                 flag_z_f = 2;    //關窗
  190.                 beep=0;                          //鬧鐘到
  191.                 flag_kaig_moshi = 1;
  192.         }
  193.         if((miao == 0) && (fen == g_fen) && (shi == g_shi))          //定時關窗
  194.         {
  195.                 flag_z_f = 1;     //開窗   
  196.                 flag_kaig_moshi = 2;
  197.         }

  198. }


  199. void main()
  200. {        
  201.         init_eepom();                 //初始化EEPROM
  202.         init_1602();                 //lcd1602初始化
  203.         init_1602_dis_csf(); //lcd1602初始化顯示
  204.         init_ds1302_io();         //初始化ds1302Io
  205.         init_time0();                 //初始化定時器
  206.         menu_1_break();             //菜單初始界面
  207.         init_ds1302();                 //ds1302初始化
  208.         temperature1 = read1_temp();  //讀溫度1
  209.         delay_1ms(650);
  210.         while(1)
  211.         {
  212.                 key();                         //按鍵程序
  213.                 if(key_can < 10)
  214.                 {
  215.                         key_with();        
  216.                 }
  217.                 shoudong_kaiguan();          //手動開關窗簾
  218.                 if(flag_200ms == 1)
  219.                 {               
  220.                         flag_200ms = 0;
  221.                         temperature1 = read1_temp();  //讀溫度1        環境溫度
  222.                         if(temperature1 >= 99)
  223.                                 temperature1 = 99;
  224.                         zinengchuanglian_dis();          //智能窗簾處理函數
  225.                         guanxian = ad0832read(1,0) * 9.0 / 255;
  226.                         if((menu_1 == 0))
  227.                         {
  228.                                 read_time();                  //讀時間
  229.                                 init_1602_ds1302();   //顯示時鐘
  230.                                 write_sfm_18b20(2,13,temperature1);        //顯示溫度
  231.                                 write_sfm1(2,0,guanxian);        //顯示溫度
  232.                                           if(guanxian <= guanxian_set)
  233.                          LED=0;
  234.                         else
  235.                          LED=1;
  236.                                 if(temperature1 >= t_high)
  237.                                         beep =        ~beep;   //溫度報警 ,蜂鳴器報警
  238.                                 else
  239.                                         beep = 1;        
  240. ……………………

  241. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有程序51hei提供下載:
源碼-智能窗簾.zip (126.18 KB, 下載次數: 15)

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 伊人网在线看 | 国产在线一区二 | 亚洲午夜精品在线观看 | 久久久久国产一区二区三区 | 午夜爽爽爽男女免费观看影院 | 狠狠狠色丁香婷婷综合久久五月 | 色婷婷久久综合 | 99精品视频在线 | www.日日干 | 欧美日韩精品专区 | av手机在线播放 | 欧美日批| 成人超碰| 中文字幕一区二区三区日韩精品 | 日本黄色大片免费 | 91原创视频在线观看 | 国产精品一区二区在线观看 | 成人欧美一区二区三区在线观看 | 亚洲精品视频导航 | 欧美在线播放一区 | 亚洲www.| 成人精品一区二区三区中文字幕 | 国产高清精品一区二区三区 | 久久亚洲国产 | 欧美专区在线 | www.精品一区 | 亚洲欧洲在线看 | 日韩成人 | 欧洲色综合 | 日本一区二区高清不卡 | 国产精品1| 91精品久久久久久久久 | 欧美日在线 | 免费一区二区三区 | 亚洲一区二区三区视频 | 四色永久 | 999久久久久久久久 国产欧美在线观看 | 91porn成人精品 | 爱草视频 | 精品一区二区三区四区视频 | 精品久久电影 |