电子产业一站式赋能平台

PCB联盟网

搜索
查看: 2977|回复: 1
收起左侧

做的测转速的转速上限才11520

[复制链接]

657

主题

1025

帖子

5598

积分

四级会员

Rank: 4

积分
5598
发表于 2022-8-1 14:36:49 | 显示全部楼层 |阅读模式
网上找的程序,自己修改了一下。但是测出的速度最快也就11520转,716空心杯转速标注34000根本测不出来,不知道是程序问题,还是红外模块的问题,求高人
#include  "REG52.H"    //包含单片机寄存器的头文件

#include  "intrins.h" //包含_nop_()函数定义的头文件

unsigned int v;       //储存电机转速

unsigned char count;  //储存定时器T0中断次数

bit flag;                                    //计满1秒钟标志位

void delay1ms()                                                           //函数功能:延时1ms

{                                                                                                     //(3j+2)*i=(30×3+2)×10=920

unsigned char i,j;                               //对11.0592MHz的晶振来说大约是1ms

for(i=0;i<10;i++)

for(j=0;j<30;j++)

;

}

void delay(unsigned char n)   //延时n个毫秒

{

unsigned char i;

for(i=0;i;i++)

delay1ms();

}



做的测转速的转速上限才11520-1.jpg
回复

使用道具 举报

600

主题

954

帖子

5061

积分

四级会员

Rank: 4

积分
5061
发表于 2022-8-1 14:37:06 | 显示全部楼层
void change(unsigned char a)              //数字对应段码的转换

{              if(a==0) P0=0xc0;

if(a==1) P0=0xf9;

if(a==2) P0=0xa4;

if(a==3) P0=0xb0;

if(a==4) P0=0x99;

if(a==5) P0=0x92;

if(a==6) P0=0x82;

if(a==7) P0=0xf8;

if(a==8) P0=0x80;

if(a==9) P0=0x90;

}

void display_val(unsigned int x) //显示数值

{

unsigned char i,j,k,l,q,w;     //i,j,k,l分别储存转速的千位、百位、十位和个位

w=x/100000;

q=x/10000;

i=x/1000;         //取千位

j=(x%1000)/100;   //取百位

k=(x%100)/10;     //取十位

l=x%10;           //取个位
P1=32;                                          //选3号数码管

change(w);

delay1ms();

P1=16;                                          //选4号数码管

change(q);

delay1ms();

P1=8;                                          //选3号数码管

change(i);

delay1ms();

P1=4;                                          //选4号数码管

change(j);

delay1ms();

P1=2;                               //选5号数码管

change(k);

delay1ms();

P1=1;                                          //选6号数码管

change(l);

delay1ms();

}

void main(void)                                          //主函数

{

TMOD=0x51;  //定时器T1工作于计数模式1,定时器T0工作于计时模式1;

TH0=0x10;    //定时器T0的高8位设置初值,每66.67ms产生一次中断

TL0=0;       //定时器T0的低8位设置初值

EA=1;                     //开总中断

ET0=1;                    //定时器T0中断允许

TR0=1;                    //启动定时器T0
回复 支持 反对

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


联系客服 关注微信 下载APP 返回顶部 返回列表