#include <REGX52.H>
#include <stdio.h>
#include "LCD.H"
#include "delay.h"
unsigned char aa[16]={'Q','Q',':','1','2','1','1','7','1','6',' ',' ',' ',' ',' ',' ',}; //QQ:1211716 ,你自己可以改成你需要的,如你的学号:No:xxxxxxxxxxx ,你的名字的汉语拼音等。
unsigned char cc[]={'S','p','e','e','d',':',' ',' ',' ',' ','r','/','m','i','n'}; //Speed: r/min
unsigned char z,n,cnt;
unsigned int r,m;
main()
{
IE=0X8A;
TMOD=0X51; //T0为定时器,T1为16位计数器
TH0=(65536-50000)/256; //定时50毫秒
TL0=(65536-50000)%256; //定时50毫秒
TH1=0; //脉冲计数器高位清零
TL1=0; //脉冲计数器低位清零
TR0=1; //启动内部定时器
TR1=1; //启动外部脉冲计数器
init(); //初始化液晶显示器
LCD_Write_String(0,0,aa); //显示第一行内容
z=1; //检测结束标志初始化
while(1)
{
n=P1; //读取测速光栅个数。
if(z==1) //完成一次检测时进行显示处理
{
if(r>9999) //测量值大于上限时显示 C C C C
{
cc[6]='C';
cc[7]='C';
cc[8]='C';
cc[9]='C';
}
else
{
cc[6]=r/1000+'0';
cc[7]=r/100%10+'0';
cc[8]=r/10%10+'0';
cc[9]=r%10+'0';
}
LCD_Write_String(1,1,cc); //显示测量得到的结果
z=0; //显示结束时测量标志清零,为下一次测量做准备
TR0=1; //启动内部定时器
TR1=1; //启动外部脉冲计数器
}
}
}
void int0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
if(++cnt==20) //1秒计时到
{
TR1=0; //停止定时器工作
TR0=0; //停止计数器工作
cnt=0; //1秒定时标志位清零
m=(TH1*256+TL1); //1秒钟测量得到的脉冲数。
r=m*60/n; //n为测速光栅个数。s为转速:转/min 60是换算成1分钟的转速。
TH1=0; //脉冲计数器高位清零
TL1=0; //脉冲计数器低位清零
z=1; //检测结束时标志置1
}
}
完整程序就自己下载附件。
基于51单片机转速测量程序设计与仿真.rar
(86.18 KB, 下载次数: 94)