利用电位器改变流水灯速度控制程序
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
PC_ODR=0x40;
}else if(y==2){
PC_ODR=0x20;
}else if(y==3){
PC_ODR=0x10;
}else if(y==4){
PC_ODR=0Baidu Nhomakorabea08;
}else{
y=0;PC_ODR=0x80;
}
y++;
mode=0;
}
}
{
Delay(1000);
mode++;
}
}
}
@far @interrupt void TIM1_UPD_IRQ (void)
{
TIM1_SR1&=0xFE;//更新事件清零
if (mode == 1)
{
if (x==0){
PC_ODR=0x08;
}else if(x==1){
PC_ODR=0x10;
while(!(ADC_CSR&0x80)); //等待转换结束
ADC_CSR &= ~0x80; //清除转换结束标志
AD_value=((((unsigned int)ADC_DRH)<<2)+ADC_DRL);
TIM1_RCR=AD_value;
if(key_mode1&!key_mode2)
}else if(x==2){
PC_ODR=0x20;
}else if(x==3){
PC_ODR=0x40;
}else if(x==4){
PC_ODR=0x80;
}else{
x=0;PC_ODR=0x08;
}
x++;
}
else{
if (y==0){
PC_ODR=0x80;
}else if(y==1){
main()
{
bit key_mode1 = 1;
bit key_mode2 = 1;
PORT_INI();
CLK_ICKR|=0x01; //开启内部HSI
while(!(CLK_ICKR&0x02));//HSI准备就绪
CLK_SWR=0xe1; //HSI为主时钟源
CLK_CKDIVR=0x00;
ADC_CR2 = 0x00; //非外部触发数据右对齐
ADC_CSR = 0x05; //禁止转换结束中断设置转换通道
ADC_CR1 |= 0x01; //第一次写1是从低功耗模式唤醒
while (1)
{
key_mode1 = key_mode2;
key_mode2= keymode;
ADC_CR1 |= 0x01; //启动AD转换
TIM1_CNTRH = 0X00;
TIM1_CNTRL = 0X00;
TIM1_EGR |=0X01; //软件产生更新事件,让预分频立即有效。
TIM1_SR1 = 0;//状态寄存器
TIM1_CR1 |=0X01;
//TIM1_RCR=0;
ADC_CR1 = 0x00; //分频系数为4单次转换模式
_asm("rim");//开总中断
TIM1_CR1 = 0b10000100;
TIM1_PSCRH = 0x00; //定时时间0.6S
TIM1_PSCRL = 1; //20分频
TIM1_ARRH = 0xEA;
TIM1_ARRL = 0x60;//自动重装载寄存器
TIM1_IER|=0X01; //中断使能寄存器
#include<stm8s103f3p.h>
#include<config.h>
#include<function.c>
#include<init.c>
unsigned int x;
unsigned int y;
unsigned int mode = 1;
unsigned int AD_value;
}else if(y==2){
PC_ODR=0x20;
}else if(y==3){
PC_ODR=0x10;
}else if(y==4){
PC_ODR=0Baidu Nhomakorabea08;
}else{
y=0;PC_ODR=0x80;
}
y++;
mode=0;
}
}
{
Delay(1000);
mode++;
}
}
}
@far @interrupt void TIM1_UPD_IRQ (void)
{
TIM1_SR1&=0xFE;//更新事件清零
if (mode == 1)
{
if (x==0){
PC_ODR=0x08;
}else if(x==1){
PC_ODR=0x10;
while(!(ADC_CSR&0x80)); //等待转换结束
ADC_CSR &= ~0x80; //清除转换结束标志
AD_value=((((unsigned int)ADC_DRH)<<2)+ADC_DRL);
TIM1_RCR=AD_value;
if(key_mode1&!key_mode2)
}else if(x==2){
PC_ODR=0x20;
}else if(x==3){
PC_ODR=0x40;
}else if(x==4){
PC_ODR=0x80;
}else{
x=0;PC_ODR=0x08;
}
x++;
}
else{
if (y==0){
PC_ODR=0x80;
}else if(y==1){
main()
{
bit key_mode1 = 1;
bit key_mode2 = 1;
PORT_INI();
CLK_ICKR|=0x01; //开启内部HSI
while(!(CLK_ICKR&0x02));//HSI准备就绪
CLK_SWR=0xe1; //HSI为主时钟源
CLK_CKDIVR=0x00;
ADC_CR2 = 0x00; //非外部触发数据右对齐
ADC_CSR = 0x05; //禁止转换结束中断设置转换通道
ADC_CR1 |= 0x01; //第一次写1是从低功耗模式唤醒
while (1)
{
key_mode1 = key_mode2;
key_mode2= keymode;
ADC_CR1 |= 0x01; //启动AD转换
TIM1_CNTRH = 0X00;
TIM1_CNTRL = 0X00;
TIM1_EGR |=0X01; //软件产生更新事件,让预分频立即有效。
TIM1_SR1 = 0;//状态寄存器
TIM1_CR1 |=0X01;
//TIM1_RCR=0;
ADC_CR1 = 0x00; //分频系数为4单次转换模式
_asm("rim");//开总中断
TIM1_CR1 = 0b10000100;
TIM1_PSCRH = 0x00; //定时时间0.6S
TIM1_PSCRL = 1; //20分频
TIM1_ARRH = 0xEA;
TIM1_ARRL = 0x60;//自动重装载寄存器
TIM1_IER|=0X01; //中断使能寄存器
#include<stm8s103f3p.h>
#include<config.h>
#include<function.c>
#include<init.c>
unsigned int x;
unsigned int y;
unsigned int mode = 1;
unsigned int AD_value;