专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
51单片机
想做一个鼠标呼吸灯,请教大家鼠标待机时的检测方法?
2020-02-01 16:38
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
51单片机
5334
9
9
本帖最后由 downtoearth 于 2012-11-25 19:00 编辑
IR_Driver.jpg
(24.34 KB, 下载次数: 0)
下载附件
2012-11-25 16:57 上传
想做一个鼠标呼吸灯,请教大家鼠标待机时的检测方法?
就是鼠标待机,呼吸灯开始工作,鼠标工作呼吸灯就关闭。
用的是STC15F104E,我把一个IO设成高阻连到三极管基极,
但好像检测不到电平变化。鼠标待机是红外LED是快闪的,没有
示波器,程序就当它按键这样处理,程序在测试是连到高低电平,
是受控的,现在请教大家为什么检测不到电平变化,或者有什么更
好的办法!程序如下:
********************************************************************/
#include <stdlib.h>
#include "..My_Header_FilesMacroAndConst.H"
#include "..STC_Header_FilesSTC15.H"
/*******************************************************************/
#define ON 1
#define OFF 0
#define RED 0
#define GREEN 1
#define BLUE 2
#define YELLOW 3
#define PURPLE 4
#define CYAN 5
#define WHITE 6
/*******************************************************************/
sbit Mouse_Standby = P3^4 ;
sbit Red_Led = P3^3 ;
sbit Green_Led = P3^1 ;
sbit Blue_Led = P3^0 ;
bit Timer0_200UsFlag ;
bit Breathe_Flag ;
uchar MouseWork_Time ;
/*******************************************************************/
void Timer0_Init (void)
{
AUXR &= 0x7f ;
TMOD &= 0xf0 ;
TMOD |= 0x01 ;
TH0 = (65535-200) / 256 ;
TL0 = (65535-200) % 256 ;
ET0 = 1 ;
TR0 = 1 ;
EA = 1 ;
}
/*******************************************************************/
void Timer0_Isr (void) interrupt 1 using 0
{
TH0 = (65535-200) / 256 ;
TL0 = (65535-200) % 256 ;
Timer0_200UsFlag = 1 ;
}
/*******************************************************************/
void Breathe_Control (void)
{
static uchar All_PWM ;
static uchar PWM_Count ;
static uchar Time_Count ;
static uchar Led_Colour ;
static bit Direction = 1 ;
if ( ++Time_Count == 100 )
{
Time_Count = 0 ;
if ( Direction )
{
if ( ++All_PWM == 99 ) Direction = 0 ;
}
else {
if ( --All_PWM == 0 )
{
Direction = 1 ;
if ( MouseWork_Time >= 60 )
{
MouseWork_Time = 0 ;
Breathe_Flag = 0 ;
}
Led_Colour = rand() % 7 ;
}
}
PWM_Count = All_PWM ;
}
if ( PWM_Count > 0 )
{
switch ( Led_Colour )
{
case RED : Red_Led = ON ; Green_Led = Blue_Led = OFF ; break ;
case GREEN : Green_Led = ON ; Red_Led = Blue_Led = OFF ; break ;
case BLUE : Blue_Led = ON ; Green_Led = Red_Led = OFF ; break ;
case YELLOW : Red_Led = Green_Led = ON ; Blue_Led = OFF ; break ;
case PURPLE : Red_Led = Blue_Led = ON ; Green_Led = OFF ; break ;
case CYAN : Green_Led = Blue_Led= ON ; Red_Led = OFF ; break ;
case WHITE : Red_Led = Green_Led = Blue_Led = ON ; break ;
default : break ;
}
PWM_Count-- ;
}
else Red_Led = Green_Led = Blue_Led = OFF ;
}
/*******************************************************************/
void main (void)
{
uchar Time50Ms_Count ;
Timer0_Init();
P3 = 0x10 ;
P3M1 = 0x10 ;
P3M0 = 0x0b ;
srand(0xffff) ;
while (1)
{
if ( Timer0_200UsFlag )
{
Timer0_200UsFlag = 0 ;
if ( ++Time50Ms_Count == 250 )
{
Time50Ms_Count = 0 ;
if ( Mouse_Standby == 0 )
{
Breathe_Flag = 1 ;
MouseWork_Time = 0 ;
}
else {
if ( Breathe_Flag ) MouseWork_Time++ ;
}
}
if ( Breathe_Flag ) Breathe_Control() ;
}
}
}
/*******************************************************************/
复制代码
为什贴出的代码会这样乱,无语!
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
9条回答
lcw_swust
2020-02-01 21:45
本帖最后由 lcw_swust 于 2012-11-26 10:07 编辑
三极管基极到发射级是一个二极管,电压最高0.7V左右,单片机IO口要在2V左右才认为是高电平
最好是检测集电极(注意加上拉电阻)(不好意思,先前说成发射极了)
加载中...
查看其它9个回答
一周热门
更多
>
相关问题
【东软载波ESF0654 PDS开发板活动】开箱
1 个回答
东软载波ESF0654 PDS开发板外部中断
1 个回答
东软载波ESF0654 PDS开发板高级控制定时器AD16C4T
1 个回答
用串口调试助手为什么只能在hex模式接收发送而在文本模式不行
9 个回答
触摸芯片SC02B/SC04B在地砖灯的设计方案
1 个回答
相关文章
51单片机与蓝牙模块连接
0个评论
51单片机的硬件结构
0个评论
基于51单片机的无线遥控器制作
0个评论
51单片机 AD转换
0个评论
51单片机数码管递增显示
0个评论
如何实现对单片机寄存器的访问
0个评论
基于51单片机的指纹密码锁
0个评论
×
关闭
采纳回答
向帮助了您的知道网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
51单片机
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
×
付费偷看金额在0.1-10元之间
确定
×
关闭
您已邀请
0
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
三极管基极到发射级是一个二极管,电压最高0.7V左右,单片机IO口要在2V左右才认为是高电平
最好是检测集电极(注意加上拉电阻)(不好意思,先前说成发射极了)
一周热门 更多>