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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 5545|回復(fù): 0
收起左側(cè)

基于AT89C51單片機(jī)的數(shù)字溫度計(jì)

[復(fù)制鏈接]
ID:346585 發(fā)表于 2018-6-6 23:43 | 顯示全部樓層 |閱讀模式

  
元件名稱
  
  
型號(hào)
  
  
數(shù)量
  
  
單片機(jī)芯片
  
  
AT89C51
  
  
1
  
  
溫度傳感器
  
  
DS18B20
  
  
1
  
  
晶振
  
  
12MHz
  
  
1
  
  
電源
  
  
5V
  
  
1
  
  
液晶屏
  
  
lcd1602
  
  
1
  
  
電容
  
  
30pF
  
  
2
  
  
10uF(極性)
  
  
1
  
  
排阻
  
  
1K
  
  
1
  
  
萬能板
  
  
——
  
  
1
  
  
開關(guān)
  
  
——
  
  
3
  
  
導(dǎo)線
  
  
——
  
  
若干
  
  
電阻
  
  
1K
  
  
4
  
  
發(fā)光二極管
  
  
綠色
  
  
2
  
  
蜂鳴器
  
  
——
  
  
1
  
全部程序清單
程序代碼:
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define delayNOP(){_nop_();_nop_();_nop_();_nop_();}
sbit HI_LED = P2^3;
sbit LO_LED = P2^6;
sbit DQ = P3^3;
sbit BEEP = P3^7;
sbit LCD_RS = P2^0;
sbit LCD_RW = P2^1;
sbit LCD_EN = P2^2;
sbit K1 = P1^7;
sbit K2 = P1^4;
sbit K3 = P1^1;
uchar code RomCodeStr[]={"--ROMCODE--"};
ucharRomCode[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
uchar code Temp_Disp_Title[]   ={"Current Temp : "};
ucharCurrent_Temp_Display_Buffer[]={"TEMP:  "};
uchar codeTemperature_Char[8]={0x0c,0x12,0x12,0x0c,0x00,0x00,0x00,0x00};
uchar code Alarm_Temp[]={"ALARM TEMP HiLo"};
uchar Alarm_HI_LO_STR[]={"Hi:     Lo:    "};
uchar temp_data[2]={0x00,0x00};
uchar temp_alarm[2]={0x00,0x00};
uchar display[5]={0x00,0x00,0x00,0x00,0x00};
uchar display1[3]={0x00,0x00,0x00};
uchar codedf_Table[]={0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9};
char Alarm_Temp_HL[2]={70,-20};
uchar CurrentT=0;
uchar Temp_Value[]={0x00,0x00};
uchar Display_Digit[]={0,0,0,0};
bit HI_Alarm=0,LO_Alarm=0;
bit DS18B20_IS_OK=1;
uint Time0_Count=0;
void DelayXus(int x)
{
  uchari;
while(x--) for(i=0;i<200;i++);
}
bit LCD_Busy_Check()
{
  bitresult;
LCD_RS=0;LCD_RW=1;LCD_EN=1;delayNOP();
result=(bit)(P0 & 0x80);
LCD_EN=0;
  returnresult;
}
void Write_LCD_Command(uchar cmd)
{
while(LCD_Busy_Check());
LCD_RS=0;LCD_RW=0;LCD_EN=0;_nop_();_nop_();
P0=cmd; delayNOP();
LCD_EN=1;delayNOP();LCD_EN=0;
}
void Write_LCD_Data(uchar dat)
{
while(LCD_Busy_Check());
LCD_RS=1;LCD_RW=0;LCD_EN=0;
  P0=dat;delayNOP();
LCD_EN=1;delayNOP();LCD_EN=0;
}
void LCD_Initialise()
{
Write_LCD_Command(0x01); DelayXus(5);
Write_LCD_Command(0x38); DelayXus(5);
Write_LCD_Command(0x0c); DelayXus(5);
Write_LCD_Command(0x06); DelayXus(5);
}
void Set_LCD_POS(uchar pos)
{
Write_LCD_Command(pos | 0x80);
}
//自定義字符寫CGRAM
void Write_NEW_LCD_Char()
{
   uchar i;
   Write_LCD_Command(0x40);
   for(i=0;i<8;i++)
   Write_LCD_Data(Temperature_Char);
}
//延時(shí)
void Delay(uint num)
{
   while(--num);
}
//LCD上顯示當(dāng)前的溫度
void Display_Temperature()
{
   uchar i;
   uchar t=150;
   uchar ng=0;
    charSigned_Current_Temp;
   if((Temp_Value[1]&0xF8)==0xF8)
    {
     Temp_Value[1]=~Temp_Value[1];
     Temp_Value[0]=~Temp_Value[0]+1;
     if(Temp_Value[0]==0x00)   Temp_Value[1]++;
     ng=1;
    }
   Display_Digit[0]=df_Table[Temp_Value[0] & 0x0F];
   CurrentT=((Temp_Value[0] & 0xF0)>>4)|((Temp_Value[1] &0x07)<<4);
   Signed_Current_Temp=ng?-CurrentT:CurrentT;
   HI_Alarm=Signed_Current_Temp>=Alarm_Temp_HL[0]?1:0;
   LO_Alarm=Signed_Current_Temp<=Alarm_Temp_HL[1]?1:0;
   Display_Digit[3]=CurrentT/100;
   Display_Digit[2]=CurrentT%100/10;
   Display_Digit[1]=CurrentT%10;
   Current_Temp_Display_Buffer[11]=Display_Digit[0]+'0';
   Current_Temp_Display_Buffer[10]='.';
   Current_Temp_Display_Buffer[9]=Display_Digit[1]+'0';
   Current_Temp_Display_Buffer[8]=Display_Digit[2]+'0';
   Current_Temp_Display_Buffer[7]=Display_Digit[3]+'0';
   if(Display_Digit[3]==0) Current_Temp_Display_Buffer[7]=' ';
    if(Display_Digit[2]==0&& Display_Digit[3]==0)  
   Current_Temp_Display_Buffer[8]=' ';
   if(ng)
    {
      if(Current_Temp_Display_Buffer[8]==' ')
         Current_Temp_Display_Buffer[8]='-' ;
      else
      if(Current_Temp_Display_Buffer[7]==' ')
         Current_Temp_Display_Buffer[7]='-';
      else
         Current_Temp_Display_Buffer[6]='-';
    }
   Set_LCD_POS(0x00);
   for(i=0;i<16;i++) Write_LCD_Data(Temp_Disp_Title);
   Set_LCD_POS(0x40);
   for(i=0;i<16;i++) Write_LCD_Data(Current_Temp_Display_Buffer);
   Set_LCD_POS(0x4D);Write_LCD_Data(0x00);
   Set_LCD_POS(0x4E);Write_LCD_Data('C');
}
//定時(shí)器中斷
void_To_INT() interrupt 1
{
TH0=-1000 / 256;
TL0=-1000 % 256;
BEEP=!BEEP;
  if(++Time0_Count ==400)
  {
   Time0_Count=0;
    if(HI_Alarm) HI_LED=~HI_LED;else HI_LED=0;
    if(HI_Alarm) LO_LED=~LO_LED;else LO_LED=0;
   TR0=0;
  }
}
//rom的轉(zhuǎn)換與顯示
void Display_Rom_Code()
{
uchar  i,t;
Set_LCD_POS(0X40);
for(i=0;i<8;i++)
  {
   t=((RomCode &  0xF0)>> 4);
   if(t>9) t+=0x37; else t+='0';
   Write_LCD_Data(t);
   t=RomCode & 0x0F;
   if(t>9) t+=0x37; else t+='0';
   Write_LCD_Data(t);
  }
}
uchar Init_DS18B20()
{
  ucharstatus;
DQ=1;Delay(8);DQ=0;Delay(90);DQ=1;Delay(8);
status=DQ; Delay(100);
  DQ=1;
  returnstatus;
}
uchar ReadOneByte()
{
  uchari,dat=0;
DQ=1;_nop_();
for(i=0;i<8;i++)
{
   DQ=0;dat>>=1;DQ=1;_nop_();_nop_();
   if(DQ) dat |=0x80;
   Delay(30);
   DQ=1;
}
  returndat;
}
WriteOneByte(uchar dat)
{
  uchari;
for(i=0;i<8;i++)
  {
    DQ=0;DQ=dat & 0x01;Delay(5);DQ=1;dat>>=1;
  }
}
void Read_Temperature()
{
   if(Init_DS18B20()==1 )
       DS18B20_IS_OK=0;
   else
   {
      WriteOneByte(0xCC);
      WriteOneByte(0x44);
      Init_DS18B20();
      WriteOneByte(0xCC);
       WriteOneByte(0xBE);
      Temp_Value[0]=ReadOneByte();
      Temp_Value[1]=ReadOneByte();
      DS18B20_IS_OK=1;
    }
}
//64位序列碼
void Read_Rom_Code()
{
  uchari;
Init_DS18B20();
WriteOneByte(0x33);
for(i=0;i<8;i++) RomCode=ReadOneByte();
}
//顯示romcode
void Display_RomCode()
{
  uchari;
Set_LCD_POS(0X00);
for(i=0;i<16;i++)
Write_LCD_Data(RomCodeStr);
Read_Rom_Code();
Display_Rom_Code();
}
//顯示報(bào)警溫度
void Disp_Alarm_Temperature()
{
  uchari,ng;
  ng=0;
if(Alarm_Temp_HL[0]<0)
   {
    Alarm_Temp_HL[0]=~Alarm_Temp_HL[0]+1;
    ng=1;
   }
Alarm_HI_LO_STR[4]=Alarm_Temp_HL[0] / 100+'0';
Alarm_HI_LO_STR[5]=Alarm_Temp_HL[0] / 10 % 10+'0';
Alarm_HI_LO_STR[6]=Alarm_Temp_HL[0] % 10+'0';
if(Alarm_HI_LO_STR[4] == '0') Alarm_HI_LO_STR[4]=' ';
if(Alarm_HI_LO_STR[4] == ' ' && Alarm_HI_LO_STR[5]=='0')
Alarm_HI_LO_STR[5]=' ';
  if(ng)
  {
   if(Alarm_HI_LO_STR[5] == ' ') Alarm_HI_LO_STR[5]='-';
    else
   if(Alarm_HI_LO_STR[4] == ' ') Alarm_HI_LO_STR[4]='-';
    else
    Alarm_HI_LO_STR[3]='-';
  }
  ng=0;
if(Alarm_Temp_HL[1]<0)
   {
   Alarm_Temp_HL[1]=~Alarm_Temp_HL[1] +1;   ng=1;
   }
Alarm_HI_LO_STR[12]=Alarm_Temp_HL[1] / 100+'0';
Alarm_HI_LO_STR[13]=Alarm_Temp_HL[1] / 10 % 10+'0';
Alarm_HI_LO_STR[14]=Alarm_Temp_HL[1] % 10+'0';
if(Alarm_HI_LO_STR[12] == '0') Alarm_HI_LO_STR[12]=' ';
if(Alarm_HI_LO_STR[12] == ' ' && Alarm_HI_LO_STR[13]=='0')
Alarm_HI_LO_STR[13]=' ';
  if(ng)
   {
   if(Alarm_HI_LO_STR[13] == ' ') Alarm_HI_LO_STR[13]='-';
    else
   if(Alarm_HI_LO_STR[12] == ' ') Alarm_HI_LO_STR[12]='-';
    else
   Alarm_HI_LO_STR[11]='-';
   }
Set_LCD_POS(0X00);
for(i=0;i<16;i++)
Write_LCD_Data(Alarm_Temp);
Set_LCD_POS(0X40);
for(i=0;i<16;i++)
Write_LCD_Data(Alarm_HI_LO_STR);
}
//主函數(shù)
void main()
{
    uchar Current_Operation=1;
    LCD_Initialise();
    IE=0X82;
    TMOD=0X01;
    TH0=-1000 / 256;
    TL0=-1000 % 256;
    TR0=0;
    HI_LED=0;
    LO_LED=0;
     Set_Alarm_Temp_Value();
    Read_Temperature();
    Delay(50000);
    Delay(50000);
    while(1)
     {
      if(K1==0) Current_Operation=1;
      if(K2==0) Current_Operation=2;
      if(K3==0) Current_Operation=3;
      switch (Current_Operation)
       {
        case 1:
              Read_Temperature();
               if(DS18B20_IS_OK)
              {
                 if(HI_Alarm==1 || LO_Alarm ==1) TR0=1;
                 else TR0=0;
                 Display_Temperature();
              }
              DelayXus(100);
              break;
        case 2:
              Read_Temperature();
              Disp_Alarm_Temperature();
              DelayXus(100);
              break;
        case 3:
              Display_RomCode();
              DelayXus(50);
              break;
       }
     }
}


回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日韩综合在线 | 日韩欧美一级片 | 久久久久久久久久久久久9999 | 精品免费视频 | 欧美日韩亚洲视频 | 在线午夜 | 日本a∨视频 | 国产区一区二区三区 | 国产乱码精品一区二区三区五月婷 | 丁香综合| 亚洲国产一区在线 | 亚洲精品久久久一区二区三区 | 中文字幕 国产精品 | 无码日韩精品一区二区免费 | 亚洲麻豆 | 中文字幕在线观看av | 国产久 | 欧美日韩精品影院 | 91精品国产综合久久久久久丝袜 | 中文字幕久久精品 | 精品久久久久国产免费第一页 | 91精品国产乱码久久久 | 日韩欧美手机在线 | 久久精品国产免费 | 中文字幕 国产 | 亚洲不卡一 | 欧美日韩视频 | 日韩av一区二区在线观看 | 欧美日日 | 欧美一区二区在线观看 | 精品亚洲一区二区 | 一区二区三区免费观看 | 欧美综合精品 | 欧美激情亚洲激情 | 亚洲一区二区在线视频 | 久久久久国产精品一区二区 | 欧美性video| 日本污视频 | 精品亚洲永久免费精品 | av在线免费不卡 | 国产精品一二三区 |