测速的c语言程序,51单片机测速c程序

#include

#define uint  unsigned int

#define ulong unsigned long

#define uchar unsigned char //定义一下方便使用

sbit d0=P2^0; // 数度公共端

sbit d1=P2^1; // 数度公共端

sbit d2=P2^2; // 数度公共端

sbit d3=P2^3; // 数度公共端

uchar code  ledp[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0xa0};//数字显示 //数字显示

uchar code ledpd[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10}; //带小数点的数字显示

uint l,c,x,x1;

uint a8;  //进入循环的窗口

uint i;    //时间计数

delay(uint t)   //时间软件延时函数

{

uint z,x;

for(z=0;z

for(x=0;x<120;x++);

}

void int1() interrupt 0    //0外中断函数 接P3,2

{ x1=1;

}

void int0() interrupt 2   //2外中断函数 接P3,3        子弹先穿过P3,3

{

x=1;

}

void main(void) // 主程序

{

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
抱歉,由于涉及到版权问题,我无法提供该文档的代码。但是,以下是一个简单的51单片机测速程序的示例代码,仅供参考: ``` #include <reg52.h> #include <intrins.h> sbit motor_pin = P1^0; // 电机控制引脚,此处为P1.0 sbit sensor_pin = P3^2; // 光电编码器输出引脚,此处为P3.2 unsigned char count = 0; // 计数器,记录电机转动次数 unsigned char speed = 0; // 电机转速,单位:r/min void delay(unsigned int t) // 延时函数 { unsigned int i, j; for (i = t; i > 0; i--) for (j = 110; j > 0; j--); } void main() { TMOD = 0x05; // 设置定时器0为模式1,定时器1为模式0 TH0 = 0x00; // 定时器0的初始计数值为0 TL0 = 0x00; TH1 = 0x00; // 定时器1的初始计数值为0 TL1 = 0x00; ET0 = 1; // 允许定时器0中断 TR0 = 1; // 启动定时器0 EA = 1; // 允许总中断开关 while (1) { motor_pin = 1; // 电机开始转动 delay(1000); // 延时1秒钟,让电机转动一定的时间 motor_pin = 0; // 电机停止转动 speed = count * 60; // 计算电机转速 count = 0; // 计数器清零 // 将电机转速通过串口输出 // ... } } void timer0_isr() interrupt 1 // 定时器0中断服务函数 { static bit sensor_state = 0; // 光电编码器状态,0表示未检测到光电信号,1表示检测到光电信号 TH0 = 0x4C; // 定时器0的重载值,使定时器计数1ms TL0 = 0x00; if (sensor_pin == 0 && sensor_state == 1) // 电机转动一圈 { count++; // 计数器加1 sensor_state = 0; // 光电编码器状态置为0 } else if (sensor_pin == 1 && sensor_state == 0) // 电机转动未满一圈 sensor_state = 1; // 光电编码器状态置为1 } ``` 上述代码实现的功能为通过光电编码器测量电机转速。在程序中,通过定时器0产生1ms的定时中断,检测光电编码器输出引脚的状态,当检测到从高电平到低电平的跳变时,表示电机转动一圈,计数器加1;反之,表示电机转动未满一圈。通过计算计数器的值,即可得到电机的转速。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值