找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3943|回復: 3
收起左側

單片機K型熱電偶+MAX1241高溫環(huán)境溫度檢測與報警系統(tǒng)設計

[復制鏈接]
ID:496698 發(fā)表于 2019-3-24 12:41 | 顯示全部樓層 |閱讀模式
這是剛做好的設計 包括源代碼和仿真圖 暫時還沒有文檔

簡單粗暴點吧:
主要實現(xiàn)的功能:

1、AT89C51單片機+LCD1602液晶+K型熱電偶+MAX1241+按鍵+蜂鳴器

2、測量溫度范圍:-52至890攝氏度 主要用于高溫環(huán)境的測量,我們題目是高溫烘烤箱。

3、設置按鍵:共三個按鍵,上下限值選擇按鍵、加1按鍵、減1按鍵。

4、測量溫度大于上限報警溫度蜂鳴器報警提示,測量溫度小于下限報警溫度蜂鳴器報警提示。

5、按鍵設置上下限報警值


仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載):
QQ圖片20190324123201.png

(已經(jīng)親測一切成功毫無問題)


大致程序代碼(不完整 1、源程序.zip (49.33 KB, 下載次數(shù): 103) 2、仿真圖 (1).zip (83.01 KB, 下載次數(shù): 105) ):

#include<reg51.h>
#include<intrins.h> //包含_nop_()函數(shù)定義的頭文件
#include<absacc.h>
#define uchar unsigned char
#define uint  unsigned int
#define LCD1602_DW XBYTE[65023]
#define LCD1602_CW XBYTE[64767]
#define LCD1602_CR XBYTE[65279]
sbit DOUT=P1^5;
sbit SCLK=P1^6;
sbit CS=P1^7;
uint aaaa,aa,cc;//儲存A/D轉換后的值
uchar num;
uint a,b,c;
sbit p10=P1^0;//按鍵端口
sbit p11=P1^1;//按鍵端口
sbit p12=P1^2;//按鍵端口
sbit p30=P3^0;//蜂鳴器接口
uint code table1[]={        





                                                                                };
uint code table2[]={        
                                



        
                                        };
void delay1(uint z)
{
        for(z=0;z<10;z++)
                _nop_();
}
//判忙函數(shù)
void WHILE_BUSY()                                                
{
        while((bit)(LCD1602_CR&128));//讀回DB7的值,為DB7=1時則等待 。
}
void LCD1602_init()
{
          WHILE_BUSY();//判忙,不忙繼續(xù)寫指令
          LCD1602_CW=56;//寫指令,8位接口,雙行顯示,5*7字符
          WHILE_BUSY();//判忙,不忙繼續(xù)寫指令
          LCD1602_CW=1;//清屏
          WHILE_BUSY();//判忙,不忙繼續(xù)寫指令
          LCD1602_CW=6;//地址計數(shù)自動加一
           WHILE_BUSY();//判忙,不忙繼續(xù)寫指令
          LCD1602_CW=12;//開顯示
}
uint read_max1241()
{
        uint voltage=0;                 //存放12位數(shù)字量
        uchar cont12=12;             //12位
        CS=1;
        SCLK=0;
        CS=0;
        while(DOUT==0);       //轉換結束
        SCLK=1;
        SCLK=0;
        while(cont12--)
        {
                SCLK=1;              //SCLK上升沿數(shù)據(jù)穩(wěn)定并讀出
                voltage<<=1;   
                if(DOUT==1)
                        voltage+=1;
                SCLK=0;
        }         
        CS=1;
        return voltage;
}
//按鍵掃描子函數(shù)
void key()
{
        if(p10==0)//判斷p10按鍵是否按下
        {
                delay1(10);//延時消抖
                while(p10==0);//按鍵松手檢測
                num++;
                if(num==1)
                {
                        WHILE_BUSY();
                        delay1(1);
                        LCD1602_CW=(132);
                        WHILE_BUSY();
                        delay1(1);
                        LCD1602_CW=(15);        
                }
                if(num==2)
                {
                        WHILE_BUSY();
                        delay1(1);
                        LCD1602_CW=(141);        
                }
                if(num==3)
                {
                        num=0;
                        WHILE_BUSY();
                        delay1(1);
                        LCD1602_CW=(12);
                }
        }
        if(num!=0)
        {
                if(p11==0)//判斷p11按鍵是否按下
                {
                        delay1(10);//延時消抖
                        while(p11==0);//按鍵松手檢測
                        if(num==1)
                        {
                                a++;
                                if(a>=909)
                                        a=b+5;
                                WHILE_BUSY();
                                delay1(1);
                                LCD1602_CW=(130);
                                WHILE_BUSY();
                                delay1(1);
                                LCD1602_DW=(a/100+'0');
                                WHILE_BUSY();
                                delay1(1);
                                LCD1602_CW=(132);
                                WHILE_BUSY();
                                delay1(1);
                                LCD1602_DW=(a%10+'0');
                                WHILE_BUSY();
                                delay1(1);
                                LCD1602_CW=(131);
                                WHILE_BUSY();
                                delay1(1);
                                LCD1602_DW=(a%100/10+'0');
                        }
                        if(num==2)
                        {
                                if((b+1)<a)
                                        b++;
                                WHILE_BUSY();
                                delay1(1);
                                LCD1602_CW=(139);
                                WHILE_BUSY();
                                delay1(1);
                                LCD1602_DW=(b/100+'0');
                                WHILE_BUSY();
                                delay1(1);
                                LCD1602_CW=(141);
                                WHILE_BUSY();
                                delay1(1);
                                LCD1602_DW=(b%10+'0');
                                WHILE_BUSY();
                                delay1(1);
                                LCD1602_CW=(140);
                                WHILE_BUSY();
                                delay1(1);
                                LCD1602_DW=(b%100/10+'0');
                        }
                }
                if(p12==0)//判斷p12按鍵是否按下
                {
                        delay1(10);//延時消抖
                        while(p12==0);//按鍵松手檢測
                        if(num==1)
                        {
                                if(a>b+1)
                                        a--;
                                if(a==255)
                                        a=908;
                                WHILE_BUSY();
                                delay1(1);
                                LCD1602_CW=(130);
                                WHILE_BUSY();
                                delay1(1);
                                LCD1602_DW=(a/100+'0');
                                WHILE_BUSY();
                                delay1(1);
                                LCD1602_CW=(132);
                                WHILE_BUSY();
                                delay1(1);
                                LCD1602_DW=(a%10+'0');
                                WHILE_BUSY();
                                delay1(1);
                                LCD1602_CW=(131);
                                WHILE_BUSY();
                                delay1(1);
                                LCD1602_DW=(a%100/10+'0');
                        }
                        if(num==2)
                        {
                                b--;
                                if(b==255)
                                        b=a-5;
                                WHILE_BUSY();
                                delay1(1);
                                LCD1602_CW=(139);
                                WHILE_BUSY();
                                delay1(1);
                                LCD1602_DW=(b/100+'0');
                                WHILE_BUSY();
                                delay1(1);
                                LCD1602_CW=(141);
                                WHILE_BUSY();
                                delay1(1);
                                LCD1602_DW=(b%10+'0');
                                WHILE_BUSY();
                                delay1(1);
                                LCD1602_CW=(140);
                                WHILE_BUSY();
                                delay1(1);
                                LCD1602_DW=(b%100/10+'0');
                        }
                }
        }        
}
//主函數(shù)
void main()
{
        LCD1602_init(); //將液晶初始化
        TMOD=51;//定時器0和定時器1都是用于定時,工作方式3(8位計數(shù)器)
        TCON=16;//啟動定時器0
        IE=130;//開總中斷和定時器0中斷
        TL0=56;//定時200微秒
        a=300;
        b=10;
        while(1)
        {
                key();
                if(num==0)
                {
                        WHILE_BUSY();
                        delay1(1);
                        LCD1602_CW=(128);
                        WHILE_BUSY();
                        delay1(1);
                        LCD1602_DW=('H');
                        WHILE_BUSY();
                        delay1(1);
                        LCD1602_DW=('=');
                        WHILE_BUSY();
                        delay1(1);
                        LCD1602_DW=(a/100+'0');
                        WHILE_BUSY();
                        delay1(1);
                        LCD1602_DW=(a%100/10+'0');
                        WHILE_BUSY();
                        delay1(1);
                        LCD1602_DW=(a%10+'0');
                        WHILE_BUSY();
                        delay1(1);
                        LCD1602_DW=(223);
                        WHILE_BUSY();
                        delay1(1);
                        LCD1602_DW=(67);
                        WHILE_BUSY();
                        delay1(1);
                        LCD1602_DW=(' ');
                        WHILE_BUSY();
                        delay1(1);
                        LCD1602_DW=(' ');
                        WHILE_BUSY();
                        delay1(1);
                        LCD1602_DW=('L');
                        WHILE_BUSY();
                        delay1(1);
                        LCD1602_DW=('=');
                        WHILE_BUSY();
                        delay1(1);
                        LCD1602_DW=(b/100+'0');
                        WHILE_BUSY();
                        delay1(1);
                        LCD1602_DW=(b%100/10+'0');
                        WHILE_BUSY();
                        delay1(1);
                        LCD1602_DW=(b%10+'0');
                        WHILE_BUSY();
                        delay1(1);
                        LCD1602_DW=(223);
                        WHILE_BUSY();
                        delay1(1);
                        LCD1602_DW=(67);
                        
                        for(cc=0;cc<962;cc++)
                        {
                                if((aaaa>=table1[cc])&&(aaaa<table1[cc+1]))
                                {
                                        c=table2[cc];
                                        WHILE_BUSY();
                                        delay1(1);
                                        LCD1602_CW=196;
                                        WHILE_BUSY();
                                        delay1(1);
                                        LCD1602_DW='T';
                                        WHILE_BUSY();
                                        delay1(1);
                                        LCD1602_DW='=';
                                        if(aaaa<159)
                                        {
                                                WHILE_BUSY();
                                                delay1(1);
                                                LCD1602_DW='-';
                                                p30=0;
                                        }
                                        else
                                        {
                                                if((c>a)&&(c>b))
                                                {
                                                        p30=0;
                                                }
                                                if((c<a)&&(c<b))
                                                {
                                                        p30=0;
                                                }
                                                if((c<=a)&&(c>=b))
                                                {
                                                        p30=1;
                                                }
                                                WHILE_BUSY();
                                                delay1(1);
                                                LCD1602_DW='+';        
                                        }
                                        WHILE_BUSY();
                                        delay1(1);
                                        LCD1602_DW=(table2[cc]/100+48);
                                        WHILE_BUSY();
                                        delay1(1);
                                        LCD1602_DW=(table2[cc]%100/10+48);
                                        WHILE_BUSY();
                                        delay1(1);
                                        LCD1602_DW=(table2[cc]%10+48);        
                                        WHILE_BUSY();
                                        delay1(1);
                                        LCD1602_DW=(223);
                                        WHILE_BUSY();
                                        delay1(1);
                                        LCD1602_DW=(67);
                                }
                        }
                }        
        }
}
//定時器0中斷子函數(shù)
void t0() interrupt 1
{
        TL0=56;//定時200微秒
        aa++;//每200微秒aa值加1
        if(aa==10000)//1秒時間定時時間到
        {
                aa=0;//aa值清0
                aaaa=read_max1241(); //進行A/D轉換
        }               
}               


評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:671252 發(fā)表于 2019-12-23 14:27 | 顯示全部樓層
仿真圖下載后怎么打開?
回復

使用道具 舉報

ID:661845 發(fā)表于 2020-1-7 18:41 | 顯示全部樓層
現(xiàn)在有word了嗎
回復

使用道具 舉報

ID:560072 發(fā)表于 2020-3-7 19:21 | 顯示全部樓層
請問仿真圖中的51單片機的P3.6/WR和P3.7/RD是和什么相連接呀
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表