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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

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

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:327265 發(fā)表于 2020-7-8 14:08 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
LCD1602-光控-按鍵-電機-ds1302-ds18b20-ad采集,后續(xù)把原理圖和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次連加后使能 加的數(shù)就越大了
  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. /*************寫單片機內(nèi)部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. /*************讀單片機內(nèi)部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. /***************讀數(shù)模轉(zhuǎn)換數(shù)據(jù)****************/        
  78. //請先了解ADC0832模數(shù)轉(zhuǎn)換的串行協(xié)議,再來讀本函數(shù),主要是對應時序圖來理解,本函數(shù)是模擬0832的串行協(xié)議進行的
  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; //開始從第四個下降沿接收數(shù)據(jù)
  100.                         value<<=1;
  101.                         if(DO)
  102.                                 value++;                                                
  103.                 }
  104.                 for(i=0;i<8;i++)
  105.                 {                        //接收校驗數(shù)據(jù)
  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)                //與校驗數(shù)據(jù)比較,正確就返回數(shù)據(jù),否則返回0        
  115.                         return value;
  116.         return 0;
  117. }



  118. /******************1ms 延時函數(shù)-晶振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. /*********************智能窗簾處理函數(shù)***********************/
  185. void zinengchuanglian_dis()          //智能窗簾處理函數(shù)
  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        環(huán)境溫度
  222.                         if(temperature1 >= 99)
  223.                                 temperature1 = 99;
  224.                         zinengchuanglian_dis();          //智能窗簾處理函數(shù)
  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, 下載次數(shù): 15)

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

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美日韩视频网站 | 成人精品在线观看 | 视频一区二区在线观看 | 精品粉嫩超白一线天av | 国产综合在线视频 | 激情欧美日韩一区二区 | 麻豆亚洲 | 久久国产亚洲精品 | 亚洲视频在线免费观看 | 最新国产视频 | 99精品免费久久久久久久久日本 | 天天综合天天 | 久久九精品 | 国产日韩欧美中文 | 国产精品免费一区二区三区四区 | 日韩在线资源 | 国产精品久久网 | 国产免费看 | 久久久久久久久淑女av国产精品 | 欧美精品久久久久 | 欧美一区二区三区在线 | 日本精品裸体写真集在线观看 | 做a视频 | 国产丝袜一区二区三区免费视频 | 老司机成人在线 | 亚洲视频中文字幕 | 日本中文字幕日韩精品免费 | 欧美九九 | 请别相信他免费喜剧电影在线观看 | 国产精品毛片av一区 | 免费在线观看成人 | 中文字幕一区二区三区乱码在线 | 日韩亚洲一区二区 | 一区二区视屏 | 羞羞视频在线观免费观看 | 成人在线| 日日天天 | 欧美天堂在线 | 日韩福利在线观看 | www.亚洲精品 | caoporn国产精品免费公开 |