单片机测量转速代码.doc

上传人:工**** 文档编号:551824841 上传时间:2022-11-22 格式:DOC 页数:8 大小:49.01KB
返回 下载 相关 举报
单片机测量转速代码.doc_第1页
第1页 / 共8页
单片机测量转速代码.doc_第2页
第2页 / 共8页
单片机测量转速代码.doc_第3页
第3页 / 共8页
单片机测量转速代码.doc_第4页
第4页 / 共8页
单片机测量转速代码.doc_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《单片机测量转速代码.doc》由会员分享,可在线阅读,更多相关《单片机测量转速代码.doc(8页珍藏版)》请在金锄头文库上搜索。

1、#include #define uchar unsigned char #define uint unsigned int #define ulong unsigned long#define LED_DAT P0#define LED_ON() P30 = 0;#define LED_OFF() P30 = 1;/sbit out=P14;sbit beep=P23;sbit LED_SEG0 = P27;sbit LED_SEG1 = P26;sbit LED_SEG2 = P25;sbit LED_SEG3 = P24;/sbit pin_SpeedSenser = P35; /光电传

2、感器信号接在T1上#define TIME_CYLC 100 /12M晶振,定时器10ms 中断一次 我们1秒计算一次转速 / 1000ms/10ms = 100 4444#define PLUS_PER 6 /码盘的齿数 ,这里假定码盘上有6个齿,即传感器检测到6个脉冲,认为1圈 4444444444#define K 74.0 /校准系数uchar low=40;uchar high=55;uchar lowset2;uchar highset2;uint speed=0;uchar once=0;unsigned char code table=0x28,0xEB,0x32,0xA2,0

3、xE1,0xA4,0x24,0xEA,0x20,0xE0; uchar data Disbuf4;/ 显示缓冲区 uint Tcounter = 0; /时间计数器bit Flag_Fresh = 0; / 刷新标志 bit Flag_clac = 0; /计算转速标志 bit Flag_Err = 0; /超量程标志 unsigned char key;unsigned char KeyScan(void);void Delay_ms(unsigned int n);void Beep(void);/在数码管上显示一个四位数 void DisplayFresh();/计算转速,并把结果放入数

4、码管缓冲区 void ClacSpeed();/初始化定时器T0void init_timer0();/初始化定时器T1void init_timer1();/延时函数 void Delay(uint ms);void it_timer0() interrupt 1 /* interrupt address is 0x000b */TF0 = 0; /d定时器 T0用于数码管的动态刷新 /TH0 = 0xe0; /* init values */cTL0 = 0x00; Flag_Fresh = 1; Tcounter+; if(TcounterTIME_CYLC) Flag_clac = 1

5、;/周期到,该重新计算转速了 void it_timer1() interrupt 3 /* interrupt address is 0x001b */TF1 = 0; /定时器T1用于单位时间内收到的脉冲数 /要速度不是很快,T1永远不会益处Flag_Err = 1; /如果速度很高,我们应考虑另外一种测速方法,:脉冲宽度算转速 void main(void)uchar i=0;Disbuf0 = 0; /开机时,初始化为0000Disbuf1 = 0; Disbuf2 = 0;Disbuf3 = 0;init_timer0();init_timer1();while(1)key=KeyS

6、can();if(key!=0xff)/有键按下 if(key=10) while(KeyScan()!=0xff);/手离开 for(i=0;i2;i+) while(KeyScan()=0xff);lowseti=KeyScan();while(KeyScan()!=0xff); low=lowset0*10+lowset1;while(KeyScan()!=12)Disbuf2=lowset0; Disbuf3=lowset1;DisplayFresh(); if(key=11) while(KeyScan()!=0xff);/手离开 for(i=0;i2;i+) while(KeySc

7、an()=0xff);highseti=KeyScan();while(KeyScan()!=0xff); high=highset0*10+highset1;while(KeyScan()!=12)Disbuf2=highset0; Disbuf3=highset1;DisplayFresh(); if(Flag_Fresh) Flag_Fresh = 0; DisplayFresh(); / 定时刷新数码管显示 if(Flag_clac) Flag_clac = 0; ClacSpeed(); /计算转速,并把结果放入数码管缓冲区if(once) if(speedhigh) beep=0;

8、LED_ON();/out=0;else beep=1;LED_OFF();/out=1; else beep=1;/out=1; Tcounter = 0;/周期定时 清零 TH1=TL1 = 0x00;/脉冲计数清零 if(Flag_Err) /超量程处理 /数码管显示字母EEEE Disbuf0 = 0x9e; /开机时,初始化为0000 Disbuf1 = 0x9e; Disbuf2 = 0x9e; Disbuf3 = 0x9e; while(1) DisplayFresh();/不再测速 等待复位i /在数码管上显示一个四位数void DisplayFresh()P2 |= 0xF0

9、;LED_SEG0 = 0;LED_DAT = tableDisbuf0;Delay(1);P2 |= 0xF0;LED_SEG1 = 0;LED_DAT = tableDisbuf1;Delay(1);P2 |= 0xF0;LED_SEG2 = 0;LED_DAT = tableDisbuf2;Delay(1);P2 |= 0xF0;LED_SEG3 = 0;LED_DAT = tableDisbuf3;Delay(1);P2 |= 0xF0;/计算转速,并把结果放入数码管缓冲区void ClacSpeed()uint PlusCounter;PlusCounter = TH1*256 +

10、TL1;speed = (K/100)*(PlusCounter/PLUS_PER);/K是校准系数,如速度不准,调节K的大小Disbuf0 = (speed/1000)%10; Disbuf1 = (speed/100)%10; Disbuf2 = (speed/10)%10;Disbuf3 = speed%10; if(speed!=0) once=1; else once=0;/初始化定时器T0void init_timer0()TMOD &= 0xf0; /定时10毫秒 /* Timer 0 mode 1 with software gate */TMOD |= 0x01; /* GA

11、TE0=0; C/T0#=0; M10=0; M00=1; */TH0 = 0xC0; /* init values */TL0 = 0x00; ET0=1; /* enable timer0 interrupt */EA=1; /* enable interrupts */TR0=1; /* timer0 run */延时函数 void Delay(uint ms)uchar i;while(ms-) for(i=0;i100;i+);/初始化定时器T1void init_timer1()TMOD &= 0x0F; /* Counter 1 mode 1 with software gate

12、 */TMOD |= 0x50; /* GATE0=0; C/T0#=1; M10=0; M00=1; */TH1 = 0x00; /* init values */TL1 = 0x00; ET1=1; /* enable timer1 interrupt */EA=1; /* enable interrupts */TR1=1; /* timer1 run */unsigned char KeyScan(void) unsigned char KeyValue=0;unsigned char Scan_Row;unsigned char Scan_Column;P1=0x0F; Scan_Row=P1; if(Scan_Row&0x0F)!=0x0F)Delay_ms(20);Scan_Row=P1;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号