经本人编写的正确的霍尔测速程序以及正确的原理图
/************霍尔测速仪******************/
/****************************************/
/****************************************/
/**编写人:刘梦宇**/
/**主控芯片:STC89C52RC**/
/**晶振12MHZ**/
#include
#include
#define uint8 unsigned char
#define uint16 unsigned int
#define CMD 0x00
#define DAT 0x01
#define DataPort P0//LCD数据口
sbit RW=P2^6;
sbit RS=P2^5;
sbit E=P2^7;
uint16 N=0;
uint8 C_50ms;
uint8 Z=0;
uint8 count=0;
bit flag_1s=0;
/**ms级延时子程序**/
void delay(uint16 t)
{
uint16 a;
for(;t>0;t--)
for(a=123;a>0;a--);
}
/**LCD时序**/
void write_LCD(uint8 dat,bit rs)
{
E=0;
RW=0;
RS=rs;//选择指令or数据
_nop_();
_nop_();
_nop_();
E=1;
_nop_();//delay(1);
_nop_();
_nop_();
DataPort=dat;//将数据送到LCD数据口
_nop_();
_nop_();
_nop_();
E=0;
delay(1);
}
/**LCD选择显示位置子函数**/
void SetXY(uint8 x,uint8 y)
{
x=x&0x0f;//防止X、Y 超过量程
y=y&0x01;
if(y)
{
write_LCD(0x80+x,CMD);
}
else
{
write_LCD(0xc0+x,CMD);
}
}
/**转速数值转换子函数**/
void disload(uint16 a)
{
SetXY(4,0);
write_LCD(a/1000+'0',DAT);
write_LCD(a%1000/100+'0',DAT);
write_LCD(a%100/10+'0',DAT);
write_LCD(a%10+'0',DAT);
write_LCD('r',DAT);
write_LCD('/',DAT);
write_LCD('m',DAT);
write_LCD('i',DAT);
write_LCD('n',DAT);
}
/**LCD字符指针函数**/
void LCD_wrstr(uint8*str)
{
while(*str!='')
{
write_LCD(*str,DAT);
str++;
}
}
/**初始化子程序**/
void All_init()
{
delay(500);
write_LCD(0x38,CMD);
write_LCD(0x38,CMD);
write_LCD(0x0c,CMD);
write_LCD(0x01,CMD);
delay(10);
SetXY(0,1);//设置标题显示位置
LCD_wrstr("Tachometer:");
TMOD=0x01;//设置T0位工作方式1——作为16位定时器
ET0=1;//打开定时器0的中断
TR0=1;//打开定时器0
TH0=(65536-50000)/256;//装入初值
TL0=(65536-50000)%256;
IT0=1;//外部中断0为下降沿中断
EX0=1;//打开外部中断
EA=1;//打开总中断
}
void main()
{
All_init();//先进行初始化
while(1)
{
if(flag_1s==1)
{
flag_1s=0;//1s标志位清零
disload(N);
}
}
}
/**定时器0中断服务子程序**/
void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
if(++C_50ms>19)
{
EX0=0;//关闭外部中断0
C_50ms=0;//定时1s之后C_50ms清零
N=60*Z;//计算转速
Z=0;//初始化圈数
flag_1s=1;//1s标志位置1
TH0=0x3c;//重新赋值
TL0=0xb0;
EX0=1;//打开外部中断0,开始计数。
}
}
void wai0() interrupt 0
{
count++;
if(count==2) //两次外部脉冲,电机转一圈。
{
Z++;//转圈+1
count=0;//初始计数值
}
}
上一篇:51单片机中断、串口通信综合程序
下一篇:基于51单片机的无线温湿度控制系统
推荐阅读最新更新时间:2024-08-13 19:06
基于AVR单片机的红外接收程序设计
使用一体化的红外接收头,直接就解码出来了,平时红外接收头输出的是高电平,当有红外数据的时候,就会根据发送的红外数据有相应的电平转换。大家可以随便找个遥控板,测一下红外接收波形,看看高低电平的表示,便于计数及接收步骤。这次用的遥控板的红外协议是这样的: 0.6ms高电平+0.48ms低电平表示0,接收解码出来是0.6ms低电平+0.48ms高电平。 0.6ms高电平+1.66ms低电平表示1,接收解码出来是0.6ms低电平+1.66ms高电平。 调制38kHz,占空比1/3. 遥控发送数据先是9ms高电平,4.5ms低电平,然后是两个字节的识别码,接着是一个字节的数据和一个字节的数据反码。 单片机解码0和1只用计数接收到的低
[单片机]
51单片机入门 - 最小系统设计
这里我们简单了解下51单片机的40个管脚具体的作用。对于没有接触过复杂电子元器件的读者来说,或许会感觉非常难,但实际上完全不需要有畏惧心理。 单片机管脚 按照集成电路的管脚识别方法,缺口朝上,逆时针转一圈,单片机的引脚编号从1到40,如图所示。图中同时给出了各个管脚的名称。我们完全不需要刻意去记这些管脚顺序和名称,在需要的时候查一下就好了,如果用的比较多,后来自然就记住了。 按照图中的大括号的提示,我们把P0.0~P0.7这样八个管脚称为一组IO口,叫做P0,同样有P1、P2和P3。IO口(IO = Input / Output),顾名思义,就是输入输出接口,它是单片机与外界进行信息交流的途径。之后我们主要的学习内容
[单片机]
基于单片机及FPGA的舞台吊杆控制器的设计
在舞台机械设备中,吊杆起着重要的伤脑筋。在大型的影剧院,一场演出往往需要调动大量的舞台背景,有时要控制多达64路的吊杆同时动作。操作人员要在现场不断变换舞台背景,控制室人员要不断地和现场人员进行协调,这给舞台控制带来了很大不便。对吊杆的集中控制、实时响应来自多路的请求及吊杆位置的精确定位是设计中要解决的三个关键问题。目前的舞台控制系统大都通过采用光电编码盘产生脉冲信号的方式来获取吊杆的移动距离,并直接用单片机进行计数和控制。这种方法在响应多路请求时,往往会因为单片机任务繁重而造成计数脉冲丢失,引起测量误差。综上所述,本文提出了用CYGNAL单片机和FPGA设计舞台吊杆控制器的方法。 1 舞台吊杆控制系统的组成及工作原
[嵌入式]
单片机 I2C 时序介绍
在硬件上,I2C 总线是由时钟总线 SCL 和数据总线 SDA 两条线构成,连接到总线上的所有器件的 SCL 都连到一起,所有 SDA 都连到一起。I2C 总线是开漏引脚并联的结构,因此我们外部要添加上拉电阻。对于开漏电路外部加上拉电阻,就组成了线“与”的关系。总线上线“与”的关系就是说,所有接入的器件保持高电平,这条线才是高电平,而任何一个器件输出一个低电平,那这条线就会保持低电平,因此可以做到任何一个器件都可以拉低电平,也就是任何一个器件都可以作为主机,如图14-1所示,我们添加了 R63 和 R64 两个上拉电阻。 图14-1 I2C 总线的上拉电阻 虽然说任何一个设备都可以作为主机,但绝大多数情况下我们都是用单片机来做
[单片机]
触摸屏与单片机的通信实现
随着触摸屏的应用和产量的增加,价格下降。因而有可能使用触摸屏作为单片机控制设备的键盘和显示装置,提高单片机控制设备的档次。触摸屏与PLC联合使用时,触摸屏的主要功能是: ①显示PLC输入,输出端13或辅助继电器的开关状态。 ②用触摸按键强制PLC输入,输出端口或辅助继电器的开/关。 ③显示PLC中定时器、计数器和数据寄存器的内容。 ④用触摸屏键盘把设定数据送入PLC的数据寄存器中。 可规纳成触摸屏与PLC问对应地址的数据位、字的读和写。因此可以利用MOD—BUS通信协议来实现触摸屏与单片机的通信和控制,或触摸屏与多台单片机通信,构成一个集散控制系统。 1 触摸屏与单片机的硬件联接 采用
[单片机]
基于89C51单片机的数字视频监控系统键盘及报警控制卡设计
键盘是数字视频监控录像系统中最重要的输入设备之一,是人机接口的重要组成部分。目前常用的工业控制计算机键盘除配置电子锁开关防止非法键盘输入外,与 PC键盘并没有多大区别。这种键盘不仅键数多,操作不灵活,而且通常只能作为输入设备,主机无法通过键盘与外设进行通信。本文在分析PC机键盘通信方式的基础上,设计出以89C51单片机为核心的数字视频监控系统键盘及报警控制卡,该卡具有键盘通信和输入输出报警两种功能,采用标准PCI卡的结构,但不占用主机硬件资源。其中,报警部分有4路输入和4路输出,可以与标准的报警传感器相连;键盘部分有16个键,通信方式与PC机完全兼容。采用这种控制卡,不仅可以节省视频监控系统中常用的专用报警解码器,而且能够实现
[单片机]
卡尔曼滤波在单片机上的使用
#ifndef _KALMAN_H_ #define _KALMAN_H_ extern KalmanGain;// 卡尔曼增益 extern EstimateCovariance;//估计协方差 extern MeasureCovariance;//测量协方差 extern EstimateValue;//估计值 extern void KalmanFilterInit(void); extern KalmanFilter( Measure); #endif #include config.h #include math.h KalmanGain;// 卡尔曼增益 Estimat
[单片机]
基于51单片机,蜂鸣器和led每秒1滴1亮的程序
#include reg52.h #define uchar unsigned char #define uint unsigned int int seccnt,m=0; char tzsta,msta; sbit led=P2^0; sbit beep=P1^5; void ini()//定时器0 { seccnt=0; msta=tzsta=0; TMOD=0x01; TH0=0x0FF; TL0=0x9C; TR0=1; } void on()//蜂鸣器和灯的功能 { if(m =500) { beep=~beep; } if(m =100
[单片机]