📄 adc.c
字号:
#include <INTRINS.H>
#include "STK6031.h"
//********************************************************************************
//定义数据类型
typedef unsigned char uint8;
typedef unsigned int uint16;
/*
********************************************************************************
* 函 数 名:InitMCU
* 功能描述:初始化MCU,其中包括初始化各I/O口,CHIPCON,
CKCON,选择I/O口的功能
* 输 入: 无
* 返 回: 无
********************************************************************************
*/
void InitMcu(void)
{
P0 = 0xFF; //初始化各I/O 口
P1 = 0xFF;
P2 = 0xFF;
P3 = 0xFF;
P4 = 0x0F;
XFR_PADOPT_ADC = 0x02; //设置P4.1 脚作为ADC 输入功能
CHIPCON = 0x1A; // 设置CPUCLK=XTAL1/3,允许访问片内AUX 存储器,禁止ALE 输出,允许低电压复位
CKCON = 0x39; // 设置TIMER0,TIMER1,TIMER2 的计数频率为CPUCLK/4, 设置MOVX 指令访问外部AUX 存储器的时间为3 个机器周期
}
/*
********************************************************************************
* 函 数 名: Delay
* 功能描述: 延时函数,延时的间隔是1ms
* 输 入: Time :控制延时的间隔
* 返 回: 无
********************************************************************************
*/
void Delay(uint8 Time)
{
uint8 i;
// 需要执行2000个指令周期
while(Time--) {
i = 199;
while(i--); //这一段将执行10个指令周期
}
}
/*
********************************************************************************
* 函 数 名:GetADCValue
* 功能描述:完成ADC 转换并返回3次读到ADC 结果的平均值
* 输 入: 无
* 返 回: ADC转换后的6 位结果
********************************************************************************
*/
uint8 GetADCValue(void)
{
uint8 i;
uint8 ADCBUFF[3];
XFR_ADCCH = 0x80|0x02;
Delay(10);
for (i=0; i<3; i++)
{
ADCBUFF[i] = XFR_ADC & 0x3F;
}
return((ADCBUFF[0] + ADCBUFF[1] + ADCBUFF[2])/3);
}
void main(void)
{
InitMcu();
while(1)
{
Delay(100); // 每100ms 把ADC 转换的6 位结果输入到P1 口的低6 位
P1 = GetADCValue() & 0x3F;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -