本来想剩下个24C64,DS1402,27.120Mhz晶振省点钱
图都画完了,没想到老款MCU降价啦,老板说不换方案了。哈哈哈。可以想想5一放假去哪玩啦。{:4_186:}
#include "oled.h"
#include "intrins.h"
#include "delay.h"
#define VREFH_ADDR CHIPID7
#define VREFL_ADDR CHIPID8
long ReadP11Voltage(void)//获取P1.1口电压
{
long Value = 0;
P1M0 = 0x00; //设置 P1.1为 ADC口
P1M1 = 0x02;
ADCTIM = 0x3f; //设置 ADC内部时序
ADCCFG = 0x2F; //设置 ADC时钟为系统时钟/2/16/16
ADC_CONTR = 0x81;//打开 ADC 电源 选择为 ADC 输入通道的 I/O 口 {(0001) P1.1}
ADC_START = 1;
_nop_();
_nop_();
while (!ADC_FLAG); //查询 ADC完成标志ADC_FLAG = 0; //清完成标志
Value = ADC_RES;
Value <<= 8;
Value |= ADC_RESL;
ADC_FLAG = 0;
return (long)((ReadDCVoltage()*(long)Value)/4096L);
}
long ReadDCVoltage(void)//获取电源电压
{
ADCTIM = 0x3f; //设置 ADC内部时序
ADCCFG = 0x2f; //设置 ADC时钟为系统时钟/2/16
ADC_CONTR = 0x8f; //使能 ADC模块,并选择第 15通道
ADC_START = 1; //启动 AD转换
_nop_();
_nop_();
while (!ADC_FLAG); //查询 ADC完成标志
ADC_FLAG = 0; //清完成标志
return (long)(4096L * ((VREFH_ADDR << 8) + VREFL_ADDR) / ((ADC_RES << 8) | ADC_RESL));
}
#include "pwm.h"
//主频27.120Mhz
void PWM_OUT(u16 Freq)//输出指定频率PWM
{
//P1^0输出PWM
PWMA_CCER1 = 0x00; //写 CCMRx前必须先清零 CCERx关闭通道
PWMA_CCMR1 = 0x60; //设置 CC1为 PWMA输出模式
PWMA_CCER1 = 0x01; //使能 CC1通道
PWMA_CCR1H = (u8)((MAIN_Fosc/Freq/2)>>8); //设置占空比时间
PWMA_CCR1L = (u8)(MAIN_Fosc/Freq/2);
PWMA_ARRH = (u8)(MAIN_Fosc/Freq>>8);; //设置周期时间
PWMA_ARRL = (u8)(MAIN_Fosc/Freq);
PWMA_ENO = 0x01; //使能 PWM1P端口输出
PWMA_BKR = 0x80; //使能主输出
PWMA_CR1 = 0x01; //开始计时
}
页:
[1]