简单的点阵书写屏
<div class='showpostmsg'> 本帖最后由 ginny 于 2016-1-12 19:52 编辑现在网上有很多点阵书写屏,突然心血来潮也想做一个玩玩,做个简单的,能实现功能就行。
硬件基本上用的是51开发板上的,stc的单片机,光笔用的是光敏电阻,其实最好用光敏二级管和光敏三极管,
可惜手头上没有。光敏电阻的缺点就是响应时间在ms级太慢了,光敏三级管可以达到us级。
用光敏电阻大的点阵书写屏做不了,先做个8*8的玩玩。红绿双色点阵屏,可以简单组成三种颜色。
点阵书写屏最重要的就是读取光笔的坐标,有了它你就玩花样了。
读取方式很多,大部分是用定时扫描。我的比较简单就直接用类似矩阵按键那样的扫描方式,逐行逐列扫描。
话不多说,看图:
光敏电阻遇到光电阻会减小,我就把它串联一个电阻,然后单片机读取这个电阻的电压,
3.5v以上的电压单片机就会认为是1,电路图很简单的。
如果不书写时,扫描最好不要进行,所以我后来装了个按键
经过不断的改进调延时,最后做出一个简单版点阵书写屏。
它有颜色选择:绿色、红色、混色(绿色和红色),还有擦除功能。
看看书写的效果,手机拍摄效果太差,只能用亚克力板挡掉一些光线。
最后看视频http://player.youku.com/player.php/sid/XMTQ0MzIyMDAyNA==/v.swf
</div><script> var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;" style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
if(parseInt(discuz_uid)==0){
(function($){
var postHeight = getTextHeight(400);
$(".showpostmsg").html($(".showpostmsg").html());
$(".showpostmsg").after(loginstr);
$(".showpostmsg").css({height:postHeight,overflow:"hidden"});
})(jQuery);
} </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script> 思路不错,结合AD可以作个带灰度的 cj_in 发表于 2016-1-12 19:54
思路不错,结合AD可以作个带灰度的
嗯嗯,是的,如果用stm32和光敏三极管就可以实现更多功能了。 腻害啊 {:1_103:}{:1_103:} 创意不错,可以搞个小产品 真棒的创意,赞一个 有新意 做得非常好。
虽然原理没有什么新颖,但能使用这个原理做成东西却非常了不起!! 光敏电阻旁边是不是连了一个按键? 很久之前电子竞赛做的这个。。。可惜能力不足 suoma 发表于 2016-1-12 21:37
光敏电阻旁边是不是连了一个按键?
嗯,是的,接了个按键。按键的作用是:按下去点阵才开始扫描。因为一直扫描的话,显示效果不好。
如果要效果更好些,可以把按键设计成光笔下压的按键。这样只要光笔在点阵屏上一压就开始扫描,这样同步性更好。 daiyoko 发表于 2016-1-13 19:41
小白看不懂,為何放在某點就會亮起來?
如何判斷點陣試的位置??
行列扫描方式,和矩阵按键原理一样。首先行扫描,从第一行扫描到第八行。
假设光笔是在第四行,那么当扫描到第四行时,光笔的电阻就会迅速降低,
这时再读取光笔的电压值,如果下降到一定阻值时,单片机读到的就为0(0到1.5v stc单片机会认为是0)。
记录下当前行,然后开始列扫描,从第一列扫描到第八列,假设光笔在第三列,
那么扫描到第三列时,单片机就会读到0,这时再记录当前列。最后就得到了本次扫描时光笔的坐标值了。
然后把这个坐标存储在一个数组里,这个数组就是需要显示的所有点阵坐标。
因为扫描和点阵的显示是分时的,所以只要控制好延时就可以显示出触屏的效果了。 本帖最后由 ginny 于 2016-1-15 12:49 编辑
daiyoko 发表于 2016-1-14 20:09
還是不明白
下面是 8x8 点阵屏,手上是光敏電阻。
+++++++++++++++++
+ x + y ++++ ...
单片机通过读光敏电阻的电压来判断光笔所在位置。
光笔受光照光敏电阻变的很小,单片机读到0,光笔没有受光照光敏电阻变的很大,单片机读到1。
单片机每扫描行(列)读取一次,读到0时记录行(列)值。
假设这是8x8点阵:
12345678
———————————
1 | 00000000
2 | 00000000
3 | 00000000
4 | 00000000
5 | 00000000
6 | 00000000
7 | 00000000
8 | 00000000
现在我们假设光笔在第4行第3列坐标就为(4,3),图中加号位置。
12345678
———————————
1 | 00000000
2 | 00000000
3 | 00000000
4 | 00+00000
5 | 00000000
6 | 00000000
7 | 00000000
8 | 00000000
现在点阵扫描正在就进行,从第1行扫描开始。
12345678
———————————
1 | ********
2 | 00000000
3 | 00000000
4 | 00+00000
5 | 00000000
6 | 00000000
7 | 00000000
8 | 00000000
当扫描到第4行时
12345678
———————————
1 | 00000000
2 | 00000000
3 | 00000000
4 | **+*****
5 | 00000000
6 | 00000000
7 | 00000000
8 | 00000000
光敏电阻电阻降低,单片机读到了0,也就可以得到光笔的所在行数,第4行。
接下来就是要读光笔的列了,所以现在停止行扫描开始列扫描,从第1列扫描开始。
12345678
———————————
1 | *0000000
2 | *0000000
3 | *0000000
4 | *0+00000
5 | *0000000
6 | *0000000
7 | *0000000
8 | *0000000
当从第1列扫描时,光笔所在的点阵没有亮,所以光敏电阻的电阻此时又会上升到很大阻值,单片机就会读到1。
当扫描到第3列时
12345678
———————————
1 | 00*00000
2 | 00*00000
3 | 00*00000
4 | 00+00000
5 | 00*00000
6 | 00*00000
7 | 00*00000
8 | 00*00000
光敏电阻电阻降低,单片机读到了0,也就可以得到光笔的所在列数,第3列。
这样就得到了光笔的坐标了(4,3)。
所以你说的如何判断x位还是y位,因为x、y在同一行,所以没法通过行来判断的,但如果再扫描一次列就可以区分x、y了。
再说下时间吧。
光笔停留在一个位置是有一定时间比如0.2s。0.2s对于我们人来说太短了,但对于单片机,它可是可以干很多很多事的。比如再进行一次扫描,扫描行完后再扫描列。其实也有一种情况发生,就是当扫描得到行值后去扫描列时,光笔位置移动了,这时就可能读取到错误的列值了。当然如果你把扫描间隔时间调短些,这种情况发生的几率就非常小了。
所以不是通过时间来判断坐标的,时间只是让扫描可以进行。 很巧妙的设计,赞~{:1_103:} 很有意思的设计,膜拜一下。 简单的原理新奇的创意 做出来的 就是不一样。这个让我想起了小时候连接电视 玩射击的游戏机 (约)09年全国大学生电子竞赛专科组的题目,屏幕比这个大。 留爪,正在准备做这个 点阵用的是片机原来的?他和光笔是如何匹配的? 挺有创意的
页:
[1]