标题:
51单片机测双电机转速程序
[打印本页]
作者:
x12138
时间:
2023-5-29 13:03
标题:
51单片机测双电机转速程序
大佬帮忙看下中断服务程序和初始化部分有什么问题,在Proteus里仿真的时候LCD屏不显示数字。
0.png
(35.99 KB, 下载次数: 23)
下载附件
2023-5-29 19:11 上传
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;
}
}
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1