c51写的测转速源程序
#include
#include
#include
#define ucharunsignedchar
#defineuintunsignedint
#defineulongunsignedlong
sbitkey0=P3^0;//按键0
sbitkey1=P3^1;//按键1
sbitkey2=P3^3;//按键2
sbitkey3=P3^4;//按键3
sbitled0=P1^0;//数码管0
sbitled1=P1^1;//数码管1
sbitled2=P1^2;//数码管2
sbitled3=P1^3;//数码管3
sbitscl=P1^6;//24c02scl端
sbitsda=P1^5;//24c02scd端
sbitout=P1^7;//输出端
sbitin=P3^2;//输入
codeucharascled[12]={
0x3f,0x06,0x5b,0x4f,0x66,//0,1,2,3,4
0x6d,0x7d,0x07,0x7f,0x6f,//5,6,7,8,9
0x71,0x00};//F,''
/*****************函数列表**********************/
ucharx24c02_read(ucharaddr);//从24c02的地址addr中读取一个字节数据
voidx24c02_write(ucharaddr,ucharinfo);//向24c02的addr地址中写入一字节数据info
voidx24c02_init();//24c02初始化子程序
voiddelay(ucharx);//延时子程序ms
voidflash();//24c02延时子程序nop
voidstart();//24c02ic开始
voidstop();//24c02ic停止
voidack();//24c02ic应答
voidnack();//24c02ic不应答
voidwritex(ucharj);//24c02ic写1byte数据
voiddsp();//显示子程序
voiddelay(uchari);//us延时
voiddelay1(uchari);//us延时
ucharreadx();//24c02ic读1byte数据
/****************全局变量定义*******************/
ucharktemp;
uchardisp[4];
uintcount;//预设报警值
uintzs;//转速值
uinttime0;//
uinttime1;//记时器
bitbegin1;//T1开始启动标志
ucharltj=1;//高低速
uintjs;//脉冲计数器
ulongt0;
ulongt1;
bitkey_set;//设置标志
uchardisp_i[4];//显示闪动标志
uintdisp_c;//闪动显示计数器//借用time0
uintdisp_j;//闪动显示定时//借用time1
bitss=0;//闪动标志
uintbj;//报警输出信号定时
biten_bj=0;//允许报警标志
bitbjing=0;//报警中
//m:菜单级数mi:参数标号bh:检测保护时间1-10
ucharbh=0;
ucharm=0,mi=0;//借用zs,js
ucharbhtm=0;//保护检测
//bitcmi=0;//参数设置改变标志//借用bjing
/**********************************************/
voidint_ex0()interrupt0using0
{
/*外部中断0*/
delay1(20);
if(key_set==0){///0非设置状态
if(in==0){
if(ltj==1)
{
js++;
EA=0;
TR0=0;
TL0=0xaf;//50ms
TH0=0x3c;/*计数初值重装*/
if(begin1==0)
{//开始记数
begin1=1;
js=0;
TR1=0;
TL1=0xaf;//50ms
TH1=0x3c;/*计数初值重装*/
TR1=1;/*启动T1*/
}
/*启动T0*/
TR0=1;
time0=0;
EA=1;
}
else
{
if(begin1==0)
{
begin1=1;
EA=0;
TR0=0;
zs=0;
/*启动T0*/
TL0=0xaf;//50ms
TH0=0x3c;/*计数初值重装*/
TR0=1;
time0=0;
EA=1;
}
else
{
EA=0;
TR0=0;
begin1=0;
if(time0==0)
{
zs=0;
}
else
{//计算转速
t0=(time0*50000+(TH0*256+TL0)-0x3caf);
if(t0>0){zs=60000000/t0;}
}
if(zs
if(en_bj==1)
{
out=1;
bjing=1;//报警
}
}
disp[3]=(zs%10000)/1000;//显示转速
disp[2]=(zs%1000)/100;
disp[1]=(zs%100)/10;
disp[0]=zs%10;
TL0=0xaf;//50ms
TH0=0x3c;/*计数初值重装*/
TR0=1;
time0=0;
EA=1;
}
}
}
//
}///0
}
voidtimer0(void)interrupt1using0//记时定时中断
{uchart;
//////
if(key_set==0){///0非设置状态
time0++;
TL0=0xaf;//50ms
TH0=0x3c;/*计数初值重装*/
TR0=1;
/*启动T1*/
t=time0%20;
if(t==0){en_bj=0;}
if(time0>1200)//超时
{
time0=0;
disp[3]=0;
disp[2]=0;
disp[1]=0;
disp[0]=0;
zs=0;
if(en_bj==1)
{
out=1;
bjing=1;//报警
}
}
}///0
}
voidtimer1(void)interrupt3using0//1s记时定时中断
{
/*T1中断服务程序入口*/
//////
if(key_set==0){///0非设置状态
time1++;
if(time1==20)//1s
{EA=0;
TR1=0;
//计算转速
///////////////////
t0=time0*50000+(TH0*256+TL0)-0x3caf;
t1=1000000-t0;
t0=60*js*t0;
zs=60*js+t0/t1;
if(zs>6000){zs=0;}
if(zs
if(en_bj==1)
{
if(bhtm>=bh)
{
out=1;
bjing=1;//报警
}
bhtm++;
}
}
else
{
bhtm=0;
}
if(zs==0)
{///////
///////
disp[3]=0;
disp[2]=0;
disp[1]=0;
disp[0]=0;
}
else
{
disp[3]=zs/1000;//显示转速
disp[2]=(zs%1000)/100;
disp[1]=(zs%100)/10;
disp[0]=zs%10;
}
begin1=0;
js=0;
time0=0;
time1=0;
en_bj=0;//非保护状态
}
//////
TL1=0xaf;//50ms
TH1=0x3c;/*计数初值重装*/
TR1=1;/*启动T1*/
EA=1;
}///0
}
voiddelay(uchari)
{ucharj;
for(j=0;j<=i;j++);
}
voiddelay1(uchari)
{ucharj;
for(j=0;j<=i;j++);
}
voidflash()
{
_nop_();
_nop_();
_nop_();
//_nop_();
//_nop_();
}
voidx24c02_init()
{
scl=1;
flash();
sda=1;
flash();
}
voidstart()
{
sda=1;
flash();
scl=1;
flash();
sda=0;
flash();
scl=0;
flash();
}
voidstop()
{
sda=0;
flash();
scl=1;
flash();
sda=1;
flash();
}
voidack()
{
sda=0;
flash();
scl=1;
flash();
scl=0;
flash();
}
voidnack()
{
sda=1;
flash();
scl=1;
flash();
scl=0;
flash();
}
voidwritex(ucharj)
{
uchari,temp;
temp=j;
for(i=0;i<8;i++){
temp=temp<1;
scl=0;
flash();
sda=CY;
flash();
scl=1;
flash();
}
scl=0;
flash();
sda=1;
flash();
}
ucharreadx()
{
uchari,j,k=0;
scl=0;
flash();
sda=1;
for(i=0;i<8;i++){
flash();
scl=1;
flash();
if(sda==1)j=1;
elsej=0;
k=(k<1)│j;
scl=0;
flash();
}
return(k);
}
c51测转 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)
