锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

51单片机和振动传感器的结合(STC89C52RC)

时间:2023-04-21 16:07:00 基于振动传感器

说明:振动检测模块DO引脚与单片机相连P当振动检测模块检测到10时
振动时,DO通过检测口输出低电平P控制状态10LED1灭,
检测振动时,LED一亮两秒后,熄灭。(此程序分别使用延迟。
和中断完成亮两秒的任务)
注:下载时可以勾选6T(双速)模式
代码:

#include  #include  "intrins.h"sbit led_1=P3^7;sbit led_2=P3^6;sbit vibrate=P1^0;    ///振动检测 振动输出低电平int  led_2_temp;    //LED2的标志物//=======================================================void  Delay2000ms()    //@11.0592MHz 延时2秒{       unsigned  char  i,  j,  k;  _nop_();  i =  15;  j =  2;  k =  235;  do  {         do    {           while  (--k);    }  while  (--j);  }  while  (--i);}void  vibrate_detection_1()    ///振动检测(延迟模式){       if(vibrate==0)  {         led_1=0;    Delay2000ms();    led_1=1;  }}//=======================================================//=======================================================void  Timer0Init(void)		//5毫秒@11.0592MHz{
     	AUXR &= 0x7F;		//定时器时钟12T模式	TMOD &= 0xF0;		//设置定时器模式	TL0 = 0x00;		//设置定时初始值	TH0 = 0xEE;		//设置定时初始值	TF0 = 0;		//清除TF0标志	TR0 = 1;		//定时器0开始计时	ET0=1;	EA=1;}int count_1;void timer0_service() interrupt 1   //定时器0的服务函数,LED2每次亮2秒{
     	if(led_2_temp==0)	{
     		count_1++;		if(count_1>=400)		{
     			led_2_temp=1;			count_1=0;		}	}}void led_control()   //通过LED2标志位来控制LED2的状态{
     	led_2=led_2_temp;}void vibrate_detection_2() //振动检测(定时器模式){
     	if(vibrate==0&&led_2_temp==1)	{
     		led_2_temp=0;	}}//=======================================================void main(){
     	led_1=led_2=1;	Timer0Init();	while(1)	{
     // vibrate_detection_1();		vibrate_detection_2();		led_control();	}}
锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章