#基于霍尔元件模块的测速程序
#原理:齿轮转一圈,霍尔元件模块通过齿轮上的磁铁产生下降沿信号,通过外部中断0,单片机记录一次。 设置了50MS时钟中断,每经过50MS单片机计算一次并通过LLCD1602显示。
#现象:就显示了5个0,不知道哪出了问题
#include <REGX52.H>
#include <LCD1602.H>
unsigned int number=0;
unsigned int n=0;
unsigned int x=0;
void main()
{
IT0=1;
EX0=1;
EA=1; //设置int0为外部中断
TMOD &= 0xF0; //设置定时器模式 50ms
TMOD |= 0x01; //设置定时器模式
TL0 = 0x00; //设置定时初始值
TH0 = 0x4C; //设置定时初始值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
ET0 = 1; //使能定时器0中断
EA=1;
LCD_Init();
while(1)
{
if(n==1) //50ms检测一次
{
LCD_ShowNum(1,1,number*1200,5); //显示转速
number=0;
n=0;
}
}
}
void Timer0_Isr() interrupt 1 //时间中断
{
TL0 = 0x00; //设置定时初始值
TH0 = 0x4C; //设置定时初始值
n++;
}
void ex1_intr() interrupt 0 //外部中断
{
number++;
}
Build target 'Target 1'
compiling main.c...
linking...
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
SEGMENT: ?PR?_LCD_SHOWCHAR?LCD1602
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
SEGMENT: ?PR?_LCD_SHOWSTRING?LCD1602
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
SEGMENT: ?PR?_LCD_SHOWSIGNEDNUM?LCD1602
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
SEGMENT: ?PR?_LCD_SHOWHEXNUM?LCD1602
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
SEGMENT: ?PR?_LCD_SHOWBINNUM?LCD1602
Program Size: data=44.0 xdata=0 code=807
creating hex file from ".\Objects\检测"...
".\Objects\检测" - 0 Error(s), 5 Warning(s).
Build Time Elapsed: 00:00:00