⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 adc2.c

📁 AT89C51 MP3源程序AT89C51 MP3源程序AT89C51 MP3源程序AT89C51 MP3源程序
💻 C
字号:
//*********************************************************************
#include <pic.h>			//包含单片机内部资源预定义
//#include <stdio.h>

//*********************************************************************
//定义变量
//*********************************************************************
#define uchar unsigned char
#define uint  unsigned int

/*----------------RA口的使用情况及定义-----------------/ 
#define XXXX   RA0      //
#define XXXX   RA1      //
#define XXXX   RA2      //
#define XXXX   RA3      //
#define XXXX   RA4      //
#define XXXX   RA5      //
-------------------------------------------------------*/

/*----------------RB口的使用情况及定义------------------/ 
#define XXXX   RB0      //
#define XXXX   RB1      //
#define XXXX   RB2      //
#define XXXX   RB3      //
#define XXXX   RB4      //
#define XXXX   RB5      //
#define XXXX   RB6      //
#define XXXX   RB7      //
-------------------------------------------------------*/

/*----------------RC口的使用情况及定义------------------/
#define XXXX   RC0      //
#define XXXX   RC1      //
#define XXXX   RC2      //
#define XXXX   RC3      //
#define XXXX   RC4      //
#define XXXX   RC5      //
#define XXXX   RC6      //
#define XXXX   RC7      //
-------------------------------------------------------*/

/*-----------------------------------------------------*/
#define AN0 CHS2=0,CHS1=0,CHS0=0;
#define AN1 CHS2=0,CHS1=0,CHS0=1;
#define AN3 CHS2=0,CHS1=1,CHS0=1;
/*-----------------------------------------------------*/

/*-----------------------------------------------------*/
uchar ADC0_data;
uchar ADC1_data;
uchar ADC3_data;

uchar TZ_count;         //显示状态计数器
/*-----------------------------------------------------*/

//********************************************************************
//数码管显示查表代码,定义为const格式
//显示段对74HC164引脚 A:4, B:5, C:7, D:0, E:1, F:3, G:2, H:6
const int LED[]={0x00BB,0x00A0,0x0037,0x00B5,  //0,1,2,3
                 0x00AC,0x009D,0x009F,0x00B0,  //4,5,6,7
                 0x00BF,0x00BD,0x00BE,0x008F,  //8,9,A,b
                 0x001B,0x00A7,0x001F,0x001E,  //C,d,E,F
                 0x00AE,0x000B,0x00BA,0x00AB,  //H,L,N,U
                 0x003E,0x0087,0x0004,0x0000,  //P,o,-,熄灭
                };
//*********************************************************************

//*********************************************************************
//声明本模块中所调用的函数类型
//*********************************************************************
void INITIAL(void);                      //上电复位
void SFRSET(void);                       //存储器初始化
void Time(void);                         //定时、走时
void interrupt ISR(void);                //中断入口子程序(interrupt)
void DISPLAY(unsigned int number);
void ADC0(void);
void ADC1(void);
void DELAY(uint i);

//*********************************************************************
//*************上电复位************
//*********************************************************************
void INITIAL(void)			
   {if(POR==0)
       {PORTA=0x00;
        PORTB=0x00;
        PORTC=0x00;
       }	
    while(POR==0){POR=1;}
   }

//*********************************************************************
//*********特殊功能存储器初始化**********
//*********************************************************************
void SFRSET(void)		
   {OPTION=0x05;         //选项寄存器,B口输入上拉,分频器给TMR0,64分频
    TRISA =0x0F;         //RA0、RA1、RA3用于AD,RA2输入口,RA4、RA5输出
    TRISB =0x13;         //RB0,RB1为按钮开关输入,RB2,RB3为164输出,
    TRISC =0x00;         //全为输出

    ADCON0=0x81;         //ADC控制寄存器,时钟选择32分频,通道选择.打开模块
    ADCON1=0x04;         //RA0,RA1,RA3用于AD,ADCON1为模拟口的选择寄存器

    INTCON=0XC0;         //中断控制寄存器,开总中断,开外部中断
    PIE1  =0x00;         //外部中断使能寄存器
    PIR1  =0x00;         //外部中断标志寄存器

    T1CON =0x00;         //计时器TMR1数据寄存器
    PCLATH=0x00;         //与PC相关的寄存器
   }
//*********************************************************************
//*********************************************************************


//*********************************************************************
//***********变量初始化************
//*********************************************************************
void VAR_INIT(void)
   {
   }
//*********************************************************************
//*********************************************************************


//*********************************************************************
//**********显示子程序***********
//*********************************************************************
void DISPLAY(unsigned int number)
   {uint num,num_l;
    uchar i,j;
    num=LED[number/10]<<8;
    num_l=LED[number%10];
    //num=LED[(number&0XF0)>>4]<<8;
    //num_l=LED[number&0X0F];
    num+=num_l;
    switch(TZ_count)
       {case 1:
           num|=0X0040;
        break;
        case 2:
           num|=0X4000;
        break;
        case 3:
           num|=0X4040;
        break;
       }
    for(i=0;i<16;i++)
       {CLK=0;
        if(num&0x8000) DAT=1;
		else DAT=0;
        j=1;
		while(j--);
        CLK=1;
        num<<=1;
       }
    CLK=0;
   }
//*********************************************************************
//*********************************************************************


//*********************************************************************
//*******延时子程序*********
//*********************************************************************
void DELAY(uint i)
   {while(i--);}
//*********************************************************************
//*********************************************************************


//*********************************************************************
//----------8位AD转换,m为通道---------------
//-------返回为采样到的一个十六进制数-------
//*********************************************************************
void ADC0(void)
   {AN0;                  //选择通道
    DELAY(100);           //延时等待
    ADGO=1;
    while(ADGO);
    ADC0_data=ADRES;   
   }

void ADC1(void)
   {AN1;                  //选择通道
    DELAY(100);           //延时等待
    ADGO=1;
    while(ADGO);
    ADC1_data=ADRES;   
   }
//*********************************************************************
//*********************************************************************

  
//*********************************************************************
//***************主程序**************
//*********************************************************************
void main(void)
   {INITIAL();                   //上电复位
    SFRSET();                    //特殊功能存储器初始化
    VAR_INIT();                  //变量初始化

    while(1)                     //程序工作主循环
       {ADC0();
        DISPLAY(ADC0_data/10);
        DELAY(20000);
        DELAY(20000);
        DELAY(20000);
        DELAY(20000);
        DELAY(20000);
        DELAY(20000);
        DELAY(20000);
        DELAY(20000);
        DELAY(20000);
        DELAY(20000);
        DELAY(20000);
        DELAY(20000);
 
        ADC1();
        DISPLAY(ADC1_data/10);
        DELAY(20000);
        DELAY(20000);
        DELAY(20000);
        DELAY(20000);
        DELAY(20000);
        DELAY(20000);
        DELAY(20000);
        DELAY(20000);
        DELAY(20000);
        DELAY(20000);
        DELAY(20000);
        DELAY(20000);           
       }
   }
//*********************************************************************
//*********************************************************************

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -