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

專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機教程網(wǎng) >> MCU設(shè)計實例 >> 瀏覽文章

基于51單片機之ADC(可銜接各種傳感器來控制)

作者:CaKen   來源:CaKen工作室   點擊數(shù):  更新時間:2014年09月02日   【字體:

 ******************************  Copyright(C) CaKe  ************************************

========================================================================================
==============**版權(quán)信息   : CaKen工作室                                  ==============
==============**文件名     : main.c                                       ==============
==============**作者       : CaKen                                        ==============
==============**版本號     : V1.0                                         ==============
==============**時間       : 2014.08.30                                   ==============
==============**功能描述   : ADC實驗測試                                  ==============
========================================================================================
==============**新浪微博   :CaKen            ==============
****************************************************************************************
 
#include"STC12C5A60S2.H"
#include"intrins.h"      
 
sbit SMG1 = P2^4;  //數(shù)碼管1
sbit SMG2 = P2^5;  //數(shù)碼管2
sbit SMG3 = P2^6;  //數(shù)碼管3
sbit SMG4 = P2^7;  //數(shù)碼管4
 
unsigned char code Tab[]=
{0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e}; //陽
 
****************************************************************************************
函數(shù)名:毫秒級CPU延時函數(shù)
調(diào)  用:DELAY_MS (?);
參  數(shù):1~65535(參數(shù)不可為0)
返回值:無
結(jié)  果:占用CPU方式延時與參數(shù)數(shù)值相同的毫秒時間
備  注:應(yīng)用于1T單片機時i<600,應(yīng)用于12T單片機時i<125
****************************************************************************************/
 
void DELAY_MS (unsigned int a)
{
 unsigned int i;
 while( --a != 0){
  for(i = 0; i < 600; i++);
 }
}
 
***************************************************************************************
函數(shù)名:延時程序
調(diào)  用:delay();
參  數(shù):
返回值:
結(jié)  果:
備  注: 0.1ms延時程序(12MHz 10倍于51單片機速度時)
****************************************************************************************/
 
void delay (unsigned int a)
{
 unsigned char i;
   while( --a != 0)
   {
  for(i = 0; i < 12; i++);
   }        
}
 
****************************************************************************************
** 函數(shù)名: Display_smg(?);
** 說明  : 數(shù)碼管顯示程序
** 輸入值:
** 輸出值: 無
** 返回值: 無
*****************************************************************************************/
 
void Display_smg(unsigned int x)
{
      P0 = Tab[x/1000];
      SMG1 = 0;
      delay(2);
      SMG1 = 1;
 
      P0 = Tab[x00/100];
      SMG2 = 0;
      delay(2);
      SMG2 = 1;
 
   P0 = Tab[x0/10];  
      SMG3 = 0;   
      delay(2);
   SMG3 = 1;
 
      P0 = Tab[x];
      SMG4 = 0;
      delay(2);  
        SMG4 = 1;
}
 
*********************************************************************************************
函數(shù)名:10位A/D轉(zhuǎn)換初始化函數(shù)
調(diào)  用:ADC_Init (?);
參  數(shù):輸入的端口(0000 0XXX 其中XXX是設(shè)置輸入端口號,可用十進制0~7表示,0表示P1.0,7表示P1.7)
返回值:無
結(jié)  果:開啟ADC功能并設(shè)置ADC的輸入端口
備  注:使用ADC功能時需要將對應(yīng)的IO接口設(shè)置為高阻輸入方式(例如:P1M1 = 0x01;)
**********************************************************************************************/
 
void ADC_Init (unsigned char CHA)
{
 unsigned char AD_FIN=0; //存儲A/D轉(zhuǎn)換標(biāo)志
    CHA &= 0x07;            //選擇ADC的8個接口中的一個(0000 0111 清0高5位)
    ADC_CONTR  = 0x40;  //ADC轉(zhuǎn)換的速度(0XX0 0000 其中XX控制速度,請根據(jù)數(shù)據(jù)手冊設(shè)置)
    _nop_();
    ADC_CONTR |= CHA;       //選擇A/D當(dāng)前通道
    _nop_();
    ADC_CONTR |= 0x80;      //啟動A/D電源
    DELAY_MS(1);            //使輸入電壓達到穩(wěn)定(1ms即可)
}
*********************************************************************************************
函數(shù)名:10位A/D轉(zhuǎn)換函數(shù)
調(diào)  用:? = ADC_Read();
參  數(shù):無
返回值:10位ADC數(shù)據(jù)高(從0到1023(十進制))
結(jié)  果:讀出指定ADC接口的A/D轉(zhuǎn)換值,并返回數(shù)值
備  注:適用于STC12C5A60S2系列單片機(必須使用STC12C5A60S2.H頭文件)
**********************************************************************************************/
 
unsigned int ADC_Read (void)
{
 unsigned char AD_FIN=0;           //存儲A/D轉(zhuǎn)換標(biāo)志
    ADC_CONTR |= 0x08;                //啟動A/D轉(zhuǎn)換(0000 1000 令A(yù)DCS = 1)
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    while (AD_FIN ==0)     //等待A/D轉(zhuǎn)換結(jié)束
 {   
        AD_FIN = (ADC_CONTR & 0x10); //0001 0000測試A/D轉(zhuǎn)換結(jié)束否
    }
    ADC_CONTR &= 0xE7;               //1111 0111 清ADC_FLAG位, 關(guān)閉A/D轉(zhuǎn)換,
    return (ADC_RES*4+ADC_RESL);     //返回A/D轉(zhuǎn)換結(jié)果(10位ADC數(shù)據(jù)高8位在ADC_RES中,低2位在ADC_RESL中)
}
 
********************************************************************************************
函數(shù)名:主函數(shù)
調(diào)  用:無
參  數(shù):無
返回值:無
結(jié)  果:程序開始處,無限循環(huán)
備  注:
********************************************************************************************/
 
void main(void)
    unsigned int m;
 ADC_Init (0);    //初始化P1^0
 
 P1M1 = 0X01; //設(shè)置為高阻輸入P1^0
 P1M0 = 0X00;
                       
 while(1)
  {
    m = ADC_Read();    //把數(shù)模轉(zhuǎn)換的數(shù)值給m
    Display_smg(m);    //數(shù)碼管顯示值的大小
  }
 
}
 
 
 
 
關(guān)閉窗口
主站蜘蛛池模板: 久久精品国产99国产精品亚洲 | 国产精品日韩欧美一区二区三区 | 久久久久久99| 福利视频一区 | 少妇一级淫片免费放播放 | 欧美精品一区二区三区四区 在线 | 青青草av网站 | 伊人免费观看视频 | 视频一区二区三区中文字幕 | 欧美在线视频二区 | 成人一区在线观看 | 午夜三级视频 | 午夜免费在线观看 | 91精品国产一区二区三区香蕉 | 日日爱视频 | 999国产精品视频 | 精品一区二区三区在线观看 | 中文字幕av在线播放 | 亚洲欧美在线视频 | 欧美成人精品一区二区三区 | 精品成人av| 中文字幕精品视频在线观看 | 亚洲欧美日韩在线不卡 | 色婷婷亚洲一区二区三区 | 国产在线精品一区二区三区 | 欧美一区二区三区精品免费 | 高清国产午夜精品久久久久久 | 国产精品一区二区欧美黑人喷潮水 | www.中文字幕.com | 亚洲一区av在线 | 色资源在线 | 蜜臀久久 | av三级在线观看 | 免费黄色大片 | 毛片网在线观看 | 免费在线观看av | 麻豆av在线| 欧美福利视频 | 欧美成人猛片aaaaaaa | 久久久久中文字幕 | 日本三级做a全过程在线观看 |