找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机测双电机转速程序

[复制链接]
跳转到指定楼层
楼主
大佬帮忙看下中断服务程序和初始化部分有什么问题,在Proteus里仿真的时候LCD屏不显示数字。




void init()                                                   //定时器0初始化
{
        EA=1;
        EX0=1;//开外部INTO中断
        IT0=1;        //INT0负跳变触发
        EX1=1;//开外部INT1中断
        IT1=1;        //INT1负跳变触发        
    TMOD=0x01;//定时器0工作于方式1
        TH0=0x3c;          //50ms
        TL0=0xb0;
        ET0=1;//开定时中断
    TR0=1;//启动定时
}


void display()                        //显示函数
{
          Velocity3=Velocity1+Velocity2;
                Velocity=Velocity3/2;
          Mileage=Mileage+Velocity*500/36;
                write_1602com(0x80+2);
                if(Velocity/100==0)
                write_1602dat(' ');
                else
                write_1602dat(0x30+Velocity/100);
                if((Velocity/100+Velocity%100/10)==0)
                write_1602dat(' ');
                else
                write_1602dat(0x30+Velocity%100/10);
                write_1602dat(0x30+Velocity%10);//数字+30得到该数字的LCD1602显示码

                write_1602com(0x80+14);
                if((VH/10)==0)
                write_1602dat(' ');
                else
                write_1602dat(0x30+VH/10);
                write_1602dat(0x30+VH%10);//数字+30得到该数字的LCD1602显示码

                write_1602com(0x80+0x40+8);
                write_1602dat(0x30+Mileage/1000000);//数字+30得到该数字的LCD1602显示码
                write_1602dat(0x30+Mileage%1000000/100000);//数字+30得到该数字的LCD1602显示码
                write_1602com(0x80+0x40+11);
                write_1602dat(0x30+Mileage%100000/10000);//数字+30得到该数字的LCD1602显示码
                write_1602dat(0x30+Mileage%10000/1000);//数字+30得到该数字的LCD1602显示码
               
                write_1602dat(0x30+Mileage%1000/100);//数字+30得到该数字的LCD1602显示码
}

void main()                           //主函数
{
        lcd_init();
        init;
        while(1)
        {
                anjian();
                display();
                alarm();
        }
}


void EXINT0() interrupt 0  //外部中断函数
{
        count1++;                           //有信号加
}

void EXINT1() interrupt 2  //外部中断函数
{
        count2++;                           //有信号加
}

void time0() interrupt 1   //定时器中断执行函数
{
        uchar m;
        TH0=0x3c;
        TL0=0xb0;         //50ms
        m++;
        if(m%5==0&&flag_alarm==1)
        {
                BUZZ=!BUZZ;
        }
        if(m>=10)
        {
            Velocity1=count1/5;//(速度是将500ms内的脉冲数除以5)(此处的速度值和转数没有计算公式,只是为了得到一个随转速大小变化的速度值)
                Velocity2=count2/5;
                m=0;               
                count1=0;
                count2=0;        

        }
}



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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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