为什么光敏电阻式光控开关不起作用

想把一个开关,替换为光敏电阻开关,不知道怎么整向各位大神请教【单片机吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:147,618贴子:
想把一个开关,替换为光敏电阻开关,不知道怎么整向各位大神请教收藏
想把一个开关,替换为光敏电阻开关,不知道怎么整向各位大神请教 ,如图中的p12~p31
我想让这个扬声器在无光条件下响,在有光时不响,一个是八个音调键,每个对应一个光敏电阻,
请大神们赐教。谢谢。源程序已附上。/**************************************************************程序名称:模拟电子琴**************************************************************/ #include&reg52.h&
//定义头文件#define uchar unsigned char//宏定义#define led P0//定义LED等位P0口#define sw_port P1//中间变量。。。使按键和led对应sbit buzzer=P2^7;//扬声器管脚sbit key1=P3^2;//播放音乐与弹奏歌曲转换sbit key3=P3^4;//掉电存储按键sbit key4=P3^5;
//播放掉电存储的歌曲
sbit keybofang=P3^3;//播放刚才弹奏的歌曲sbit key7=P3^0;//音调键。。。 和
歌曲键sbit key8=P3^1;//音调键。。。 和
歌曲键sbit key6=P1^7;sbit key5=P1^6;
sbit sda=P1^1;
//24c02数据线
sbit scl=P1^0;//24c02时钟线uchar keyd,i,keys,b;
//定义变量uchar tone_H;//定义变量uchar tone_L;//定义变量void beat_125(unsigned char);//声明函数uchar code beat1[]={16,8,8,8,8,4,4,16,8,4,4,8,4,4,4,//歌曲1节拍 4,4,4,16,16,8,8,4,4,12,8,16,16,8,4,4,4,4,16};uchar code song1[]={6,5,3,5,7,6,5,6,3,5,6,5,3,//歌曲1简谱2,1,6,5,3,2,2,3,5,5,6,3,2,1,5,3,2,1,6,1,1,15};uchar code beat2[]={7,7,7, 7,8,9, 1,2,3, 6,2,4, 4,4,4, 12, //歌曲二节拍8,2,2, 4,4,4, 8,2,2, 4,4,4, 2,2,4,4, 12,};uchar code song2[]={1,2,8, 8,5,1, 3,3,3, 5,4,3,//歌曲二简谱 5,4,3, 2, 2,1,0, 1,2,3, 4,3,2, 3,4,5, 5,4,3, 2,1,15};uchar code beat4[]={4,4,4, 6,2,4, 4,4,4, 6,2,4, 4,4,4, 12, 8,2,2, 4,4,4, 8,2,2, 4,4,4, 2,2,4,4, 12,};uchar code song4[]={1,1,1, 3,2,1, 3,3,3, 5,4,3, 5,4,3, 2, 2,1,0, 1,2,3, 4,3,2, 3,4,5, 5,4,3, 2,1, 15};uchar code tone[]={115,102,91,86,77,68,61,57};//歌曲音调unsigned int code tone1[]={,759,716,638,568,506,478,426,379,531,10}; //歌曲音调uchar song3[43];
//定义空数组void play(uchar*,uchar*);
//演奏歌曲函数void delay8um(uchar);
//第一8um延时函数void sound(uchar);//弹奏发声函数/*******************************************函数功能:节拍的延时的基本单位,用于24c08简单延时******************************************/ void delay()//简单延时函数{;;}/*******************************************函数功能:节拍的延时的基本单位,延时1ms******************************************/void delay1ms(uchar x)
//1um延时函数{while(x--)for(j=120;j&0;j--);}/**************************************************************函数功能:24c02驱动程序
用IIC总线进行传输**************************************************************/ void init_c02()//24c02初始化{sda=1;delay();scl=1;delay();}void start_c02()
//24c02的启动信号{scl=1;delay();
sda=1; delay();sda=0;delay();}void stop_c02()
//24c02停止信号{sda=0;delay();scl=1;delay();sda=1;delay();}void response_c02()//24c02的应答信号{scl=1;delay();while((sda==1)&&(i&250))i++;scl=0;delay();}void write_c02byte(uchar date)
//对24c02写一个字节{uchar i,temp=for(i=0;i&8;i++){temp=temp&&1;scl=0;delay();sda=CY;delay();scl=1;delay();}scl=0;delay();sda=1;delay();}uchar read_c02byte()//对24c02读一个字节{uchar i,k;scl=0;delay();sda=1;delay();for(i=0;i&8;i++){ scl=1;delay();k=(k&&1)|scl=0;delay();}}void write_addc02(uchar address,uchar date)//对24c02写一个数据{start_c02(); write_c02byte(0xa0);response_c02();write_c02byte(address);response_c02();write_c02byte(date);response_c02();stop_c02();}uchar read_addc02(uchar address)//从24c02读一个数据{start_c02();write_c02byte(0xa0);response_c02();write_c02byte(address);response_c02();start_c02();write_c02byte(0xa1);response_c02();date=read_c02byte();//response_c02;stop_c02();}/**************************************************************函数功能:主函数。。。。。。。。。。。。**************************************************************/
void main()//主函数{uchar yd,temp,jj,//定义变量uchar t1,i;//定义变量t1=0;//初始化 t1yd=0;
//初始化t2buzzer=1; //初始化蜂鸣器EA=1;//打开定时总中断TMOD=0x01;//设置定时器模式
定时器0工作在方式1ET0=1;//打开定时器0中断while(1)//主循环{led=0x3c;sw_port=0keys=~sw_//将led与按键结合起来switch(keys)//进入键盘选择{case 0x04:sound(0);temp=1;yd=0; //如果键盘1被按下发音do,同时设置标志temp,将数字计入ydcase 0x08:sound(1);temp=1;yd=1; //如果键盘2被按下发音ruai,同时设置标志temp,将数字计入ydcase 0x10:sound(2);temp=1;yd=2; //如果键盘3被按下发音mi,同时设置标志temp,将数字计入yd
case 0x20:sound(3);temp=1;yd=3; //如果键盘4被按下发音fa,同时设置标志temp,将数字计入yd}if(key5==0)//如果键盘5被按下发音la,同时设置标志temp,将数字计入yd{while(!key5)// 松手检测 sound(4);temp=1;yd=4;}if(key6==0)//如果键盘6被按下发音xi,同时设置标志temp,将数字计入yd{while(!key6)// 松手检测 sound(5);temp=1;yd=5;}if(key7==0)//如果键盘7被按下发音xi,同时设置标志temp,将数字计入yd{while(!key7)// 松手检测 sound(6);temp=1;yd=6;}if(key8==0)//如果键盘8被按下发音高音do,同时设置标志temp,将数字计入yd{while(!key8) //松手检测 sound(7);//播放高音do。。temp=1;yd=7;}if(temp==1)//标志位,如果标志位为1,则说明有按键被按下{temp=0;//将标识位归零song3[t1++]=//将数据存入song3[]数组}if(key3==0)//将数据存入24c02 ,掉电存储按键{delay1ms(10);if(key3==0)//检测是否key3被按下{P0=0;//如果被按下,将led打开while(!key3); //松手检测song3[t1++]=30;init_c02();//初始化24c02for(i=0;i&40;)//进入循环{write_addc02(i,song3[i++]);//将数据依次写入24c02delay1ms(10);//延时}
P0=1;//led关闭}}if(key4==0)//读取24c02中的数据,掉电播放{delay1ms(10);if(key4==0){//检测是否有键被按下while(!key4);//松手检测init_c02(); //初始化P0=0;//将led打开tt=1;//将tt初值设为0while(read_addc02(tt)!=30)//进入while循环{jj=read_addc02(tt++);tone_H=(65536-tone1[jj])/256;//设定初值tone_L=(65536-tone1[jj])%256;//设定初值
TH0=tone_H;//赋值TH0高八位TL0=tone_L;//赋值TL0低八位TR0=1;
//打开定时器beat_125(3); //延时TR0=0;beat_125(4);//关闭定时器}P0=1;//关闭led
}}if(keybofang==0){while(!keybofang);//检测回放键是否被按下song3[t1++]=30;
//t1=0;while(song3[i]!=30)//进入while循环。{ tone_H=(65536-tone1[song3[i]])/256;tone_L=(65536-tone1[song3[i]])%256;TH0=tone_H;TL0=tone_L;TR0=1;//开启定时器
beat_125(3);
TR0=0;//关闭定时器i++;beat_125(4);//将i值加一
}if(key1==0){delay1ms(10);if(key1==0)//检测key1是否被按下{while(!key1);P0=0;//关闭ledwhile(key1)//进入循环{
if(key7==0)
//检测key7是否被按下{delay1ms(10);if(key7==0){P0=0//设置led灯亮个数while(!key7);//等待释放play(song1,beat1);//演奏歌曲1P0=0//关闭led}}if(key8==0)//检测是否key8键被按下{delay1ms(10);if(key8==0){P0=0//设置led灯亮while(!key8);//松手检测play(song2,beat2);//播放歌曲2P0=0//关闭led}}if(key6==0)//检测是否key6键被按下{delay1ms(10);if(key6==0){P0=0//设置led灯亮while(!key6);//松手检测play(song4,beat4);//播放歌曲4P0=0//关闭led}}
}while(!key1);//检测key1是否被按下P0=1;//如果被按下。退出该函数。。并关闭led}}}}/**************************************************************函数功能:从数组中播放歌曲**************************************************************/ void play(uchar*song,uchar*beat)//播放歌曲函数{i=0;//设置初始值while(song[i]!=15)//
进入循环函数{ tone_H=(65536-tone1[song[i]])/256;//定义初值tone_L=(65536-tone1[song[i]])%256;//定义初值TH0=tone_H;//赋值TL0=tone_L; //赋值TR0=1;//打开定时器0beat_125(beat[i]);//读取节拍函数i++;//自加 TR0=0;//关闭led}}/**************************************************************函数功能:定时器T0的中断服务子程序,使P2.7引脚输出音频方波**************************************************************/ void tone_timer() interrupt 1 //中断子程序{TH0=tone_H;TL0=tone_L;buzzer=~//扬声器开关控制}/**************************************************************函数功能:产生节拍的函数**************************************************************/ void beat_125(uchar x)//节拍。。{uchar i,j,k;//125ms延时函数。。for(i=0;i&x;i++)for(j=0;j&125;j++)for(k=0;k&120;k++);}/**************************************************************函数功能:8um简易延时**************************************************************/ void delay8um(uchar x)//8ms延时函数{uchar i,j;for(i=0;i&x;i++)for(j=0;j&1;j++);}/**************************************************************函数功能:产生音调**************************************************************/ void sound(uchar x)//音调函数{led=sw_//定义ledfor(i=0;i&60;i++){buzzer=0;delay8um(tone[x]);//开关频率。。从而产生节拍buzzer=1;delay8um(tone[x]);}led=0}
电子琴按键可以改装么
我已经解决了多谢
登录百度帐号光敏电阻不适合做什么_百度知道
光敏电阻不适合做什么
我有更好的答案
因为光敏电阻的阻值会受环境光的影响而发生变化,所以,光敏电阻不适合在电路中做固定电阻使用。
光敏电阻是感光电阻元件
原理是制作材料在特定波长的光照射下,其阻值迅速变化光敏电阻器一般用于光的测量、光的控制和光电转换(将光的变化转换为电的变化)。光敏电阻器对光的敏感性(即光谱特性)与人眼对可见光(0.4~0.76)μm的响应很接近,只要人眼可感受的光,都会引起它的阻值变化,多用于光控电路
为您推荐:
其他类似问题
您可能关注的内容
勃兰兑斯的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。图1光敏电路中为什么光敏电阻要与一个阻串联,而不_百度知道
图1光敏电路中为什么光敏电阻要与一个阻串联,而不
我有更好的答案
限流电阻,不然光敏电阻的阻值变化时候会引起电压波动。
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。光敏电阻为什么不需要不平衡电阻和放大电路_百度知道
光敏电阻为什么不需要不平衡电阻和放大电路
我有更好的答案
它自己可以调节。
它自己可以调节。
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。}

我要回帖

更多关于 光敏电阻工作原理 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信