51单片机风扇转动c语言代码,基于51单片机的c语言程序 电机转速测量与PWM控制...

【实例简介】

部分源程序如下:

//=================测速计数处理===================================

void timer1()interrupt 3

{time1++;}

//+++++++++++++++++测速转换处理+++++++++++++++++++++++

void int1()interrupt 2

{ long kA=0;

uchar temp;

TR1=0;

if(SP_bit==0)

{TR1=1;SP_bit=1;}

else

{ kA=time1*65536+TH1*256+TL1;

【实例截图】

【核心代码】

电机转速测量与PWM控制

└── 电机转速测量与PWM控制

├── keil

│   ├── 24C02.h

│   ├── include

│   │   ├── 24C02.h

│   │   └── LCD1602.h

│   ├── LCD1602.h

│   ├── source

│   │   └── 直流风扇电机转速测量与PWM控制.c

│   ├── STARTUP.A51

│   ├── STARTUP.LST

│   ├── STARTUP.OBJ

│   ├── 直流风扇电机转速测量与PWM控制

│   ├── 直流风扇电机转速测量与PWM控制.hex

│   ├── 直流风扇电机转速测量与PWM控制.lnp

│   ├── 直流风扇电机转速测量与PWM控制.lst

│   ├── 直流风扇电机转速测量与PWM控制.M51

│   ├── 直流风扇电机转速测量与PWM控制.obj

│   ├── 直流风扇电机转速测量与PWM控制.Opt

│   ├── 直流风扇电机转速测量与PWM控制_Opt.Bak

│   ├── 直流风扇电机转速测量与PWM控制.plg

│   ├── 直流风扇电机转速测量与PWM控制.Uv2

│   └── 直流风扇电机转速测量与PWM控制_Uv2.Bak

├── Last Loaded 直流风扇电机转速测量与PWM控制.DBK

├── 直流风扇电机转速测量与PWM控制.DSN

└── 直流风扇电机转速测量与PWM控制.PWI

4 directories, 22 files

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是51单片机测量PWM风扇转速并且通过LCD1602显示转速C语言代码: ```c #include <reg51.h> #include <intrins.h> #define uchar unsigned char #define uint unsigned int sbit EN=P3^4; sbit RS=P3^5; sbit RW=P3^6; sbit DQ=P1^2; uint cnt=0; //计数值 uchar flag=0; //计数标志 uchar dis[4]; //显示数组 void delay(uint t) //延时函数 { uint i,j; for(i=0;i<t;i++) for(j=0;j<120;j++); } void write_com(uchar com) //写命令函数 { EN=0; RS=0; RW=0; P0=com; delay(5); EN=1; delay(5); EN=0; } void write_data(uchar dat) //写数据函数 { EN=0; RS=1; RW=0; P0=dat; delay(5); EN=1; delay(5); EN=0; } void init() //初始化函数 { write_com(0x38); //显示模式设置:16x2,5x7点阵,8位数据接口 write_com(0x0c); //显示控制:开显示,光标关闭,光标闪烁关闭 write_com(0x06); //光标/显示移位:光标右移,字符不移动 write_com(0x01); //清屏 } void display() //显示函数 { uchar i; write_com(0x80); //设定显示地址为第一行第一列 for(i=0;i<4;i++) write_data(dis[i]); //显示计数值 } void timer0() interrupt 1 //定时器0中断服务函数 { TH0=0xfc; TL0=0x67; cnt++; //计数值加1 if(cnt>=1000) //计数满1000 { cnt=0; //计数清零 flag=1; //计数标志置1 } } void main() { TMOD=0x01; //定时器0工作在方式1 TH0=0xfc; TL0=0x67; ET0=1; //允许定时器0中断 EA=1; //开总中断 TR0=1; //启动定时器0 init(); //初始化LCD1602 while(1) { if(flag) //计数标志为1 { flag=0; //计数标志清零 dis[0]=cnt/1000+0x30; //千位 dis[1]=cnt%1000/100+0x30; //百位 dis[2]=cnt%100/10+0x30; //十位 dis[3]=cnt%10+0x30; //个位 display(); //显示计数值 } } } ``` 在这个代码中,使用了定时器0来计数,每秒中断1000次,计数值加1,当计数满1000时,计数标志置1,LCD1602显示计数值。需要注意的是,需要连接PWM风扇PWM信号输出引脚到单片机的外部中断0/1/2引脚上,通过外部中断计算PWM信号的周期和占空比,从而计算出风扇转速

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值