欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3529|回復: 5
打印 上一主題 下一主題
收起左側

關于簡單把溫度轉化成電壓,再用數碼管顯示

[復制鏈接]
跳轉到指定樓層
樓主
ID:153715 發表于 2017-6-6 15:07 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#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};        /*數碼管數值*/
uchar temp;  /*溫度*/

/**************延時****************/
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);
}

/***********讀數模轉換數據********************************************************/       

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是在第二個下降沿輸出的,即0-1-0-1-0
                for(i=0;i<8;i++)//這個地方沒有理解,tmp是十進制還是二進制?如果是二進制數,怎么沒有轉化成十進制的過程?
                {
                        tmp<<=1;
                        if(DO)
                                tmp++;                       
                        SCL2=1;
                        _nop_();
                        _nop_();
                        SCL2=0;
                        _nop_();
                        _nop_();
                }
                CS2=1;
        return tmp;
}

/**********主函數************/

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


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

使用道具 舉報

沙發
ID:62223 發表于 2017-6-7 14:40 | 只看該作者
不理解的地方可以忽略,編譯器編譯的時候自動轉換成單片機識別的二進制數據格式并執行的,你只需知道他確實會執行那么多個周期就好了
回復

使用道具 舉報

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

使用道具 舉報

地板
ID:47286 發表于 2017-6-7 22:57 | 只看該作者
無所謂什么進制 是多少就是多少 進制只是顯示方式
回復

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

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