文档视界 最新最全的文档下载
当前位置:文档视界 › 霍尔传感器测速程序

霍尔传感器测速程序

#include
#include

#define uchar unsigned char
#define uint unsigned int
#define LCD_CW XBYTE[0xF800]
#define LCD_DW XBYTE[0xF840]
#define LCD_CR XBYTE[0xF8B0]
#define WHILE_BUSY while(LCD_CR & 0x80) //读LCD状态字,若为0x80,则等待/LCD_CR & 0x80
#define led XBYTE[0xfa00]




sbit warning=P3^1;
uint i,z,count,zhuan,msec;

void nint_LCD()//LCD初始化
{
LCD_CW=0x0c; //00001100,开显示,不显示光标,光标不闪烁/
WHILE_BUSY; //忙等待/
LCD_CW=0x38; //设置16×2显示,5×7点阵,8位数据接口
}

void print(uchar *str,uchar addr)//LCD字符串输出
{
WHILE_BUSY; //忙等待,不能少!!!/
LCD_CW = 0x80 | addr; //向LCD写入地址,数据指针初始地址为0x80/
while(*str!='\0') //写到字符串结束/
{
WHILE_BUSY; //忙等待/
LCD_DW=*str; //向LCD写入数据/
str++; //写下一个字符/
}
}

void dis_LCD(uchar date,uchar addr)//LCD字符输出
{
WHILE_BUSY; //忙等待,不能少!!!/
LCD_CW = 0x80 | addr; //向LCD写入地址,数据指针初始地址为0x80/
WHILE_BUSY; //忙等待/
LCD_DW = date; //向LCD写入数据/
}


/*-------------------外部中断0计数程序-------------------*/
void counter(void) interrupt 5
{TF2=0;//定时器2的标志位
ET2=0;TR2=0;//定时器2重新工作
count++;
TR0=1;
if(count==20)//到达一秒的时间
{count=0;
TR0=0;//关计数器0
zhuan=TL0|(TH0<<8);//读数
TL0=0;TH0=0;//计数器置零 //4次循环为电机转一圈
TR0=1;}//开启计数器
//开外部中断0
ET2=1;TR2=1;//开定时器中断
}


/*----------------------端口初始化-----------------------*/
void int_all()
{
warning=0; //关蜂鸣器
z=0; //初始化z的值
count=0; //初始化count的值
zhuan=0; //初始化转的值
TH0=0;TL0=0;//计数器置零
TMOD=0x05;//计数器的工作方式 //内部中断定时器选择
RCAP2H=(65536-50000)/256; // //50ms定时
RCAP2L=(65536-50000)%256;
EA=1; //开中断总开关
ET2=1; //开内部中断5
TR2=1; //计时器开始工作
//IT0=1; //外部中断0为下降沿触发
// EX0=1; //开外部中断0

}
/*-------------------转速过高警告程序--------------------*/
void warning_speed()
{
if(zhuan>5000) //高于5000转打开警告
{
warning=1;
}
if(zhuan<=5000) //低于5000转关闭警告
{
warning=0;
}
}
/*-------------------------------------------------------*/
/*------------------------主函数-------------------------*/
void main()
{
nint_LCD();
int_all(); //全局初始化
print("speed=",0);
dis_LCD('0',6);
dis_LCD('0',7);
dis_LCD('0',8);
dis_LCD('0',9);
print("rad/s",10);


while(1)
{
// disp_count(); //数据处理
dis_LCD(zhuan/1000+0x30

,6);
dis_LCD(zhuan/100%10+0x30,7);
dis_LCD(zhuan/10%10+0x30,8);
dis_LCD(zhuan%10+0x30,9);
warning_speed(); //转速警告
//displaytolcd(); //LCD显示
}
}
/*-------------------------------------------------------*/

相关文档