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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1896|回復: 1
收起左側

關于單片機溫度傳感器程序的一些問題,如何觸發按鍵儲存溫度上下限

[復制鏈接]
ID:615910 發表于 2019-9-28 18:07 | 顯示全部樓層 |閱讀模式
現在可以把數碼管檢測示數但不懂如何觸發報警和按鍵儲存溫度上下限,多天無解,還望解惑。
#include<reg52.h>
#include<intrins.h>
typedef  unsigned char uchar;
typedef  unsigned int uint;
#define MAIN_Fosc 11059200UL
sbit DS = P3^7;
sbit we1=P2^0;
sbit we2=P2^1;
sbit we3=P2^2;
sbit we4=P2^3;
sbit deep=P3^6;
sbit key=P3^5;
sbit key2=P3^4;
sbit key3=P3^3;
sbit key4=P3^2;
uchar temp;
uchar num;
uchar settemp=35;
uchar settemp2=10;
bit DS18B20;
uchar msec, sec;
unsigned char code leddata[]={

                0xC0,  //"0"
                0xF9,  //"1"
                0xA4,  //"2"
                0xB0,  //"3"
                0x99,  //"4"
                0x92,  //"5"
                0x82,  //"6"
                0xF8,  //"7"
                0x80,  //"8"
                0x90,  //"9"
                0x88,  //"A"
                0x83,  //"B"
                0xC6,  //"C"
                0xA1,  //"D"
                0x86,  //"E"
                0x8E,  //"F"
                0x89,  //"H"
                0xC7,  //"L"
                0xC8,  //"n"
                0xC1,  //"u"
                0x8C,  //"P"
                0xA3,  //"o"
                0xBF,  //"-"
                0xFF,  //???
                0xFF  //?????

                         };

void delay (uint z)
{
  uint x,y;
  for(x=z;x>0;x--)
  for(y=84;y>0;y--);
}
  void us(uchar us)//us???????
{
while(us--);
}
void display( uint value)
{
  we1=1;  
  we1=0;
   P0=0xff;
  P0=leddata[value/1000];
delay(1);
  we1=1;


  
  we2=0;
  P0&=0x7f;
  P0=leddata[value%1000/100];  
  delay(1);
  we2=1;
   we3=0;
  P0=0xff;
  P0=leddata[value%100/10];
  delay(1);
  we3=1;
  
  P0=0xff;
  P0=leddata[value%10];
  we4=0;
  delay(1);
  we4=1;
  
}
void display3( uint value)
{

  we1=1;  
  we1=0;
   P0=0xff;
  P0=leddata[value/1000];
delay(1);
  we1=1;


  
  we2=0;
  P0&=0x7f;
  P0=leddata[value%1000/100];  
  delay(1);
  we2=1;
   we3=0;
  P0=0xff;
  P0=leddata[value%100/10];
  delay(1);
  we3=1;
  
  P0=0xff;
  P0=leddata[value%10];
  we4=0;
  delay(1);
  we4=1;
  
}
void beep1()
{
temp=0xfe;
P1=temp;
delay(100);
while(1)
{
  temp=_crol_(temp,1);
  P1=temp;
  deep=~deep;
  delay(100);
}
}
void display2()
{

if(key == 0)
{
     delay(5);
if(key == 0)
{
   while(!key);
   settemp++;
   delay(50);
   if(settemp==99)
   settemp=0;
   delay(50);  
}
}
if(key2 == 0)
{     
     delay(5);
if(key2 == 0)
{
   while(!key2);
   if(settemp!=0)
   settemp--;
   delay(50);
}
}
if(key3 == 0)
{     
     delay(5);
if(key3 == 0)
{
   while(!key3);
   settemp2++;
   delay(50);
   if(settemp2==99)
   settemp2=0;
   delay(50);
   }
}
if(key4 == 0)
{     
     delay(5);
if(key4 == 0)
{
   while(!key4);
   if(settemp2!=0)
   settemp2--;
   delay(50);
}
}
   
}

void duan ()
{

  EA=1;
  ET0=1;
  TR0=1;
  TMOD=0x01;
  TH0=0x4b;
  TL0=0xfd;

}
void  timer0() interrupt 1
{
  TH0=0x4b;
  TL0=0xfd;
  msec++;
  if(msec==20)
  {
   msec=0;
  }
}  

//?????????????
bit init()
{
   bit i;                        
DS = 1;//??????
_nop_();
DS = 0;
us(75); //????????75*6.5+11.95=499.45us ????????????18B20???????????
DS=1;
us(4);//???
i = DS;
us(20); //141.95us ???????
DS = 1;
_nop_();
return (i);
}
void write (uchar dat)//д ???
{
uchar i;
for(i=0;i<8;i++)
{
  DS = 0;
  _nop_();//????д???
  DS = dat & 0x01;//?????????
  us(10);//76.95us
  DS = 1; //???????????????????д??
  _nop_();
  dat >>= 1;//??????
}
}
uchar read_byte()
{
uchar i, j, dat;
for(i=0;i<8;i++)
{
  DS = 0;
  _nop_();//?????????
  DS = 1;
  _nop_();//???????
  j = DS;
  us(10);//76.95us
  DS = 1;
  _nop_();
  dat = (j<<7)|(dat>>1);//????
}
return (dat);
}
void main()
{
  uint i;
  uchar L, M;
  init();//?????DS18B20        
  write(0xcc);//???????ROM???
  write(0x4e);//????д????????
  write(0x18);
  write(0x10);
  write(0x7f);
  init();
  write(0xcc);
  write(0x48);
      while(1)
{  
  init();//?????DS18B20        
  write(0xcc);//???????ROM???
  write(0x44);//?????????????
        init();     //?????DS18B20
  write(0xcc);//???????ROM???
  write(0xbe);//???DS18B20??????
  L = read_byte();
  M = read_byte();
  i = M;
  i <<= 8;
  i |= L;     
  i = i * 0.0625 * 100 + 0.05;
      display(i);
   duan();
  if(key==0|key2==0|key3==0|key4==0)
  { if(key==0)
   {
   settemp=settemp*100;   
    while(!key);
    while(1)
{
    display3(settemp);}
     if(key2==0)
   { settemp=settemp*100;   
    while(!key2);
    display3(settemp);}
     if(key3==0)
   { settemp2=settemp2*100;   
    while(!key3);
    display3(settemp2);}
     if(key4==0)
    {settemp2=settemp2*100;   
    while(!key4);
    display3(settemp2);}
          }  
   
   }

原理圖QX-mini51.pdf

154.08 KB, 下載次數: 20

原理圖

回復

使用道具 舉報

ID:278006 發表于 2020-2-23 18:57 | 顯示全部樓層
發個源碼試試!

DS18b20 溫度檢測液晶顯示-溫度可調上下限1602顯示.zip

58.11 KB, 下載次數: 19

回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久av资源网| 精品欧美一区二区精品久久 | 国产精品欧美一区二区三区不卡 | 在线中文字幕亚洲 | 国产中文区二幕区2012 | 午夜精品在线观看 | 国产又色又爽又黄又免费 | 国产精品一区二区三区99 | 久草在线免费资源 | 成人性视频在线 | 91久久精品日日躁夜夜躁欧美 | 伊人超碰在线 | 丁香综合 | 黄色毛片网站在线观看 | 中文字幕91 | 中文字幕一区二区三区在线观看 | 福利av在线 | 久草资源网站 | 最新免费视频 | 亚洲精品欧美一区二区三区 | 日本在线一区二区 | 国产在线一区二区三区 | 久久91av | 日本污视频 | 91.com视频| 亚洲视频在线看 | 午夜视频在线观看一区二区 | 国产精品久久久久久久久免费软件 | h视频亚洲 | 中文字幕一区二区三区乱码图片 | 久久久免费在线观看 | 久久精品一 | www.亚洲精品 | 日韩精品成人 | 精品国产一二三区 | 视频一区二区在线观看 | 精品国产99 | 亚洲www啪成人一区二区麻豆 | 免费成人高清在线视频 | 日韩国产一区二区三区 | 国产激情在线播放 |