久久久久久久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);    //數碼管顯示值的大小
  }
 
}
 
 
 
 
關閉窗口
主站蜘蛛池模板: 国产综合在线视频 | 久久久久久国产精品 | 亚洲欧美中文日韩在线 | 国产精品久久性 | 国产在线中文字幕 | 成人欧美一区二区三区黑人孕妇 | 午夜精品一区二区三区在线观看 | 成人h视频在线 | 国内精品一区二区 | 国产三级在线观看播放 | 国产精品久久久久一区二区三区 | 国产精品久久99 | 九九伦理电影 | 免费观看日韩av | 国产中文在线 | 国产精品久久一区二区三区 | 亚洲综合一区二区三区 | 国产日韩欧美另类 | 最新中文字幕第一页视频 | 国产日韩欧美一区 | 久久久高清 | 久久精品亚洲精品国产欧美 | 欧美成人在线免费 | 精品欧美一区二区中文字幕视频 | 中文字幕一区二区三区在线观看 | 久久精品国产久精国产 | 天天天天操 | 精品久久久网站 | 国产高清免费视频 | 成人亚洲在线 | 欧美日韩免费一区二区三区 | 欧美一区二区三 | 韩国理论电影在线 | 久久www免费视频 | 国产一区二区三区免费视频 | 日韩 国产 在线 | 一级a性色生活片久久毛片 一级特黄a大片 | 黄色a三级 | 狠狠入ady亚洲精品经典电影 | 国产成人精品av | 日本黄色大片免费 |