伽马刀 发表于 2023-4-23 15:26:38

本来想剩下个24C64,DS1402,27.120Mhz晶振省点钱


图都画完了,没想到老款MCU降价啦,老板说不换方案了。哈哈哈。可以想想5一放假去哪玩啦。{:4_186:}

伽马刀 发表于 2023-4-23 16:26:22

#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));
}

伽马刀 发表于 2023-4-23 16:30:33

#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; //开始计时
}

伽马刀 发表于 2023-5-4 18:55:43


页: [1]
查看完整版本: 本来想剩下个24C64,DS1402,27.120Mhz晶振省点钱