我改了一下例程EBS002->FUNCTIONDEMO_NBK_RD8x3x_EBS002。原理图:
该例程功能有文字说明:
模板型号:RD8T36P48
模板使用IC资源:PWM0,DDIC_LED,GPIO,ADC
模板使用驱动资源:
模板说明:EBS002 基础功能扩展板功能演示示例。演示RGB、数码管、热敏电阻、可调电阻、蜂鸣器等器件的功能,共有六种模式。
模式0:三色RGB呼吸灯示例,有周期调节功能,修改RGB扫描函数中CycleNum的值,可以改变呼吸周期。通过板上的K1、K2按键,可以改变呼吸周期
模式1:硬件LED驱动扫描数码管显示,在数码管上显示分:秒,范围从00:00到59:59
模式2:软件使用GPIO扫描数码管引脚进行显示,显示秒:毫秒,范围从00:00到59:59
模式3:使用ADC采样AIN7上的热敏电阻的电压,通过查表法转换为温度值,在数码管上显示
模式4:使用ADC采样AIN15上的可调电阻,在数码管上显示ADC采样值
模式5:PWM驱动无源蜂鸣器,通过板上K1、K2控制,任意按下,蜂鸣器响一下
默认是模式0,我改为模式4,代码如下:
#define Test_Mode 4
typedef enum
{
DOTUNDISPLAY = (uint8_t)0x00,
DOTDISPLAY = (uint8_t)0x20
}LedDotDisplay;
typedef enum
{
LEDCOM0 = (uint8_t)0x00,
LEDCOM1 = (uint8_t)0x01,
LEDCOM2 = (uint8_t)0x02,
LEDCOM3 = (uint8_t)0x03,
LEDCOM4 = (uint8_t)0x04,
LEDCOM5 = (uint8_t)0x05,
LEDCOM6 = (uint8_t)0x06,
LEDCOM7 = (uint8_t)0x07
}LedSelCOM;
主程序:
#include "SC_Init.h" // MCU initialization header file, including all firmware library header files
#include "SC_it.h"
#include "..\Drivers\SCDriver_list.h"
#include "HeadFiles\SysFunVarDefine.h"
//EBS002 基础功能扩展板功能演示示例。演示RGB、数码管、热敏电阻、可调电阻、蜂鸣器等器件的功能,共有六种模式。
//模式0:三色RGB呼吸灯示例,有周期调节功能,修改RGB扫描函数中CycleNum的值,可以改变呼吸周期。通过板上的K1、K2按键,可以改变呼吸周期
//模式1:硬件LED驱动扫描数码管显示,在数码管上显示分:秒,范围从00:00到59:59
//模式2:软件使用GPIO扫描数码管引脚进行显示,显示秒:毫秒,范围从00:00到59:59
//模式3:使用ADC采样AIN7上的热敏电阻的电压,通过查表法转换为温度值,在数码管上显示
//模式4:使用ADC采样AIN15上的可调电阻,在数码管上显示ADC采样值
//模式5:PWM驱动无源蜂鸣器,通过板上K1、K2控制,任意按下,蜂鸣器响一下
/**************************************Generated by EasyCodeCube*************************************/
/*************************************.Generated by EasyCodeCube.************************************/
/*****************************************************************************************************
* Function Name: main
* Description : This function implements main function.
* Arguments : None
* Return Value : None
******************************************************************************************************/
void main(void)
{
/*<Generated by EasyCodeCube begin>*/
/*<UserCodeStart>*//*<SinOne-Tag><36>*/
IcResourceInit();
/*<UserCodeEnd>*//*<SinOne-Tag><36>*/
/*<UserCodeStart>*//*<SinOne-Tag><216>*/
while(1)
{
/*<UserCodeStart>*//*<SinOne-Tag><208>*/
#if(Test_Mode==0)
Mode0_RGB();
#endif
/*<UserCodeEnd>*//*<SinOne-Tag><208>*/
/*<UserCodeStart>*//*<SinOne-Tag><158>*/
#if(Test_Mode==1)
Mode1_DDIC_LED();
#endif
/*<UserCodeEnd>*//*<SinOne-Tag><158>*/
/*<UserCodeStart>*//*<SinOne-Tag><159>*/
#if(Test_Mode==2)
Mode2_GPIO_LED();
#endif
/*<UserCodeEnd>*//*<SinOne-Tag><159>*/
/*<UserCodeStart>*//*<SinOne-Tag><160>*/
#if(Test_Mode==3)
Mode3_ADC_NTC();
#endif
/*<UserCodeEnd>*//*<SinOne-Tag><160>*/
/*<UserCodeStart>*//*<SinOne-Tag><161>*/
#if(Test_Mode==4)
Mode4_ADC_CMP3();
#endif
/*<UserCodeEnd>*//*<SinOne-Tag><161>*/
/*<UserCodeStart>*//*<SinOne-Tag><162>*/
#if(Test_Mode==5)
Mode5_Buzzer();
#endif
/*<UserCodeEnd>*//*<SinOne-Tag><162>*/
/*<Begin-Inserted by EasyCodeCube for Condition>*/
}
/*<UserCodeEnd>*//*<SinOne-Tag><216>*/
/*<Generated by EasyCodeCube end>*/
}
ADC_CMP3()代码:
void Mode4_ADC_CMP3()
{
/*<UserCodeStart>*//*<SinOne-Tag><133>*/
TR1=0; //关闭其他模式的中断源
ET1=0;
ADC_ChannelConfig(ADC_CHANNEL_15,ENABLE); //选择AIN15为ADC采样的输入
while(1)
{
if(T0Flag50ms) //50ms测量1次
{
T0Flag50ms=0;
LedDisp(); //扫描并显示内容
GetADCValue(); //启动ADC转换并求取平均值
Led_DisplayData(ADC_AverageValue%10,ADC_AverageValue/10%10,ADC_AverageValue/100%10,ADC_AverageValue/1000%10); //数码管写入参数
//显示时钟点 DOTDISPLAY:开 DOTUNDISPLAY:关
Led_DisplayDot(DOTUNDISPLAY,DOTUNDISPLAY,DOTUNDISPLAY,DOTUNDISPLAY);
}
}
/*<UserCodeEnd>*//*<SinOne-Tag><133>*/
}
效果图:
说实话,板子刚到时,我都插上试了一下,又拔下来了,重插就有点不太方便,插不到底了。
|