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

專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

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

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

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

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