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

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

QQ登錄

只需一步,快速開始

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

Stc15f2k60s2單片機(jī)模擬量使用源程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:609989 發(fā)表于 2019-12-14 18:12 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
感言:用了兩天時(shí)間,哎,不過弄出來(lái)真爽。


//硬件介紹:1.使用0~100N的壓力傳感器,模擬電壓輸出范圍是:1V~4.3V,P1.1是一個(gè)繼電器,設(shè)置成強(qiáng)推了,不用在意。
//功能介紹:1.獲取P1.0口模擬電壓值;2.轉(zhuǎn)換成浮點(diǎn)發(fā)送給上位機(jī),上位機(jī)顯示“電壓值與壓力值”。
//接線介紹:將壓力傳感器與P1.0口相連接。
//注釋:程序使用的是查詢A/D方式,發(fā)送給上位機(jī)使用了兩種方式,選其中一種即可,程序都已經(jīng)調(diào)通,可直接使用。
//感謝“wulin”大神。
#include <stc15f2k60s2.H>                        
#include <intrins.H>     
#include <stdio.h>
#define uint unsigned int               
#define uchar unsigned char            
#define ulint unsigned long int
     
#define FOSC 11059200L          //系統(tǒng)頻率
#define BAUD 9600            //串口波特率

#define ADC_POWER   0x80                //ADC power control dit (宏定義ADC電源控制位)1000 0000
#define ADC_FLAG    0x10                //ADC complete flag (宏定義ADC完成標(biāo)志位)    0001 0000
#define ADC_START   0x08                //ADC start control dit (宏定義ADC啟動(dòng)控制位)0000 1000
#define ADC_SPEEDLL 0x00                //420 clocks (宏定義420時(shí)鐘)速度控制         0000 0000
#define ADC_SPEEDL  0x20                //280 clocks (宏定義280時(shí)鐘)速度控制         0001 0000
#define ADC_SPEEDH  0x40                //140 clocks (宏定義140時(shí)鐘)速度控制         0010 0000
#define ADC_SPEEDHH 0x60                //070 clocks (宏定義70時(shí)鐘)速度控制          0011 0000

sbit Q1=P1^1;                                //驅(qū)動(dòng)繼電器端口定義
uchar num1,num2;
uint  adcnum;
/*--------------------------------
   ms延時(shí)子程序 11.0592MHz時(shí)鐘
---------------------------------*/
void delayms(uint k)
{
    uint i,j;            
    for(i=k;i>0;i--)   
        for(j=1150;j>0;j--);
}
/*----------------------------
串口初始化
-----------------------------*/
void UartInit(void)                //9600bps@11.0592MHz
{
        SCON = 0x50;                //8位數(shù)據(jù),可變波特率
        AUXR |= 0x01;                //串口1選擇定時(shí)器2為波特率發(fā)生器
        AUXR |= 0x04;                //定時(shí)器2時(shí)鐘為Fosc,即1T
        T2L = 0xE0;                        //設(shè)定定時(shí)初值
        T2H = 0xFE;                        //設(shè)定定時(shí)初值
        AUXR |= 0x10;                //啟動(dòng)定時(shí)器2
}
/*----------------------------
   初始化ADC
-----------------------------*/
void InitADC()
{
        P1ASF=0x01;                            //設(shè)置P1.0端口作為模擬輸入
        ADC_RES=0;                            //Clear previous result (清除以前的結(jié)果)
        ADC_CONTR=ADC_POWER|ADC_SPEEDLL;    //開啟ACD電源、設(shè)置轉(zhuǎn)換速度
        delayms(1);                                                //上電延時(shí)1ms                                       
}
/*----------------------------
   GET ADC
-----------------------------*/
uchar GetADCResult(uchar CHA)                                //獲取ADC結(jié)果
{
        ADC_CONTR=ADC_POWER|ADC_SPEEDLL|CHA|ADC_START;//啟動(dòng)轉(zhuǎn)換1000 1000
        _nop_();                        //延時(shí)確保正確讀到ADC_CONTR寄存器的值
        _nop_();
        _nop_();
        _nop_();
        while(!(ADC_CONTR & ADC_FLAG));        //等待ADC轉(zhuǎn)換完成標(biāo)志置位 1001 1000
        ADC_CONTR &=~ADC_FLAG;                        //關(guān)閉ADC
        return ADC_RES ;                                //返回八位ADC結(jié)果
}
//第一種方法:數(shù)組
void Uartsend_1(unsigned char send)
{
    SBUF=send;                        //發(fā)送數(shù)據(jù)
    while(!TI);                        //等待前一幀數(shù)據(jù)發(fā)送完畢
    TI=0;                            //復(fù)位標(biāo)志位
}
void U1_TX_C(char *send)
{
    unsigned char a=0;
    while(send[a])
    {
     Uartsend_1(send[a]);
     a++;
    }
}
void Uartsend_adc_1(unsigned long send) //我也不懂啥意思,照搬
{

    unsigned char a[4],b;
    send=GetADCResult(0);
      send=send*504/256;    //電壓計(jì)算
       a[0]=send%10+'0';        
       a[1]=send/10%10+'0';
    a[2]='.';                    
       a[3]=send/100+'0';        
   for(b=4;b>0;b--)            //發(fā)送
   Uartsend_1(a[b-1]);        //
}
//第二種方法:串口打印
void Uartsend_adc()
{
    float esp,esp1;
    num1=GetADCResult(0);
    esp=(num1*5.035/256)-0.002;    //電壓計(jì)算,最后這個(gè)0.002是我自己補(bǔ)償?shù)?br />     TI=1;
    printf("電壓: %4.3f", esp); //保留小數(shù)點(diǎn)后兩位輸出
    printf("V \n");      
    while(!TI);//判斷是否發(fā)送完成  發(fā)送完成出循環(huán)
    TI = 0;   
    delayms(1000);
    TI=1;
    esp1=(esp-1.000)/0.033;
    printf("壓力: %2.1f", esp1); //保留小數(shù)點(diǎn)后兩位輸出
    printf("N \n");      
    while(!TI);//判斷是否發(fā)送完成  發(fā)送完成出循環(huán)
    TI = 0;   
}
/*--------------------------------------------------
主函數(shù)
---------------------------------------------------*/
void main()
{
        P1M1 = 0x01;                         //P1.0高阻 P1.1強(qiáng)推挽:0000 0001 ADC輸入高阻、繼電器強(qiáng)上拉
        P1M0 = 0x02;                         //P1.0高阻 P1.1強(qiáng)推挽:0000 0010 ADC輸入高阻、繼電器強(qiáng)上拉
        P_SW1= 0x40;                         //P3.6/P3.7串口1 RXD/TXD
        delayms(1000);
        Q1=0;                                //驅(qū)動(dòng)繼電器端口初始化0        
        InitADC();                            //Init ADC sfr (初始化ADC SFR)
        UartInit();   
        while(1)
        {      
            
                SBUF=GetADCResult(0);//發(fā)送數(shù)據(jù),發(fā)送的是ADC_RES值
                while(!TI);                                //等待發(fā)送完畢
                TI=0;                                                //發(fā)送中斷請(qǐng)求標(biāo)志位清0
                delayms(2000);                        //延時(shí)2s發(fā)送一次
                adcnum=GetADCResult(0);                 //讀取一次
                Uartsend_adc_1(adcnum);
                U1_TX_C("V");
                delayms(2000);
                Uartsend_adc();
                delayms(2000);
               
        }
}

模擬量.rar

41.26 KB, 下載次數(shù): 23, 下載積分: 黑幣 -5

評(píng)分

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

查看全部評(píng)分

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

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 蜜桃av人人夜夜澡人人爽 | 在线资源视频 | 国产精品国产精品国产专区不卡 | 日韩精品在线一区 | 国产高清视频在线播放 | 奇米av | 国产成人精品一区二区三区网站观看 | 一区二区日韩 | 一区二区三区视频免费看 | 婷婷在线免费 | 午夜视频一区 | 夜夜爽99久久国产综合精品女不卡 | 亚洲免费观看视频网站 | 亚洲婷婷六月天 | 亚洲一区二区三区高清 | 久热精品免费 | 在线观看成人免费视频 | 天天射美女 | 国产精品综合色区在线观看 | 久久久成人一区二区免费影院 | 国产在线播放一区二区三区 | 成年人免费在线视频 | 亚洲综合大片69999 | 国产精品久久久久久久久久久久久 | 久久综合欧美 | www久久国产 | 一区二区三区在线电影 | 国产精品久久国产精品99 gif | 中文字幕一区二区三区不卡 | 免费一区 | 欧美一区二区三区四区视频 | 久久三级av | 亚洲一区二区免费 | 日韩一区二区在线观看视频 | 91成人在线视频 | 黄色三级毛片 | 亚洲精品福利视频 | 欧美一级黄带 | 欧美日本在线观看 | 亚洲欧洲视频 | 日韩在线不卡 |