⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wqq.c

📁 本人亲自写的基于无刷电机的速度数显程序
💻 C
字号:
***********************************************************************
                     //      无刷电机转速显示程序
//AT89C51单片机,12M晶振,P0口输出段码口,P2口输出列扫描,4个共阳LED数码管
//T0为16位20ms定时模式,T1为计数模式
//电机转速rpm=计数器1s计数值count()*20 
/************************************************************************/
#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
uchar code dispbit[]={0x01,0x02,0x04,0x08};         //列扫描控制字
uchar code dispcode[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xFF};
uchar dispbuf[4]={0,0,0,0};
uint N;	              //定时中断的次数
unsigned long f,rpm;  //电机的频率、转速
void scan(void);
uint count(void);
void delay1ms(uint t);
  
void main(void)
{
  uint i;
  uchar temp[4];
  EA=1;ET0=1;
  TH0=(65536-20000)/256;
  TL0=(65536-20000)%256;
  TH1=0x00;TL1=0x00;
  TMOD=0x51;
  TR0=1;TR1=1;

  while(1)
  {
   rpm=20*f;   //电机转速=电机的频率f×20
   for(i=0;i<4;i++)
    {
     temp[i]=0;
    }
  i=0;
  while(rpm/10)
   {
    temp[i]=rpm%10;
    rpm=rpm/10;
    i++;
    }
  temp[i]=rpm;
  for(i=0;i<4;i++)
   {
    dispbuf[i]=temp[i];
    }
   scan();
   }
 }	
  
 /*tms延时*/
 void delay1ms(uint t)
 {
   int m,j;
   for(m=0;m<t;m++)
     for(j=0;j<150;j++);
 }


/*20ms定时中断程序*/
void timer0(void) interrupt 1 using 1
{
	
  TH0=(65536-20000)/256;
  TL0=(65536-20000)%256;
  N++;
  if(N==50)
    {
      N=0;		   
      f=TH1*256+TL1;
      TH1=0;
      TL1=0;
      TR1=1;
    }
  	TR0=1;
	scan();
 }

/*显示程序*/
 void scan(void)
 {
   uchar k;
   for(k=0;k<4;k++)
    {
     P0=dispcode[dispbuf[k]];
     P2=dispbit[k];
     delay1ms(4);
	 P2=0x00;
    } 
 }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -