标题:
51单片机测速仿真
[打印本页]
作者:
wangpengfei
时间:
2017-5-15 10:08
标题:
51单片机测速仿真
0.png
(25.26 KB, 下载次数: 62)
下载附件
2017-5-15 15:59 上传
0.png
(70.44 KB, 下载次数: 63)
下载附件
2017-5-15 15:59 上传
单片机源程序:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uint num=0; //外部中断次数
uchar num1=0;
uint Speed_dat=0;
uint Total_Dis=0;
uchar Beep_speed=40;
sbit KEY1=P3^5;
sbit KEY2=P3^6;
sbit KEY3=P3^7;
void delayms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
#include"LCD1602.H"
#include"AT24C02.H"
void keyscan()
{
if(!KEY1)
{
delayms(5);
if(!KEY1)
{
if(Beep_speed<255)
Beep_speed++;
Write_AT24C02_Byte(3,Beep_speed);
while(!KEY1);
}
}
else if(!KEY2)
{
delayms(5);
if(!KEY2)
{
if(Beep_speed>0)
Beep_speed--;
Write_AT24C02_Byte(3,Beep_speed);
while(!KEY2);
}
}
else if(!KEY3)
{
delayms(5);
if(!KEY3)
{
Write_AT24C02_Byte(0,0);
Write_AT24C02_Byte(1,0);
Total_Dis=0;
dis_Mileage();
while(!KEY3);
}
}
}
void main()
{
uchar dat=0;
float M_dat=0.0;
init_1602();
Init_AT24C02();
Beep_speed=Read_AT24C02_Random(3);
dat=Read_AT24C02_Random(0);
Total_Dis=dat*256+Read_AT24C02_Random(1);
dis_Mileage();
TMOD=0X01;
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
ET0=1;
TR0=1;
IT0=1; //边沿触发中断
EX0=1;
EA=1;
while(1)
{
if(num1>99) //0.1s 计时
{
num1=0;
M_dat+=(float)Speed_dat; //每1s走的米数
}
if(M_dat>1000.0) //路程每增加100m储存一次 总量程+1“注:将得出的里程米数默认除以10 则为0.1s行走的米数”
{
M_dat-=1000.0;
Total_Dis+=1;
Write_AT24C02_Byte(0,Total_Dis/256);
Write_AT24C02_Byte(1,Total_Dis%256);
dis_Mileage();
}
display();
keyscan();
}
}
void T0_time() interrupt 1 //定时器0 定时1ms
{
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
if(num<500) num++; // 如果时间超过0.5s没有检测到脉冲则判断为速度为0
else Speed_dat=0;
if(num1<100) num1++; //0.1秒定时变量
}
void ex_0() interrupt 0 //外部中断0
{
Speed_dat=(500/num); //计算1s 电机转动的圈数 num为电机转动半圈的时间
num=0;
}
复制代码
全部资料下载地址:
仿真.rar
(40.47 KB, 下载次数: 117)
2017-5-15 10:06 上传
点击文件名下载附件
测速仿真
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1