STC8H8K64U——ADC(中断)

#include 
#include "led_segment.h"

/*ADC控制寄存器*/
#define ADC_POWER 0x80  //打开ADC电源
#define ADC_START 0x40  //ADC转换启动 
#define ADC_FlAG  0x20  //ADC转换标志
#define ADC_CHS   0x00  //模拟通道选择0~1111 
/*ADC配置寄存器*/
#define RESFMT    0x20  //转换结果右对齐,ADC_RES保存结果高4位,ADC_RESL保存结果低8位
#define SPEED     0x0f  //ADC工作时钟频率0~1111 
/*ADC时序控制寄存器*/
#define CSSETUP   0x80  //ADC通道选择时间控制
#define CSHOLD    0x60  //ADC通道选择保持时间控制
#define SMSPDUTY  0x1f  //ADC模拟信号采样时间控制

unsigned int Result,V;

void ADC_Init(void)
{
	ADC_CONTR |= ADC_POWER | ADC_CHS |ADC_START;  //打开ADC电源,选择模拟通道 P1.0,AD转换启动
	ADCCFG |= RESFMT | SPEED;                     //转换结果右对齐,ADC工作时钟频率SYSclk/2/16
	ADCTIM |= CSSETUP | CSHOLD | SMSPDUTY; 
}

void main (void)
{
	P_SW2 |= 0x80; //使能访问 XFR

/*数码管IO口配置*/		
	SEG_GPIO_Init();
	EA = 1;        //总中断允许
	EADC = 1;      //ADC中断允许 
/*ADC初始化*/	
  ADC_Init();	
	while(1)
	{
		V = Result*0.12207;      //(5/4096)*100
		LED_7SEG_CAT_Display(V,2);
	}
}

void ADC() interrupt 5
{
	ADC_CONTR &= ~ADC_FlAG;  //ADC完成标志位清零	
	
	Result = ADC_RES;        //高四位
	Result <<= 8;
	Result |= ADC_RESL;      //低八位
	
	ADC_CONTR |= ADC_START;  //继续开始AD转换
}	

数码管显示程序led_segment

STC8H8K64U——ADC(中断)_第1张图片

你可能感兴趣的:(STC8H8K64U——打狗棍,单片机,嵌入式硬件,51单片机,c语言)