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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

新人求助熱敏電阻

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:55990 發(fā)表于 2014-6-3 21:48 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
自己的熱敏電阻  想讓他精確些  以下是程序


#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint  unsigned int
         
#define AddWr 0x90   //寫數(shù)據(jù)地址
#define AddRd 0x91   //讀數(shù)據(jù)地址
#define  NUM  4                     //接收和發(fā)送緩存區(qū)的深度
uchar idata receivebuf[NUM];    //數(shù)據(jù)接收緩沖區(qū)

sbit RST=P2^4;            //時鐘 加上后可以關(guān)掉DS1302芯片輸出
sbit Sda=P2^0;                   // 將p2.0口模擬數(shù)據(jù)口
sbit Scl=P2^1;                   // 將p2.1口模擬時鐘口
sbit rs=P1^0;
sbit rw=P1^1;
sbit e=P2^5;
sbit dula=P2^6;
sbit wela=P2^7;

uint data dis[4] = {0x00,0x00,0x00,0x00};            //定義3個顯示數(shù)據(jù)單元和1個數(shù)據(jù)存儲單元

bit ADFlag;          //定義AD采樣標志位

#define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};

uchar code table3[] = "A:   .  B:   .  ";
uchar code table4[] = "C:   .  D:   .  ";
/*******************延時函數(shù)ms*****************/
void delay(uint x)
{
        uint a,b;//定義了兩個變量
        for(a=x;a>0;a--)//循環(huán)x個1ms就是多少xms
                for(b=110;b>0;b--);//在11.0592MHz的晶振下,循環(huán)110此約為1ms,但不是精確的
}
/****************lcd寫指令****************/
void write_12864com(uchar com)          //寫指令
{
        rw=0;
        rs=0;
        delay(5);
        P0=com;
        e=1;
        delay(10);
        e=0;
        delay(5);       
}

/****************lcd寫數(shù)據(jù)****************/
void write_12864deta(uchar deta)           //寫數(shù)據(jù)
{
        rw=0;
        rs=1;
        delay(5);
        P0=deta;
        e=1;
        delay(10);
        e=0;
        delay(5);       
}
/******************lce初始化****************/
void init12864()
{
        write_12864com(0x30);
        delay(5);
        write_12864com(0x0c);
        delay(5);
        write_12864com(0x01);
        delay(5);
}
/******************lce顯示****************/
void display1()
{
        uchar j;
        write_12864com(0x88);
        delay(10);
        for(j=0;j<16;j++)
        {
                write_12864deta(table3[j]);
                delay(5);

        }
        write_12864com(0x98);
        delay(10);
        for(j=0;j<16;j++)
        {
                write_12864deta(table4[j]);
                delay(5);
       
        }
       
}
/*******************************************************************/
/*                                                                 */
/*  設(shè)定顯示位置                                                   */
/*                                                                 */
/*******************************************************************/

void lcd_pos(uchar pos)
{                          
  write_12864com(pos | 0x98);  //數(shù)據(jù)指針=80+地址變量
}
/******************************************************************/
/*                                                                */
/* 數(shù)據(jù)處理與顯示                                                 */
/* 將采集到的數(shù)據(jù)進行16進制轉(zhuǎn)換為ASCLL碼。                        */
/*                                                                */
/******************************************************************/

show_value(uchar ad_data)

{   
    dis[2]=(-ad_data/45);   //AD值轉(zhuǎn)換為3為BCD碼,最大為5.00V。
    dis[2]=dis[2]+0x30;         //轉(zhuǎn)換為ACSII碼
    dis[3]=(-ad_data%45);   //余數(shù)暫存
    dis[3]=dis[3]*10;    //計算小數(shù)第一位
    dis[1]=dis[3]/46;
    dis[1]=dis[1]+0x30;         //轉(zhuǎn)換為ACSII碼
    dis[3]=dis[3]%46;
    dis[3]=dis[3]*10;    //計算小數(shù)第二位
    dis[0]=dis[3]/46;                                                                             //
    dis[0]=dis[0]+0x30;  //轉(zhuǎn)換為ACSII碼
        return(0);         
}

/******************啟動IIC總線****************/
void Start(void)
{
        Sda=1;
        _nop_();
        Scl=1;
        _nop_();
        Sda=0;
        _nop_();
        Scl=0;
}

/******************停止IIC總線****************/
void Stop(void)
{
        Sda=0;
        _nop_();
        Scl=1;
        _nop_();
        Sda=1;
        _nop_();
        Scl=0;
}

/*****************應(yīng)答IIC總線****************/
void Ack(void)
{
        Sda=0;
        _nop_();
        Scl=1;
        _nop_();
        Scl=0;
        _nop_();
}

/*****************非應(yīng)答IIC總線****************/
void NoAck(void)
{
        Sda=1;
        _nop_();
        Scl=1;
        _nop_();
        Scl=0;
        _nop_();
}
/*****************發(fā)送一個字節(jié)*****************/
void Send(uchar Data)
{
        uchar BitCounter=8;
        uchar temp;       
        do
        {
                temp=Data;
                Scl=0;
                _nop_();
                if((temp&0x80)==0x80)
                Sda=1;
                else
                Sda=0;
                Scl=1;
                temp=Data<<1;
                Data=temp;
                BitCounter--;
        }                                                                          
        while(BitCounter);
        Scl=0;
}
/*****************讀入一個字節(jié)并返回*****************/
uchar Read(void)
{
        uchar temp=0;
        uchar temp1=0;
        uchar BitCounter=8;       
        Sda=1;
        do
        {
                Scl=0;
                _nop_();
                Scl=1;
                _nop_();
                if(Sda) temp=temp|0x01;
                else        temp=temp&0xfe;
                if(BitCounter-1)
                {
                        temp1=temp<<1;
                        temp=temp1;
                }
                BitCounter--;
        }
        while(BitCounter);
        return(temp);
}
/*********讀取AD模數(shù)轉(zhuǎn)換的值,有返回值**************/
uchar ReadADC(uchar Ch1)
{
        uchar Data;
        Start();                                                                //寫入芯片地址
        Send(AddWr);
        Ack();
        Send(0x40|Ch1);                                                        //寫入選擇的通道,本程序只用單端輸入,差分部分需要自行添加
                                                                              //Chl的值分別為0、1、2、3,分別代表1-4通道
        Ack();
        Start();
        Send(AddRd);                                                    //讀入地址
        Ack();
        Data=Read();                                                    //讀數(shù)據(jù)
        Scl=0;
        NoAck();
        Stop();
        return Data;                                                           //返回值
}
void main()
{
          

        init12864();
        display1();

        delay(5);
        RST=0;                                                                         //關(guān)時鐘DS1302

        delay(5);

        TMOD |= 0x10;                             
        TH1=0xff;                             
        TL1=0x00;
        EA=1;                    
        ET1=1;                 
        TR1=1;
        while(1)
        {
                if(ADFlag)                                                 //定時采集輸入模擬量
                {                                          
                        ADFlag=0;
                show_value(ReadADC(0)); //顯示通道0      
            lcd_pos(0x01);            
        write_12864deta(dis[2]);        //整數(shù)位顯示
        lcd_pos(0x02);            
        write_12864deta(dis[1]);        //第一位小數(shù)顯示
        lcd_pos(0x03);            
        write_12864deta(dis[0]);        //第二位小數(shù)顯示

                show_value(ReadADC(3)); //顯示通道3      
            lcd_pos(0x05);            
        write_12864deta(dis[2]);        //整數(shù)位顯示
        lcd_pos(0x06);            
        write_12864deta(dis[1]);        //第一位小數(shù)顯示
        lcd_pos(0x07);            
        write_12864deta(dis[0]);        //第二位小數(shù)顯示
                }
               
                       
        }
}
/**************定時器中斷程序**************/
void Timer1_isr(void) interrupt 3 using 1//定時器1執(zhí)行數(shù)碼管動態(tài)掃描
{
        static unsigned int j;
        TH1=0xfb;                                                        //重新賦值
        TL1=0x00;
        j++;
        if(j==200)
                {
                        j=0;
                        ADFlag=1;
                }                                                                 //定時置位AD采樣標志位
}

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

使用道具 舉報

沙發(fā)
ID:44262 發(fā)表于 2014-7-17 17:23 來自手機 | 只看該作者
熱敏電阻的經(jīng)度分來就很低 ,弄個10位的ad效果可能會好一點
回復(fù)

使用道具 舉報

板凳
ID:48413 發(fā)表于 2014-7-27 13:40 | 只看該作者
回復(fù)

使用道具 舉報

地板
ID:48413 發(fā)表于 2014-7-27 13:42 | 只看該作者
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 一区视频| 日本免费一区二区三区四区 | 久久99精品国产99久久6男男 | 免费中文字幕日韩欧美 | 成人 在线| 久久不卡 | 日韩在线欧美 | 免费精品久久久久久中文字幕 | av在线成人| 狠狠干天天干 | 91中文字幕在线观看 | 91视频网| 精品一区视频 | 3级毛片| 久久久久亚洲av毛片大全 | 看片网站在线 | 观看av | 国产高清在线精品 | 久久免费大片 | 午夜精品久久久久久久久久久久久 | 成人一区二区三区视频 | 午夜a区| 91亚洲国产成人久久精品网站 | 福利片在线观看 | 久草网在线视频 | 欧美综合一区二区 | 日韩午夜影院 | 午夜精品网站 | 国产精品美女一区二区 | 免费h视频 | 成人久久18免费网站图片 | 日日日干干干 | 国产精品精品视频一区二区三区 | 日本人做爰大片免费观看一老师 | 精品福利在线 | 91九色麻豆 | 国产精品一区二区av | 国产一级毛片精品完整视频版 | 日韩一级电影免费观看 | 久久视频免费观看 | 国产精品国产亚洲精品看不卡15 |