/*************************************** **文件名称:main.c **外部晶振:8MHz **CPU型号:stm8s105s4 **端口说明:LED-------PD3(TIM2_CC2) ** 电位器----PB3(AIN3) ****************************************/ #include"stm8s105c_s.h" unsigned int AD_Value; // AD转换后的值存放在这里 void CLK_Init(void) { CLK_CKDIVR &=~(0x10); // fHSI = fHSI RC/2=8MHz CLK_CKDIVR |=0x01; /* fCPU = fMASTER/2=1MHz 默认上电后,主时钟使用HSI RC/8=2MHz */ } void GPIO_Init(void) { PD_DDR |=0x08; PD_CR1 |=0x08; // 配置PD3为推挽输出 PD_CR2 =0x00; // 输出速率=2MHz } void TIM2_Init(void) { TIM2_PSCR =0x00; // TIM2不分频 TIM2_CR1 |=0x01; // 使能TIM2计数器 TIM2_ARRH =0x00; TIM2_ARRL =0xFF; // 计数重装值=256 // 控制LED的亮度 TIM2_CCR2 =0x00; TIM2_CCMR2 |=0x70; // TIM2配置为PWM2模式 TIM2_CCER1 |=0x30; // CC通道配置为输出使能、低有效 } void ADC_Init(void) { ADC_CR1 =0x00; // fADC = fMASTER/2,复位即进入低功耗模式 ADC_CR2 =0x00; // 默认左对齐 ADC_CSR =0x03; // AD输入通道 =PB3(AIN3) } void LED_Control(void) { unsigned int i; ADC_CR1 |=0x01; // 开启ADC i=6; while(i--); ADC_CR1 |=0x01; // 从低功耗模式中唤醒ADC while(!(ADC_CSR &0x80)); // 等待转换完成 AD_Value =((((unsigned int)ADC_DRH)<<2)+ADC_DRL); // 结果送入AD_Value缓冲区 TIM2_CCR2H =0x00; TIM2_CCR2L =(unsigned char)(AD_Value>>2); // 结果由PD3口送出至LED } void main(void) { _asm("sim"); CLK_Init(); GPIO_Init(); TIM2_Init(); ADC_Init(); _asm("rim"); while(1) { LED_Control(); } }
收藏0 举报
本版积分规则 发表回复 回帖并转播 回帖后跳转到最后一页
人才类勋章
时间类勋章
发帖类勋章
等级类勋章
233
3529
11
扫码关注 21ic 官方微信
扫码关注嵌入式微处理器
扫码关注电源系统设计
扫码关注21ic项目外包
扫码浏览21ic手机版
本站介绍 | 申请友情链接 | 欢迎投稿 | 隐私声明 | 广告业务 | 网站地图 | 联系我们 | 诚聘英才
京公网安备 11010802024343号