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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于51單片機的智能花卉培養(yǎng)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:349340 發(fā)表于 2018-6-11 11:35 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#include <reg52.h>          //調(diào)用單片機頭文件
#define uchar unsigned char  //無符號字符型 宏定義 變量范圍0~255
#define uint  unsigned int  //無符號整型 宏定義 變量范圍0~65535
#include <intrins.h>
            //數(shù)碼管段選定義 0     1    2    3    4    5 6  7   8    9
uchar code smg_du[]={0x14,0x77,0x4c,0x45,0x27,0x85,0x84,0x57,0x04,0x05,
//        A B  C   D    E   F 不顯示
         0x06,0xa4,0x9c,0x64,0x8c,0x8e,0xff};  //斷碼
//數(shù)碼管位選定義
sbit smg_we1 = P2^0;     //數(shù)碼管位選定義
sbit smg_we2 = P2^2;
sbit smg_we3 = P2^4;
sbit smg_we4 = P2^6;
uchar dis_smg[8] = {0x14,0x77,0x4c,0x45,0x27,0x85,0x84};
sbit SCL=P1^2;  //SCL定義為P1口的第3位腳,連接ADC0832SCL腳
sbit DO=P1^3;  //DO定義為P1口的第4位腳,連接ADC0832DO腳
sbit CS=P1^0;  //CS定義為P1口的第4位腳,連接ADC0832CS腳
uchar shidu;     //濕度等級
uchar s_high = 70,s_low = 25; //濕度報警參數(shù)
sbit dianji = P3^5;     //電機IO定義
/***********************1ms延時函數(shù)*****************************/
void delay_1ms(uint q)
{
uint i,j;
for(i=0;i<q;i++)
  for(j=0;j<120;j++);
}

/***********************數(shù)碼位選函數(shù)*****************************/
void smg_we_switch(uchar i)
{
switch(i)
{
  case 0: smg_we1 = 0;  smg_we2 = 1; smg_we3 = 1;  smg_we4 = 1; break;
  case 1: smg_we1 = 1;  smg_we2 = 0; smg_we3 = 1;  smg_we4 = 1; break;
  case 2: smg_we1 = 1;  smg_we2 = 1; smg_we3 = 0;  smg_we4 = 1; break;
  case 3: smg_we1 = 1;  smg_we2 = 1; smg_we3 = 1;  smg_we4 = 0; break;
}
}
uchar flag_200ms ;
uchar key_can;   //按鍵值的變量
uchar menu_1;        //菜單設(shè)計的變量
/***********************數(shù)碼顯示函數(shù)*****************************/
void display()
{
static uchar i;   
i++;
if(i >= 4)
  i = 0;
P0 = 0xff;    //消隱
smg_we_switch(i);   //位選
P0 = dis_smg[i];   //段選         
// delay_1ms(1);
}
/***********讀數(shù)模轉(zhuǎn)換數(shù)據(jù)********************************************************/
//請先了解ADC0832模數(shù)轉(zhuǎn)換的串行協(xié)議,再來讀本函數(shù),主要是對應(yīng)時序圖來理解,本函數(shù)是模擬0832的串行協(xié)議進行的
      //  1  1  0 通道
      //  1  1  1 通道
unsigned char ad0832read(bit SGL,bit ODD)
{
unsigned char i=0,value=0,value1=0;  
  SCL=0;
  DO=1;
  CS=0;  //開始
  SCL=1;  //第一個上升沿
  SCL=0;
  DO=SGL;
  SCL=1;   //第二個上升沿
  SCL=0;
  DO=ODD;
  SCL=1;    //第三個上升沿
  SCL=0;    //第三個下降沿
  DO=1;
  for(i=0;i<8;i++)
  {
   SCL=1;
   SCL=0; //開始從第四個下降沿接收數(shù)據(jù)
   value=value<<1;
   if(DO)
    value++;      
  }
  for(i=0;i<8;i++)
  {   //接收校驗數(shù)據(jù)
   value1>>=1;
   if(DO)
    value1+=0x80;
   SCL=1;
   SCL=0;
  }
  SCL=1;
  DO=1;
  CS=1;
  if(value==value1)    //與校驗數(shù)據(jù)比較,正確就返回數(shù)據(jù),否則返回0
   return value;
return 0;
}

/********************獨立按鍵程序*****************/
uchar key_can;  //按鍵值
void key()  //獨立按鍵程序
{
static uchar key_new;
key_can = 20;                   //按鍵值還原
P1 |= 0xf0;
if((P1 & 0xf0) != 0xf0)  //按鍵按下
{
  delay_1ms(1);       //按鍵消抖動
  if(((P1 & 0xf0) != 0xf0) && (key_new == 1))
  {      //確認(rèn)是按鍵按下
   key_new = 0;
   switch(P1 & 0xf0)
   {
    case 0x70: key_can = 1; break;    //得到k2鍵值
    case 0xb0: key_can = 2; break;    //得到k3鍵值
    case 0xd0: key_can = 3; break;    //得到k4鍵值
   }   
  }   
}
else
  key_new = 1;
}
/****************按鍵處理顯示函數(shù)***************/
void key_with()
{
if(menu_1 == 0)
{
  if(key_can == 3)   //手動打開電機
   dianji = 0;     //打開電機
  if(key_can == 2)
   dianji = 1;     //關(guān)閉電機
  }
if(key_can == 1)  //設(shè)置鍵
{
  menu_1 ++;
  if(menu_1 >= 3)
  {
   menu_1 = 0;
  }
}
if(menu_1 == 1)   //設(shè)置濕度上限
{
  if(key_can == 2)
  {
   s_high ++ ;  //濕度上限值加1
   if(s_high > 99)
    s_high = 99;
  }
  if(key_can == 3)
  {
   s_high -- ;  //濕度上限值減1
   if(s_high <= s_low)
    s_high = s_low + 1 ;
  }
  dis_smg[0] = smg_du[s_high % 10];            //取個位顯示
  dis_smg[1] = smg_du[s_high / 10 % 10];  //取十位顯示
  dis_smg[2] = 0xef;   
  dis_smg[3] = 0x26;  //H  0010 0110
}
if(menu_1 == 2)   //設(shè)置濕度下限
{
  if(key_can == 2)
  {
   s_low ++ ;   //濕度下限值加1
   if(s_low >= s_high)
    s_low = s_high - 1;
  }
  if(key_can == 3)
  {
   s_low --;   //濕度下限值減1
   if(s_low <= 1)
    s_low = 1;
  }
  dis_smg[0] = smg_du[s_low % 10];            //取個位顯示
  dis_smg[1] = smg_du[s_low / 10 % 10];  //取十位顯示
  dis_smg[2] = 0xef;   
  dis_smg[3] = 0xBC;  //L
}
}  
/****************電機控制函數(shù)***************/
void dianji_kongzi()
{
static uchar value,value1;
if(shidu <= s_low)
{
  value ++;
  if(value >= 2)
  {
   value = 10;
   dianji = 0;       //關(guān)機電機
  }
}
else
   value = 0;
if(shidu >= s_high)
{
  value1 ++;
  if(value1 >= 2)
  {
   value1 = 10;
   dianji = 1;       //打開電機
  }
}else
  value1 = 0;
}
/***************主函數(shù)*****************/
void main()
{
delay_1ms(100);
P0 = P1 = P2 = P3 = 0xff;   //初始化IO口
while(1)
{
  key();     //獨立按鍵程序
  if(key_can < 10)
  {
   key_with();   //按鍵按下要執(zhí)行的程序
  }
  flag_200ms ++;
  if(flag_200ms >= 200)
  {  
   flag_200ms = 0;   
   P0 = 0xff;    //消隱
   if(menu_1 == 0)
   {        
    shidu = ad0832read(1,0); //讀出濕度
    shidu =100-shidu * 99 / 255;
    dis_smg[0] = 0xff;  //
    dis_smg[1] = smg_du[shidu % 10]; //取濕度的個位顯示
    dis_smg[2] = smg_du[shidu / 10 % 10] ;    //取濕度的十位顯示
    dis_smg[3] = 0XFF; //
    dianji_kongzi();  //電機控制函數(shù)
   }
   
  }
  display();   //數(shù)碼管顯示函數(shù)
  delay_1ms(1);
}


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

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 精品久久久久久久 | 精品一区二区三区中文字幕 | 色欧美片视频在线观看 | 日韩一区精品 | 亚洲视频二区 | 一区二区三区福利视频 | 免费在线成人 | 久久成人人人人精品欧 | 国产精品区二区三区日本 | 国产精品视频一二三 | 日韩成人精品在线 | 亚洲综合视频一区 | 91久久精品一区二区二区 | 亚洲a视频 | 99精品欧美一区二区蜜桃免费 | 免费黄色录像片 | 精品福利一区二区三区 | 国产日韩欧美激情 | av大全在线| 欧美网站一区二区 | 亚洲综合色视频在线观看 | 日韩中文电影 | 欧美激情精品久久久久久变态 | 天天操网 | 蜜桃视频一区二区三区 | 福利在线观看 | 一区二区三区欧美 | 日韩毛片在线观看 | 国产成人免费视频网站高清观看视频 | 99国产精品99久久久久久粉嫩 | 福利视频三区 | 99精品一区二区三区 | 国产在线一区二区三区 | 一区二区三区视频在线观看 | 蜜桃视频在线观看免费视频网站www | 欧美成人a| 97伦理最新伦理 | 日韩综合一区 | 国产.com| 久草资源| 亚洲国产成人av好男人在线观看 |