MC30单片机例程.rar

  • MOONAIRCRAFT
    了解作者
  • C/C++
    开发工具
  • 26KB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • 2 积分
    下载积分
  • 0
    下载次数
  • 2022-01-19 22:12
    上传日期
家电用的国产便宜MCU全套例程,非常全面,可以帮客户节省不少MCU方面的经费
MC30单片机例程.rar
  • MC30单片机例程
  • key.c
    2.6KB
  • MC30P6080_Demo_LVD.c
    4.8KB
  • MC30P6080_Demo_PWM.c
    4.6KB
  • MC30P6080_Demo_TIMER.c
    4.5KB
  • key.h
    723B
  • MC32P7031_Demo_C.c
    6.4KB
  • led.h
    3.6KB
  • adc.h
    289B
  • MC30P6240_Demo.c
    5.9KB
  • MC32F7343_Demo_C.c
    16.4KB
  • MC30P6080_Demo_INT.c
    4.5KB
  • MC30P6080_Demo_RTCWKUP.c
    5KB
  • led.c
    7.9KB
  • MC32P7311 多个中断.c
    5.5KB
  • MC30P6080_Demo_SLEEP.c
    5.2KB
  • MC32P7331_Demo_C多中断.c
    5.7KB
  • adc.c
    3.2KB
  • MC30P6250_C.c
    4KB
内容介绍
/****************************************************************************** ; * @File Name : mc32F7343_main.c ; * @Copyright : 2018 SINOMCU Corporation,All Rights Reserved. ; * @Module Name : Standard Demo ; * @MCU : MC32F7343 ; * @Create Date : 2018.06.30 ; * @Author/Corporation : Martin/SinoMCU ; * @Abstract Description: ; * ; *---------------------------Revision History--------------------------------- ; * No Version Date Revised By Item Description ; * 1 V1.0 2018.06.30 Timer,ADC,UART,ADC_offset,EEPROM,IIC P16 1ms翻转 5s进入休眠 P17唤醒 ******************************************************************************/ #include "User_Def.h" #define IIC_Addr_Define 0x50 #define I2C_Write_CMD 0 #define I2C_Read_CMD 1 uchar IIC_Test_buff[10]; u8 UART_Buff; u8 UART_Test; u16 ADH_temp=0,ADL_temp=0,Data_OSADJCR=0; u16 ADC_CH0_Value; u8 EEPROM_Num; u8 Timer0_Num1; u16 Timer0_Num2; u16 Temp_ADC_Value; u16 Temp_EE; /************************************************ ; * @Function Name : main ; * @Description : main function ; * @IN_Parameter : ; * @Return parameter : ; ***********************************************/ void main(void) { InitSys(); EEPROM_Num=0x55; EEPROM_Write_Byte(0x01,EEPROM_Num); EEPROM_Num=0; EEPROM_Num=EEPROM_Read_Byte(0x01); KBCR7=1; //P17键盘中断 while(1) { if(Fre_Mode_Flag) { Fre_Mode_Flag=0; SendString("Sinomcu_Test_code\r\n"); } if(Sleep_Flag) { Sleep_Flag=0; ADEN=0; //关闭ADC ADIOS0=0; ADIOS1=0; //切换为数字口 P16D=0; //休眠关闭外设 GIE = 0; KBIF=0; KBIE = 1; Nop(); Nop(); Stop(); Nop(); Nop(); KBIE = 0; KBIF = 0; GIE = 1; //唤醒还原外设 IO_ADC_Config(0); //切换模拟口 ADEN=1; } } } /************************************************ ; * @Function Name : C_RAM ; * @Description : 清RAM ; * @IN_Parameter : ; * @Return parameter : ; ***********************************************/ void C_RAM(void) { for(FSR0=0;FSR0<0xff;FSR0++) { INDF0=0; } FSR0=0xFF; INDF0=0; for(FSR1=0;FSR1<0x7f;FSR1++) { INDF1=0; } FSR1=0x7f; INDF1=0; } /************************************************ ; * @Function Name : ADC_Init_ADJ ; * @Description : 每次上电时候调用此函数,可解决AD零点漂移问题 ; * @IN_Parameter : ; * @Return parameter : ; ***********************************************/ void ADC_Init_ADJ(void) { ADCR0=0xe0;//2V参考电压 通道GND OSADJEN=1;//使能 ADC 零点偏移修调模式 ADCR1=0x33;//FHIRC/64,15个ADCLK OSADJCR&=0xc0;//修调值从零开始 ADEN=1; ADEOC=0; while(!ADEOC); ADH_temp=ADRH; ADL_temp=ADRL; if((ADH_temp==0)&&(ADL_temp==0)) { OSADJCR|=0x3f; Data_OSADJCR=OSADJCR&0x1f; while(1) { if(Data_OSADJCR==0x00) return; else { ADEOC=0; while(!ADEOC); ADH_temp=ADRH; ADL_temp=ADRL; if((ADH_temp==0)&&(ADL_temp==0)) return; else; } OSADJCR--; Data_OSADJCR=OSADJCR&0x1f; } } else { Data_OSADJCR=OSADJCR&0x1f; while(1) { if(Data_OSADJCR==0x1f) return; else { ADEOC=0; while(!ADEOC); ADH_temp=ADRH; ADL_temp=ADRL; if((ADH_temp==0)&&(ADL_temp==0)) return; else; } OSADJCR++; Data_OSADJCR=OSADJCR&0x1f; } } } /************************************************ ; * @Function Name : ADC_Repeat_ADJ ; * @Description : ADC 校准后 重复几次 ; * @IN_Parameter : ; * @Return parameter : ; ***********************************************/ void ADC_Repeat_ADJ(void) { u8 i,j,R_Zero,R_Zero_max; R_Zero_max=0; R_Zero=0; Data_OSADJCR=OSADJCR&0x3f; OSADJCR--; for(j=0;j<3;j++) { for(i=0;i<6;i++) { ADEOC=0; while(!ADEOC); ADH_temp=ADRH; ADL_temp=ADRL; i++; if((ADH_temp==0)&&(ADL_temp==0)) { R_Zero++; } } if(R_Zero>R_Zero_max) { R_Zero_max=R_Zero; Data_OSADJCR=OSADJCR&0x3f; } OSADJCR++; R_Zero=0; } OSADJCR=Data_OSADJCR&0x3f; } /************************************************ ; * @Function Name : IO_Config ; * @Description : 普通IO配置 ; * @IN_Parameter : ; * @Return parameter : ; ***********************************************/ void IO_Config(void) { IOP0=0; IOP1=0; IOP2=0; OEP0=0xff; //P0 out OEP1=0x7f; //P17 in OEP2=0xfD; //P21 in ADIOS0=0; ADIOS1=0; PUP0=0; PUP1=0x80; //P17 up PUP2=0; PDP0=0; PDP1=0; PDP2=0; } /************************************************ ; * @Function Name : IO_ADC_Config ; * @Description : ADC IO配置 ; * @IN_Parameter : CHX ADC IO通道 ; * @Return parameter : ; ***********************************************/ void IO_ADC_Config(u8 CHX) { uchar CHX_Temp=0; CHX_Temp=CHX; if(CHX<8) { ADIOS0=1<<CHX_Temp; }else { CHX_Temp=CHX_Temp-8; ADIOS1=1<<CHX_Temp; } } /************************************************ ; * @Function Name : ADC_Config ; * @Description : ADC配置 ; * @IN_Parameter : ADC_CLK ADC转换时钟选择位 ADC_Ampling_Time ADC采样时间选择位 ADC_VRS ADC参考电压选择位 00 内部2v 11 VDD ; * @Return parameter : ; ***********************************************/ void ADC_Config(u8 ADC_CLK,u8 ADC_Ampling_Time,u8 ADC_VRS) { ADCR1&=0xCC; ADCR1|=ADC_CLK<<4; ADCR1|=ADC_Ampling_Time; ADCR0&=0xF3; ADCR0|=ADC_VRS<<2; ADRSEL=1; //高4位存入ADRH[3:0]、低8位存入ADRL[7:0] OSADJCR=0x00;//关闭修调 ADEN=1; //使能ADC //ADIE=1; } /************************************************ ; * @Function Name : Get_ADC_Value ; * @Description : 获得ADC值 启动一次转换 查询方式 ; * @IN_Parameter : 通道 ; * @Return parameter : 返回ADC的值 ; ***********************************************/ u16 Get_ADC_Value(u16 CHX) { ADCR0&=0x0F; ADCR0|=CHX<<4; ADEOC=0; //使能转换 while(!ADEOC); //等待转换完成 Temp_ADC_Value=(ADRH<<8)+ADRL; return Temp_ADC_Value; } /************************************************ ; * @Function Name : ADC_Get_Value_Average ; * @Description : 连续转换 ; * @IN_Parameter : 通道 ; * @Return parameter : 返回ADC的值 ; *************************
评论
    相关推荐