|
发光二极管,就是LED,一般只用来当小电灯使,其实这个半导体元件,也具有光电效应的,利用这个特性,就可以做出有趣的按钮来。
基本思想是1,加正向电压发光,PN结没有积累电荷。2,立刻加反向电压,熄灭,PN结电容充电。3,断开正反向电压,让PN结链接到高电阻,开始放电。如果发光管不受光照,结的反向电阻大,放电慢。如果这时PN结受到光照,结的反向电阻减小,放电加快。
如果检测放电时间,长=无光照,短=有光照。可以在感光的LED旁,安装另一个LED作为光源,手指头按上去,有光线反射到感光管,手指头不按,没有光线照射感光管。
说了半天AVR又起什么作用呢?注意,AVR的口作为输入口,有两种状态:带上拉电阻的状态和不带上拉电阻的状态。在后一个状态,输入电阻很高。现在把感光LED1的两端分别接到两个口线上,例如+接PB0和-接PB1,另一口线PB2驱动光源LED2。
这样编程:
PB0,PB1,PB2输出,PB0高,PB1低,PB2高,LED1,LED2亮。
PB0,PB1,PB2输出,PB0低,PB1高,PB2高。LED1灭,反向充电,LED2亮。
PB0,PB2输出,PB1不带上拉电阻输入,PB0低,PB2高,LED1放电,LED2亮。
经过一段时间,例如7毫秒,检测PB1电位,如果高,放电慢,无光照。如果低,放电快,有光照。
要注意的是LED2发出的光不能直接照射LED1,必须通过手指反射。LED要使用无色透明封装的,发光和感光颜色要一样。都是红色就可以。
优点:不存在机械磨损,接触不良,触点弹跳
缺点:多占用口线,强光环境下不便使用,室内还是可以的。
试试看吧?
(转)430也可以实现
|
|