#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)
2019-5-19 15:15 上傳
點擊文件名下載附件
基于51單片機轉速測量程序設計與仿真
下載積分: 黑幣 -5