标题:
物理实验竞赛做的一个转动惯量测量仪的单片机源程序
[打印本页]
作者:
Anger
时间:
2017-11-5 19:03
标题:
物理实验竞赛做的一个转动惯量测量仪的单片机源程序
拿单片机运算,光电旋转编码器测量数据,很是羞愧哦,就给了个省三
给大家需要光电旋转编码器程序的同学参考下吧
不知道怎么上传c文件,就这样吧
单片机源程序如下:
#include <reg52.h>
#include <intrins.h>
#include <stdio.h>
#include <string.h>
#include <absacc.h>
#include <math.h>
#define uchar unsigned char
#define uint unsigned int
long i = 0;
long j = 0;
float speed,angle_speed=0,distance,angle_speed2 ,PI=3.14,D=0.027,R=0.0135,NUMBER=600.0;
int tt = 0;
int g=0;
int k = 0;
int allk=0;
sbit k1=P1^0;
sbit k2=P1^1;
sbit E=P2^7;
sbit RW=P2^5;
sbit RS=P2^6;
sbit PSB = P1^0;
uchar b[10];
void Delay(uint i);
void Outside_Init(void)
{
EX0 = 1;
IT0 = 1;
EX1 = 1;
IT1 = 1;
EA = 1;
}
void Outside_Int1(void) interrupt 2
{
i++;
}
void delays()
{
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
// bit Busy(void)
// {
// bit busy_flag = 0;
// RS = 0;
// RW = 1;
// E = 1;
// delays();
// busy_flag = (bit)(P0 & 0x80);
// E = 0;
// return busy_flag;
// }
void wcmd(uchar del)
{
// while(Busy());
RS = 0;
RW = 0;
E = 0;
delays();
P0 = del;
delays();
E = 1;
delays();
E = 0;
}
void wdata(uchar del)
{
// while(Busy());
RS = 1;
RW = 0;
E = 0;
delays();
P0 = del;
delays();
E = 1;
delays();
E = 0;
}
void L1602_init(void)
{
PSB=1;
wcmd(0x30);
Delay(10);
wcmd(0x0c);
Delay(10);
wcmd(0x01);
Delay(10);
wcmd(0x80);
Delay(10);
}
void Delay(uint i)
{
uint x,j;
for(j=0;j<i;j++)
for(x=0;x<=148;x++);
}
void Time0_Init()
{
TMOD=0x01;
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
ET0=0;
TR0=0;
}
void Time0_Int() interrupt 1
{
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
tt++;
g++;
if(tt==2)
{
allk=allk+i;
angle_speed=3;
k=i;
distance=PI*D/NUMBER;
speed=k*distance/0.1;
angle_speed2=speed/R ;
tt=0; i=0;
}
}
void main()
{
float ZD,ZD1,ZD2;
uchar a[10];
uchar c[]="脉冲触发";
uchar d[]="转动惯量";
uchar e[]="转动惯量测量仪";
uchar f[]="大连民族大学";
L1602_init();
Time0_Init();
Outside_Init();
wcmd(0x80);
Delay(10);
for(j=0;j<14;j++)wdata(e[j]);
wcmd(0x88);
Delay(10);
for(j=0;j<12;j++)wdata(f[j]);
while(1)
{
if(k1==0){Delay(7);if(k1==0)wcmd(0x01);break; }
}
wcmd(0x01);
Delay(10);
wcmd(0x90);
Delay(10);
for(j=0;j<8;j++)wdata(c[j]);
wcmd(0x88);
Delay(10);
for(j=0;j<8;j++)wdata(d[j]);
ET0=1;
TR0=1;
while(1)
{
if(allk>=100)
{
g=0;
while(angle_speed2>=5||angle_speed2<=6);
while(1)
{
if(g==20||g==21)
……………………
…………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
新建文本文档.zip
(1.27 KB, 下载次数: 9)
2017-11-5 18:59 上传
点击文件名下载附件
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1