基于89C51的智能转速计.doc

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
基于89C51的智能转速计

基于89C51的智能转速计 ? 转速计是日常生活中比较重要的计量仪表之一,在汽、电子、纺织、造纸等方面有广泛的应用。但是由于过去的技术比较落后转速计一般都使用机械式或机电式的机构。其结构原理如下: 这样的机构虽然原理非常简单,设计也比较方便,但其缺点也是显而易见的。例如: ·机械接触式设计会影响被测件的正常工作,低速运转时会产生较大影响 ·传动式结构使测量器件寿命变短,间接提高了产品价格,影响其市场占有率 ·采用测速电机,增加了整个系统的成本降低了测量精度 ·功率消耗大,无便携性可言 可见,这样的设计给市场推广带来了很大的阻碍,而且降低了测量精度。从而给很难占领市场。 ? 相比之下本文介绍的智能转速计避免了老式转速计的以上缺点。采用光电测量的方法。 结构框图如下: 光电测量部分原理: 检测齿轮上有10个齿均匀分布在轮盘周围,并被直接固定在被测轴上,安装时光电耦合器的发光二极管和光敏三极管正对齿轮上的齿,当被测轴转动时带动检测齿轮转动,光电耦合器通过对检测齿轮上的齿进行耦合从而产生数字脉冲。脉冲经过放大送向单片机的计数端。 单片机部分工作原理: 本文采用的单片机为AT89C51,内有两个定时/计数器。在程序设计时笔者将T0定时/计数器作为1秒定时使用,将T1定时/计数器作对脉冲的计数器使用。单片机计数端在接收到脉冲后对脉冲进行计数,每隔1秒提取TH1和TL1中的计数数据,并进行相应的运算,对16进制数据进行处理,得到10进制数据,送显示缓存进行显示输出。 在对TH1和TL1数据整合处理时使用到了C程序中的结构和共用的概念 union { unsigned int word; struct { unsigned char high; unsigned char low; } bytes; } result; … result.bytes.high=TH1; result.bytes.low=TL1; counter=result.word; 这样一来就可以把两个无符号字符型变量数据按高低字节合并成一个整型变量来处理了。在本文中四位7段LED能够显示0~9999的数值,根据下文提供的计数值与转速之间的关系可确定计数值范围必须达到0~1667,很显然这样的数据通过字节来处理是非常不方便的,但如果通过上述方法转化成整型变量来处理值域变为0~65535,足以容纳0~1667中的任何一个整型数值。 具体计数值与转速之间的数学关系如下: 转速(round/minute)= 并将转速值通过动态扫描电路和程序显示在4位7段LED数码管上。 ? 其优点如下: ·采用单片机控制,精度高,稳定性好,测量范围大 ·功率小,易于提高其便携性能,突出产品优势 ·产品成本低廉,整套系统价格不超过15元人民币 ·抗干扰能力强,可避免外界电磁干扰和其他干扰因素的影响 ·非接触式测量,采用光电器件测量,无连接轴,对被测件无任何影响,提高测量精度 ·电子式测量方法缩小整个系统的体积,使便携式产品的开发更具可操作性 ·非机械式测量方法,采用电子器件,提高设备的寿命,间接降低成本 ? 通过以上比较不难看出智能转速计不管从成本上、精度上还是便携性能上都比原有的机电式设备好得多。从市场开发的角度来看各方面都比较出色。 ? 该产品通过改进还可以做成出租车里程计、水文监测以及气象监测的有关仪器仪表。 #include reg51.h #define uchar unsigned char? #define uint unsigned int uchar code disptab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; uchar code bittab[]={0x01,0x02,0x04,0x08}; uchar data dispbuf[]={0,0,0,0}; void main(void) { void disp(); EA=1;ET0=1; TMOD=0x51; TH0=0x3c;TL0=0xb0; TR0=1;TR1=1; for(;;) { disp(); } } void disp(void) { uchar i,deley; for(i=0;i4;i++) {P1=bittab[i]; P2=disptab[dispbuf[i]]; for(deley=0;deley200;deley++); } } void timer(void) interrupt 1 using 1 { static uchar i; uint counter; union {uint word; struct? {uchar high; uchar low; } byte

您可能关注的文档

文档评论(0)

ligennv1314 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档