单片机C语言实现红外脉冲计数计算车速

c\u8bed\u8a00\u7f16\u5199\u5355\u7247\u673a\u8ba1\u6570\u8109\u51b2

#include
#define uchar unsigned char
#define uint unsigned int
uint times,freq;
sbit p35=P3^5;
main()
{
TMOD=0x01;
TH0=0;
TL0=0;
while(1)
{
while(p35);
TR0=1;
while(!p35);
while(p35);
TR0=0;
times=TH0*256+TL0;
freq=1000000/times;
//\u5904\u7406\u9891\u7387\uff0c\u81ea\u5df1\u505a
}
}

\u5355\u7247\u673a\u7684\u7cfb\u7edf\u65f6\u95f4\u4e3a\u6676\u632f\u9891\u7387\u768412\u5206\u4e4b\u4e00\uff0c\u5982\u679c\u6676\u632f\u662f12\u5146\u8d6b\u5179\uff0c\u90a3\u4e48\u5355\u7247\u673a\u6700\u5c0f\u7cfb\u7edf\u65f6\u95f4\u5c31\u662f1us\uff0c\u6240\u4ee5\u53ef\u4ee5\u7528_nop_();\u6307\u4ee4\u8fbe\u5230\u7cbe\u786e\u5ef6\u65f6\uff0c\u8fd9\u6761\u8bed\u53e5\u6267\u884c1\u6b21\u7cfb\u7edf\u65f6\u95f4\uff0c\u5177\u4f53\u7684\u767e\u5ea6\u4e0b\u5c31\u884c\u4e86\u3002

\u81f3\u4e8e\u4f60\u8bf4\u76841s\uff0c\u65f6\u95f4\u6bd4\u8f83\u957f\uff0c\u4e0d\u9002\u5408\u7528\u5b9a\u65f6\u5668\uff0c\u90a3\u4e48\u53ef\u4ee5\u7528\u5d4c\u5957\u5faa\u73af\u8bed\u53e5\uff0cfor\u3001while\u3001do while\uff0c\u8981\u6ce8\u610f\u5faa\u73af\u65f6\u4f7f\u7528\u4e0d\u540c\u7684\u53d8\u91cf\u7c7b\u578b\uff0c\u6240\u6d88\u8017\u7684\u65f6\u95f4\u4e5f\u4e0d\u540c\u3002\u767e\u5ea6\u4e0bproteus\uff0c\u8fd9\u4e2a\u662f\u80fd\u5c06keil\u751f\u6210\u7684c\u5de5\u7a0b\u6587\u4ef6\u8fdb\u884c\u8f6f\u4ef6\u4eff\u771f\u7684\u4e00\u4e2a\u8f6f\u4ef6\uff0c\u548cmultisim\u4e00\u6837\u5f88\u7b80\u5355\uff0c\u91cc\u9762\u6709\u793a\u6ce2\u5668\uff0c\u7528\u793a\u6ce2\u5668\u770b\u4eff\u771f\u65f6\u95f4\uff0c\u81ea\u5df1\u7528\u5faa\u73af\u548c_nop_()\u6307\u4ee4\u51d11\u79d2\u51fa\u6765\u5c31\u884c\u4e86

以51单片机 12MHz晶振情况下为例

#define STAYTIME 781//定时200ms 其他时间可以自己算
int tcount,p_count;
double speed;
void t0_init(void)
{
TH0=0x00;
TL0=0x00;
TMOD|=0x02;
ET0=1;
TR0=1;
IT0=1;//外部中断下降沿触发
EX0=1;
}
void pulse_int(void) interrupt 0
{
p_count++;
}
void t0_int(void) interrupt 1
{
tcount++;
if(tcount>STAYTIME){
tcount=0;
EX0=0;//关输入脉冲的中断
ET0=0;
speed=p_count/20;//单位就是 转/秒
//下面重新开始
p_count=0;
ET0=1;
EX0=1;
}
}
}
void main()
{
t0_init();
EA=1;
while(1);

}

每个脉冲,代表3.6度。
每一百个,360度,行走了多远?

码盘应该使用霍尔传感器的吧,测速一般是霍尔传感器,你使用红外试一下好用不好用。

  • 鍗曠墖鏈篊璇█瀹炵幇绾㈠鑴夊啿璁℃暟璁$畻杞﹂
    绛旓細浠51鍗曠墖鏈 12MHz鏅舵尟鎯呭喌涓嬩负渚 define STAYTIME 781//瀹氭椂200ms 鍏朵粬鏃堕棿鍙互鑷繁绠 int tcount,p_count;double speed;void t0_init(void){ TH0=0x00;TL0=0x00;TMOD|=0x02;ET0=1;TR0=1;IT0=1;//澶栭儴涓柇涓嬮檷娌胯Е鍙 EX0=1;} void pulse_int(void) interrupt 0 { p_count++;} vo...
  • 鍏充簬鐢ㄤ竴涓51鍗曠墖鏈瀵鑴夊啿璁℃暟鐨勭▼搴
    绛旓細杩欐槸鍒氱紪鐨勭▼搴忥紒浣犵浉搴旂殑鎶璁℃暟鎸夐挳鎹㈡垚绾㈠鎺ユ敹瀵圭鏉ヤ綔涓鸿鏁版寜閽紝浣庣數棰戣涓娆℃暟锛佸氨鏄骞炽丳3.0瑕佷粠楂樺彉涓哄湴灏辫涓娆℃暟锛佹垜娌℃湁鐢ㄨ繃绾㈠瀵圭鎵浠ュ彧鑳借杩欎箞澶氫簡锛佹垜鐢ㄧ殑鏄8951锛屽紩鑴氫竴鏍风殑锛丳ROTEUS宸茬粡浠跨湡杩囦簡锛乻tart:mov 50h,#00h mov 51h,#00h mov 52h,#00h mov r1,#00h ...
  • 51鍗曠墖鏈浣跨敤T0鍜孴1澶栭儴鑴夊啿璁℃暟,C璇█濡備綍缂栫▼?
    绛旓細浣跨敤T0鍜孴1澶栭儴鑴夊啿璁℃暟锛屾帶鍒朵袱涓數鏈猴紝鍒1700涓剦鍐茬數鏈哄仠姝紝锛嶏紞缁熻鑴夊啿涓暟锛岀敤澶栭儴涓柇鏇村ソ銆傦紞锛峊0鍜孴1锛岀暀鐫瀹氭椂鐢ㄣ傜敤鍥涗釜鎸夐敭鎺у埗锛屾寜閿1鎺у埗鐢垫満姝h浆锛屾寜閿2鎺у埗鐢垫満鍙嶈浆锛屾寜閿3鎺у埗鐢垫満1姝h浆锛屾寜閿4鎺у埗鐢垫満2姝h浆锛屾庝箞鐢–璇█缂栫▼锛燂紞锛嶇紪绋嬪墠锛岃鍏堣璁″嚭鏉ョ數璺
  • 鍩轰簬鍗曠墖鏈鐨鑴夊啿瀹氭椂璁℃暟鍣C璇█绋嬪簭
    绛旓細unsigned int ui_n = 0;void main(void){ TR0 = 1; //鍚姩 IE = 0x82;while(1);} void T0_INT(void) interrupt 1 { ui_n++;if(ui_n == 7324) ui_n = 0;}
  • 鍗曠墖鏈鸿剦鍐茶鏁闂(C璇█)
    绛旓細璁捐鏁板间负num num=0;P0^0=jishu;jishu=1;妫娴嬩綆鐢靛钩IO瑕佽缃珮 main(){ if(jishu==0){ num++;whlie(jishu==0);涓轰簡闃叉P0^0涓鐩翠负浣庣數骞硁um涓鐩村湪鍔 } if(num==9990){ P0^1=0;num=0;缁х画涓嬩竴杞璁℃暟 } }
  • 鐢鍗曠墖鏈瀵瑰鏉鑴夊啿璁℃暟(C璇█绋嬪簭)
    绛旓細瑕佽瀹16浣嶅畾鏃惰鏁板櫒T0鎴朤1锛屽伐浣滄柟寮1銆2銆3锛璁℃暟鍊兼渶澶т负65536=0xFFFFH锛屽嵆缁欓珮浣庝綅鍒嗗埆瑁呭叆璁℃暟鍒濆鍊糡H0(TH1)=FFH,TL0=FFH,鍙涓轰腑鏂嚱鏁帮紝褰撹鏁版孩鍑哄悗鑷姩寮曞彂涓柇锛屽湪绋嬪簭杩愯鏃惰皟鐢ㄥ嵆鍙瘇閿洏璁剧疆鍒板閮芥湁锛屾悳涓涓嬪氨琛屼簡
  • 51鍗曠墖鏈篶璇█鑴夊啿璁℃暟骞舵樉绀虹▼搴
    绛旓細TMOD=0x05锛汿H0=0锛汿L0=0锛汿R0=1锛泈hile锛1锛墈 a=TH0*256+TL0锛沝isplay锛坅锛夛紱}
  • 鍗曠墖鏈瀹氭椂/璁℃暟鍣ㄥ疄楠--鑴夊啿璁℃暟鍣
    绛旓細杩欐槸涓畝鏄撻鐜囪锛岀▼搴忓涓:;--- ORG 0000H JMP START ORG 000BH JMP T0_INT ;--- START:MOV TMOD, #51H ;/*01010001 T1璁℃暟,T0瀹氭椂*/ MOV TH0, #HIGH(65536 - 50000) ;50ms@12MHz MOV TL0, #LOW (65536 - 50000)MOV TH1, #0 MOV TL1, #0 SETB TR0 SETB...
  • 鍗曠墖鏈鎺ユ敹澶栨潵鑴夊啿,璁℃暟绋嬪簭(C璇█)
    绛旓細51鍗曠墖鏈鏄湁璁℃暟鍔熻兘鐨勶紝缃柟寮1鏈澶у彲浠ヨ鏁65536涓鑴夊啿銆備絾瑕佹敞鎰忚剦鍐查鐜囪灏忎簬鏅舵尟棰戠巼鐨1/24 濡傛灉鍙鏁扮殑璇濓紝涓嶇敤鎵撳紑涓柇鍔熻兘锛屽彧瑕佸彇鍑篢H0鍜孴L0鐨勫煎苟鎶婂畠娓呴浂鍗冲彲銆傚垵濮嬪寲绋嬪簭锛歷oid init(){ TMOD=0x05;//鏂瑰紡涓锛16浣嶈鏁板櫒 TH0=0;TL0=0;TR0=1;//鍚姩璁℃暟鍣 } 妤间笅鐨勭▼搴忔槸瀹氭椂...
  • c璇█缂栧啓鍗曠墖鏈鸿鏁拌剦鍐
    绛旓細include<reg51.h> define uchar unsigned char define uint unsigned int uint times,freq;sbit p35=P3^5;main(){ TMOD=0x01;TH0=0;TL0=0;while(1){ while(p35);TR0=1;while(!p35);while(p35);TR0=0;times=TH0*256+TL0;freq=1000000/times;//澶勭悊棰戠巼锛岃嚜宸卞仛 } } ...
  • 扩展阅读:台达plc0.5秒脉冲 ... 西门子plc脉冲计数器 ... 51单片机脉冲计数器 ... 脉冲计数器接线方式 ... 西门子1200自带秒脉冲 ... 脉冲计数器实验流程图 ... 脉冲计数器芯片 ... 脉冲控制仪视频教程 ... 脉冲计数定时计数器实验 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网