标题:
51单片机光电传感器通过检测是否有物体通过,通过中断计数 求帮助
[打印本页]
作者:
寒山寺小生
时间:
2019-6-28 16:29
标题:
51单片机光电传感器通过检测是否有物体通过,通过中断计数 求帮助
引脚定义
#define uchar unsigned char
#define uint unsigned int
sbit BEEP=P3^7;
sbit guang=P1^0;
sbit jidianqi=P0^0;
uint c=0;
实现代码
void exint0() interrupt 0
{
c=0;
jidianqi = 0;
}
void exint1() interrupt 2
{
c++;
delay1ms(200);
}
void main()
{
IT0 = 1;
EX0 = 1;
IT1 = 1;
EX1 = 1;
EA = 1;
BEEP=1;
jidianqi=0;
while(1)
{
switch(c)
{
case 1:jidianqi=1;break;
case 2:jidianqi=1;P0=0;break;
}
}
}
作者:
51hei团团
时间:
2019-6-28 18:13
具体是什么问题?
作者:
寒山寺小生
时间:
2019-6-28 20:54
就是光电传感器读到数据,感觉他就直接跳到第二个switch语句执行了
作者:
寒山寺小生
时间:
2019-6-28 20:57
51hei团团 发表于 2019-6-28 18:13
具体是什么问题?
然后偶尔执行了一下switch case 1 他第二次就直接执行到case 2了
作者:
lwh999995
时间:
2019-6-29 03:35
#include<xxxx.h> //头文件未知,需要改
#define uchar unsigned char
#define uint unsigned int
sbit BEEP = P3^7; //STC单片机P3内部有上拉电阻
sbit guang = P1^0; //STC单片机P1内部有上拉电阻
sbit jidianqi = P0^0; //STC单片机P0内部无上拉电阻,需要外部加
uint c=0;
//
void exint0() interrupt 0
{
EX0 = 0; // 关闭中断,防止误动作
c=0;
jidianqi = 0;
EX0 = 1; // 打开中断
}
//
void exint1() interrupt 2
{
EX1 = 0; // 关闭中断,防止误动作
c++;
if(c==3) c=0; // c值超出范围值清0,也可以设置其它值,例如c=1,看需求,不用就删除此行吧
delay1ms(200);
EX1 = 1; // 打开中断
}
//
void main()
{
IT0 = 1;
EX0 = 1;
IT1 = 1;
EX1 = 1;
EA = 1;
BEEP = 1;
jidianqi = 0; // 如果是继电器,应该用PNP管驱动继电器,触发信号低电平,
// 如果jidianqi = 0;是继电器关闭,最好改一改电路,防止STC类单片机启动复位IO高电平误动作
delay1ms(200); // 稍微延个时,稳定一下
while(1)
{
switch(c)
{
case 1: jidianqi=1; break;
case 2: jidianqi=1; P0=0; break;
default: break; // 如果c不在范围值之内,执行,可添加其它功能
}
}
}
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1