版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
电动车霍尔转把检测程序
〃转把电压控制,10端II电压最大是5V,STM是8位AD采样最大可达2的8次等于255〃根据5V
对应于255相应算出
//4.IV对应于210:
//I.5V对应于77;//0.9V对应于46:
//0.2V对应于11;*include<STC12C52.H>
#include<mtrins.h>typedefunsignedmtWORD;
unsignedcharTime」ms=0;"InisTiuielOnis=0;"10msTime_50ms=Oy/50msTinie_500ms2
unsignedchai0;//500nisTime_500ms=0;/Z500inswaitmg5vork_flag=0;〃等待工作标志
unsignedchaialaim_flag=0;〃报警标志state=O;〃工作状态标志state_400ms=0;//400ms
unsignediiitliandeibaiAD=0;〃转把采样数据key=0;〃按键key_count=0;//按下次数
unsignedchaif】ag=0;〃转把插入标志,等待转把转动
unsignedchar
vcidunsignedchaiImjCLK(void);〃初始化函数
vcidunsignedchailnit_isi_ll(void);//定时器初始化函数
vcidunsignedmtimt_isi_tO(void);〃定时器初始化函数
vcidunsignediiitisr_tl(void);
vcidunsignedcharImcADC(void);//adc初始化函数
vcidunsignedchaiwaitiiigwork(void);
vcidunsignedchaihaiideibar_rotate(void)y/转把转动函数
vcidadsample(void)y/ad采样函数
//voidliiitTiinc1PWM(voic);//pwm初始化函数
vciddelayluis(inta);//lins延时函数
vcidDelay(WORDn);
vcidImt_PWM0(v0id);
vcidImtPWM0(void)APWM0初始化函数
CC0N=0,
CM0D=0x04;/7T0溢出做为PWM时钟
CL=0x00,
CH=OxOO;
CCAPOL=OxBA,
CCAPOH=OxBA;
CCAPM0=0x42;
〃CR=1;到报警时去起动P3,、5IIPWMO输出voidInitCLK(void)〃端II及ALXR初始化函
数
//000:fCPU=fMASTER
HCLK_CKDIVR&=-0x10;
//io11初始化
AUXR=Ox80?7定时器O-1T>定时器2-12T
P1M1=0x03;〃0b00000011;〃P1"0为开漏.P『l为准双向,其余为推挽输出;
PC_DDR-OxOO;//PC端11输入
P!MO=OxFD://Ob11111101;0XFD
PlASF=0x01;//PlII为摹拟功能
仰1端口置初值
Pl=0x03;//0b000000U;/.<P1AOADTl'l为按键,P—2为红灯丫1人3为第二绿灯,P10为第
1绿灯,PF5为接通三极管,p卜6为报警;PC_DDR|=Oblllllill;
//PD端[I3,4,5,6位为输入,PD其他端1I为输出
//PD_[)DRI-Ob10000111;
P3Ml=Ox7F;
P3M00x80;
P3=0x00;
〃PCCR1=OXFF;〃推挽输出
//PD.CR1=0bl00101U〃3,5,6位悬浮输入,4为上拉输入
〃端口清零
Z/PC0DR_0DR4=0,〃红灯
//PCODR.0DR5=0;〃第二绿灯
//PC0DR_0DR6=0,"第一绿灯
〃5201-13.25MHz.8MHz,定时Inis;voidIinl_isr_ll(vmd)〃定时器1初始化函数
Timelms=0;
TR1=O;
TM0D=0X10;
TH1=OXFB;
TL1=OXB1;
EA=1;
ET1=1;
TR1=1:〃起动定时器
//TIM<CRl=OxOO:
〃TTM4_IER=0x01;//UpdateIntemiptenabled
//TIM4_EGR=OxOO;
//TIM4_PSCR=Gy/G4分频〃TIM4_ARR=125,
7TIM4ARR=250;
//T1M4_CR1|=0X0iy/cen=1:打开定时器
vcidiniCisi-tO(void)〃定时器0初始化函数做为PWMO的时钟
TROO;
™0D=0x020x10;
THOOxCB;//THO=OxFB;
TH0=0xCB;/.<TH0=0xFB;
/7TR0=l;
)
voidhut_ADC(void)//ADC初始化
(
/\DCDATA=0;
ADC_CONTR=ADC_POWERADC_SPEEDLADC_CHSO;
Delay(2);
}
//voidliiitADC(void)
〃(
//ADCCSR=0x00;»选择通道
///ADCCRl=0x00;.,fADC=INIASTER2
//ADC_CR2=0x08;"数据右对齐Z/ADC_CR1|=0x0iy/打开ADC电源
〃)
//voidImtTimH_PWM(vmd〉7蜂鸣器初始化函数,2k的PWNI方波
//{
//cen=0;Auto-reioadpreloadenable;Counterusedasup-counter
HTIMl_CRl=0x80;
//TIM1CR2=0x00;//Capuire/compaiclegisteiaicnotpieloadcd
//TIM1_RCR=0x00;々Repetitioncountervalue0;
//Tnn_PSCRH=0X00;〃2分频。必须先写高位,再写低位
//TM1_PSCRL=OXO1;
//
〃装载值为2000
//TIM1_ARRH=0X07;
//TIMl_ARRL=0Xd0;//pwm频率2k
//TIM1_CCMR1=0X00;//0C1M:onCC1S:输出
//TIM1CCMR2=0x00;/70CIM:OilCC1S:输出
//TTM1CCMR3=0x68://0ClM:OilCC1S:输出
IlTIMl_CCER2=0x00;
//TM1_CCER1=0x00;
//TTMl_CCR3H=0X03;〃必须先写高位.再写地位
//TIMl_CCR3L=0Xe8//占空比为50%
//TIMl_DTR=0x00;〃死区时间
//TIMLBKR1=0x80〃打开输出使能
//TIM1CR1|=0x0W/cen=l;打开定时器
//
//)
vcidadsample(void)//AD采样
(
staticunsignedinta=0;
,/staticunsignedintb=0j/staticmisignedmtb=0:
AE€_CONTR=ADC_POWER|ADC_SPEEDI.|ADC_CHS01ADC一START;,7ADC_CONTR=OXA
8
_nop_();
_nop_();
_nop_();
_nop_();
while(!(ADC_C0NTR&ADJFLAG));
〃ADC_C0NTR&=、AD0_START;〃关AD转换
ADC_CONTR&6ADC_FLAG;〃j青AD转换结束标志
ADC_C0NTR=ADC_C0NTRADC_ST/\RT;//ADC_C0NTR=0XA8_nop_();
_nop_();
_nop_();
_nop_():
while(!(ADC_C0NIR&ADC_FLAG));
"ADC_C0NTR&=>ADC_START,〃关AD转换
ADC_C0NTR&二、ADJFLAG;〃清AD转换结束标志
〃AD采样,判断电压是否升高
〃选择通道AIN4
!iSET_Channel(ADC_CSR4);
//ADC.CR1|=OxO1小启动g采样
//while(ADIS_0K);/Z采样结束
//ADENDFLAGO;//AD采样标志位清零
//ADC_CR1|=0x0iy/启动AD采样
//while(ADISOK);//采样结束
//ADENDFLAGQ;〃AD采样标志位清零
〃对采样到的数据进行流波
iRa>ADC_DATA)
(
〃当原数据比当前数据大5以上,当做颤动处理,否则计数谊(a-
ADCDATA)<2)
(
haiidcibaiAD=ADCDATA;
)
a=ADCDATA,
elseif(a<=ADCDATA)
〃当前数据比原数据大5以上,当做颤动处理,否则计数1R(ADC_D
ATA-a)<=2)
(
haiiderb2iAD=ADCDATA;
)
a=ADC_DATA;
〃定时器I中断服务程序
vcidisrtl(void)inrermptT1INTNO
{
TH1=OXFB*TH1=OXFB;〃重置初值TLi=0XB1;//TL1=OXAF;〃重置初值
Time_lms=l;〃置1ms到标志
//@fai©mtemiptvoidTIME4ISF(void)
//(
//TlM4_SR&="(0x01);
//Tiine_liiis=1;
)
voidDelay(WORDn)〃延时函数
(
WORDx;
while(n-)
(
x=5000;
wlule(x-);
}
〃主函数
unsignedchaib=0
unsignedchara=0
unsignedchaic=0
unsignedchaid=0
unsignedchare=0
unsignedchaif=0;
unsignedcharg=0;
unsignedchai1=0;
〃初始化
//DisablelSR;
Imt_CLK();〃端II初始化
hut_isr_tlO:〃定时器1初始化,名称不一定要与中断服务程序相同Init_ADC0:〃ADC
初始化
//
TR1=1;〃启动定时器
Imt_PWM0();//1_PWMO;
//EnablelSR;
X\DT_C0NTR=0x20y/C动看门狗并清零看门狗定时器
while(1)
P15=l;〃三极管导通
waitingworkf1ag=1;
if(Tune_1ms)//lms时间片
(
WDT_CONTR=Ox10;〃清零看门狗定时器
Tiine_lms=0;
Time50nis++;
Tiine_10nis"+;
Tiiiie_500nii;2++;
if(Tinie500ms2++>=500)//程序运行指示
(
Time5C0ms2=05
Pl7717;
)
if*401>state_400ms&&state_400ins>0)
(
state_400ms++;
iHTinielOnis>=10)
TiinelOnis=0;
adsampleQ//AD采样
*******
Lf(waituig\voik_flag=!&&state=0)〃转把插入状态,插入
flag=0;
//0.2丫<转把电压vi.OV第一绿灯亮,0.2V
//0.2V对应于41,0.9V对应186
if(lumderbaiAD>11&&handerbarAD<=46)
〃第一绿灯亮
a++:
b=0;
if(a>=30)
a=0;
g==0)
pi4=iy/点亮一绿灯
stare=1;
elseif(1ianderbarAD>46)
(〃大于0.9v红灯亮
//ied_flag=l;
b++;
a=0;
if(b>=50)
b=0;
P12=l;〃点亮红灯alarm_flag=1;〃置报警
状态标志
)
elseif(liandeibarAD<=l〃/.,小于0.2V灯不亮
a=0;
b=0,
state_400ms=0;
Pl2=0;
Pl3=0;
P14=0;
alarmriag=O;
CR=0;//TTM1_CCER2=OXOO;
Pl6=0;
elseif(\vaitiiig\vorkflag=!&&state=1)〃转把转动状
态
if(liandeibaiAD〈=ll)〃如果转动时蓦地拔掉,跳入插入状
state=O
t
elseif(state_400ms<400&&state_400ins>0)
if(hauderbarAD>=210)
//当state_400ms小于0.5s,
handerbai-AD大于4.IV
//846对应于4.IV
牡+;
c=0:
d=0;
iRf>=10j
仁0;
state400ms=0;
P13=l;
〃PC0DR_0DR5=l;〃第二绿灯亮
Pl2=0;"
PC0DR_0DR4=0;//关红灯
CR=O;//Pl6=0
〃TlMl_CCER2=OxOO,〃关报警
P16=0:
elseif(haiiderbarAD<210)
{仁0:}
〃当state400nis大于0.5s,转把还没达到4.IV
elseif(state_400ins>=400)
if(handerbaiAD<210)
{
C++;
if(c>=10)
(
c=0;pi2=iy/
PC3DR_0DR4=1;〃红灯亮
CR=〃TIMi_CCER2=0x01;〃蜂鸣器报警
TRO=1;
P16=l;
)
else
if(handerbaiAD>210)
{c=0;}
//1.5V对应77(310);
elseif(handerbarAD>=77〉7当转把AD电压大于1.5V,开
始0.5秒jishi
(
d++;
iftflag-0&&d==10)〃转把插入与
d=10
(
d=0,
flag=1;
state400ms=1;
elseif(handerbaiAD<7/?//当小于L5V,将d清零{
d=0:
〃按键处理
key=P11;//key=PDIDRIDR4;
氓key==0;
key_count++;
iRkey_2oiuit>=3)
j
key_count=0;
if(key=0)
f
state=0;
state400nis=0;
Pl1=0;//PC0DR_0DR4=0;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 晋中市左权县2025-2026学年第二学期六年级语文第五单元测试卷部编版含答案
- 玉林市兴业县2025-2026学年第二学期四年级语文第四单元测试卷(部编版含答案)
- 酒泉地区敦煌市2025-2026学年第二学期六年级语文第五单元测试卷部编版含答案
- 伊犁哈萨克自治州巩留县2025-2026学年第二学期三年级语文期中考试卷(部编版含答案)
- 池州市石台县2025-2026学年第二学期五年级语文第五单元测试卷(部编版含答案)
- 深度解析(2026)《AQT 3001-2021加油(气)站油(气)储存罐体阻隔防爆技术要求》
- 识字2传统节日 导学单
- 19 肥皂泡 +公开课一等奖创新教案+素材
- 数字孪生技术与应用专业知识试题及答案
- 人工智能基础理论知识考核题目及答案
- 室分业务发展操作指导手册(试行)
- 水泥厂安全事故培训内容课件
- 上市公司再融资困境深度剖析与突围路径探寻
- 乌兹别克斯坦国家介绍
- 第3课 中华文明的起源-2025-2026学年七年级历史上册(统编版2024)
- 2025高考历史全国I卷真题试卷(含答案)
- DBJT15-213-2021 城市桥梁隧道结构安全保护技术规范
- 2025届天津市南开区高三二模地理试题 及答案
- 知道智慧树名企之魂满分测试答案
- 医院十八项核心制度
- 临床标本处理与纯化技术
评论
0/150
提交评论