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

QQ登錄

只需一步,快速開(kāi)始

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

關(guān)于簡(jiǎn)單把溫度轉(zhuǎn)化成電壓,再用數(shù)碼管顯示

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:153715 發(fā)表于 2017-6-6 15:07 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
/**********LED定義********/
sbit LED_RED = P3^5;   /*紅燈定義*/
sbit LED_GREEN = P3^6; /*綠燈定義*/

/*********74HC139定義******/
sbit LA=P2^0;
sbit LB=P2^1;

/*********ADC0831定義*******/
sbit SCL2=P1^4;               
sbit DO=P1^5;       
sbit CS2=P1^3;       

uchar code Tab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};        /*數(shù)碼管數(shù)值*/
uchar temp;  /*溫度*/

/**************延時(shí)****************/
void delay(uint z)
{
        uint x,y;
        for(x=z;x>0;x--)
                for(y=110;y>0;y--);
}

void Display(uint dat) /*顯示溫度值*/
{
        uchar ge,shi,bai,qian;
        qian = dat/1000%10;
        bai = dat/100%10;
        shi = dat/10%10;
        ge = dat%10;

        LA=0;LB=0;
        P0 = Tab[qian];  
        delay(10);
        LA=1;LB=0;
        P0 = Tab[bai];
        delay(10);
        LA=0;LB=1;
        P0 = Tab[shi];
        delay(10);
        LA=1;LB=1;
        P0 = Tab[ge];
        delay(10);
}

/***********讀數(shù)模轉(zhuǎn)換數(shù)據(jù)********************************************************/       

unsigned char ad0831read(void)
{
        unsigned char i=0,tmp=0;
                DO=1;
                CS2=0;
                _nop_();
                _nop_();
                SCL2=0;
                _nop_();
                _nop_();
                SCL2=1;
                _nop_();
                _nop_();
                SCL2=0;
                _nop_();
                _nop_();
                SCL2=1;
                _nop_();
                _nop_();
                SCL2=0;
                _nop_();
                _nop_();//MSB是在第二個(gè)下降沿輸出的,即0-1-0-1-0
                for(i=0;i<8;i++)//這個(gè)地方?jīng)]有理解,tmp是十進(jìn)制還是二進(jìn)制?如果是二進(jìn)制數(shù),怎么沒(méi)有轉(zhuǎn)化成十進(jìn)制的過(guò)程?
                {
                        tmp<<=1;
                        if(DO)
                                tmp++;                       
                        SCL2=1;
                        _nop_();
                        _nop_();
                        SCL2=0;
                        _nop_();
                        _nop_();
                }
                CS2=1;
        return tmp;
}

/**********主函數(shù)************/

void main()
{
        unsigned long adc;
        while(1)
        {
                adc = ad0831read();                 /*從ADC0831讀取量化后的數(shù)值*/
                adc = adc = adc*19.607843; /*將量化后的數(shù)值轉(zhuǎn)換成實(shí)際電壓*/
                temp = (adc*40)/1000;        /*根據(jù)實(shí)際電壓換算成溫度值*/
                Display(temp);           /*將溫度顯示在LED上*/
                if(temp > 80)           /*當(dāng)溫度高于80度,紅燈亮*/
                {
                        LED_RED = 1;
                        LED_GREEN = 0;
                }
                else                        /*當(dāng)溫度低于80度,綠燈亮,*/
                {
                        LED_RED = 0;
                        LED_GREEN = 1;
                }
                      
        }          
}


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

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:62223 發(fā)表于 2017-6-7 14:40 | 只看該作者
不理解的地方可以忽略,編譯器編譯的時(shí)候自動(dòng)轉(zhuǎn)換成單片機(jī)識(shí)別的二進(jìn)制數(shù)據(jù)格式并執(zhí)行的,你只需知道他確實(shí)會(huì)執(zhí)行那么多個(gè)周期就好了
回復(fù)

使用道具 舉報(bào)

板凳
ID:111634 發(fā)表于 2017-6-7 22:24 | 只看該作者
把溫度轉(zhuǎn)換為電壓的,是電路,而不是程序。!
回復(fù)

使用道具 舉報(bào)

地板
ID:47286 發(fā)表于 2017-6-7 22:57 | 只看該作者
無(wú)所謂什么進(jìn)制 是多少就是多少 進(jìn)制只是顯示方式
回復(fù)

使用道具 舉報(bào)

5#
ID:162242 發(fā)表于 2017-6-8 13:33 | 只看該作者
很好的資料,謝謝
回復(fù)

使用道具 舉報(bào)

6#
ID:209233 發(fā)表于 2017-6-8 15:33 | 只看該作者
三樓正解
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表