📄 adc2.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 + -