找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3334|回复: 3
打印 上一主题 下一主题
收起左侧

单片机转速测量程序与仿真

[复制链接]
跳转到指定楼层
楼主
采用51单片机为主控电路,传感器用光电管,电路设计含转速采样电路。数码管采用4位一体共阴数码管。下载地址: 单片机转速测量程序与仿真.rar (153.78 KB, 下载次数: 76)


部分源程序:(完整程序请自己下载)
#include <REG52.H>
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
#define LED_DAT P0
sbit LED_SEG0 = P2^7;
sbit LED_SEG1 = P2^6;
sbit LED_SEG2 = P2^5;
sbit LED_SEG3 = P2^4;
sbit pin_SpeedSenser = P3^5;         //光电传感器信号接在T1上
#define TIME_CYLC 200                         //12M晶振,定时器5ms 中断一次 我们1秒计算一次转速 // 1000ms/5ms = 200
#define PLUS_PER 1                         //码盘的齿数 ,这里假定码盘上有10个齿,即传感器检测到10个脉冲,认为1圈
#define K         100.0                   //校准系数
unsigned char code  table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar data Disbuf[4];                        // 显示缓冲区
uint Tcounter = 0,speed,PlusCounter;                           //时间计数器
bit Flag_Fresh = 0;                         // 刷新标志
bit Flag_clac = 0;                                 //计算转速标志
bit Flag_Err = 0;                                 //超量程标志 //在数码管上显示一个四位数
void DisplayFresh();                           //计算转速,并把结果放入数码管缓冲区
void ClacSpeed();                                   //初始化定时器T0
void init_timer0();                                   //初始化定时器T1
void init_timer1();                                   //延时函数
void Delay(uint ms);
void it_timer0() interrupt 1
{
        TF0 = 0;                                       //d定时器 T0用于数码管的动态刷新
        TH0 = 0xEC;                           
        TL0 = 0xA8;                            //78
        Tcounter++;
        if(Tcounter>TIME_CYLC)
        {
                PlusCounter = TH1*256 + TL1;
            TH1=TL1 = 0x00;//脉冲计数清零
            Tcounter = 0;//周期定时 清零
                speed =60*PlusCounter/PLUS_PER;//
                 Flag_clac = 1;                        //周期到,该重新计算转速了
        }
        Flag_Fresh = 1;
}

void main(void)
{
        Disbuf[0] = 0; //开机时,初始化为0000
        Disbuf[1] = 0;
        Disbuf[2] = 0;
        Disbuf[3] = 0;
           init_timer0();
        init_timer1();
        while(1)
        {  
                if(Flag_Fresh)
                   {
                        Flag_Fresh = 0;
                    DisplayFresh();    // 定时刷新数码管显示
                   }
                   if(Flag_clac)
                   {
                        Flag_clac = 0;
                    ClacSpeed(); //计算转速,并把结果放入数码管缓冲区  
                   }
                   if(speed>9999)        //超量程处理//数码管显示字母'EEEE'  
                   {                     
                    Disbuf[0] = 0x9e; //开机时,初始化为0000
                    Disbuf[1] = 0x9e;
                    Disbuf[2] = 0x9e;
                    Disbuf[3] = 0x9e;
                   }
        }
}

//在数码管上显示一个四位数
void DisplayFresh()
{
        LED_DAT =~table[Disbuf[0]];
        LED_SEG3 = 1;
        Delay(10);
        LED_SEG3 = 0;
        Delay(3);
        LED_DAT =~table[Disbuf[1]];
        LED_SEG2 = 1;
        Delay(10);
        LED_SEG2 = 0;
        Delay(3);
         LED_DAT =~table[Disbuf[2]];
        LED_SEG1 = 1;
        Delay(10);
        LED_SEG1 = 0;
         Delay(3);
        LED_DAT =~table[Disbuf[3]];
        LED_SEG0 = 1;
        Delay(10);
        LED_SEG0 = 0;
        Delay(3);
}
//计算转速,并把结果放入数码管缓冲区
void ClacSpeed()
{
        Disbuf[0] = (speed/1000)%10;  
        Disbuf[1] = (speed/100)%10;
        Disbuf[2] = (speed/10)%10;
        Disbuf[3] = speed%10;
}
//初始化定时器T0
void init_timer0()
{
        TMOD &= 0xf0; //定时10毫秒        
        TMOD |= 0x01;              
        TH0 = 0xC0;            
        TL0 = 0x00;  
        ET0=1;                     
        EA=1;               
        TR0=1;               
}


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:722043 发表于 2020-4-4 02:52 | 只看该作者
这个还是不错的
回复

使用道具 举报

板凳
ID:724089 发表于 2020-4-9 16:11 | 只看该作者
想问一下这个程序可以测量风速吧,但我想加一个测量风向的,是不是要重新弄一个
回复

使用道具 举报

地板
ID:555420 发表于 2020-5-23 21:11 | 只看该作者
只有我一个人打不开吗
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表