|
用单片机和LED灯珠DIY条码闪灯-单灯闪条码-在镜头前会产生条形码的LED闪灯-全球首发!
LED频闪灯照射手机摄像头会出现条纹,利用此原理现象,通过单片机控制LED的高速亮灭再照射摄像头以出现条形码,从此可被条码扫描软件识别出,可设置输出频率对不同帧数的摄像头进行识别。
只需一片STC系列单片机任意型号和1颗高亮LED即可制作完成,你值得尝试!
扫不出的需要调制扫描角度、延迟时间、晶振频率、摄像头、LED和扫码软件,最后更换成大功率LED灯板或灯珠再加入电机驱动模块或MOS管等IO口控制大功率负载高速通断开关模块即可。
源码免费公开使用,用Keil编译后烧写到C51单片机内即可:
- #include <stc15f104e.h> //定义头文件stc15f104e.h
- #include<intrins.h> //定义头文件intrins.h
- sbit led = P3 ^ 3; //LED对应I/O口,可直接修改
- unsigned char k=0; //条形码位数据延迟持续时间
- bit l=0;//延迟时间增加或减少
- unsigned char code n[20]={ //条形码数据,从低到高位输出,通过转换软件生成
- 0xA4,0xAD,0x95,0xB5,0xA6,0x5A,0x59,0x2B,0x5B,0x4B,0xB3,0x6A,0x2D,0xAD,0xA6,0x56,
- 0x56,0xD3,0xD2,0x16
- };
- bit r(unsigned char a){ //读条形码数据,参数取值0~255,最多256位条形码数据(共32字节)
- unsigned char b=a>>3;//获得这个位是在第几字节里的
- unsigned char c=a&7; //获得这个位是该字节的第几位
- return (1<<c&n[b])>>c; //通过移位计算并且返回位数据
- }
- void s(bit s){ //设置LED亮灭状态并且包含延迟
- unsigned char i=0; //延迟时间计数变量
- for(i=0;i<k;i++);//延迟时间计数
- led=s; //将亮灭数据赋值给LED
- }
- void main(){ //主函数
- unsigned char j=0; //条形码数据采样位置计数变量
- while(1){ //进入死循环
- if(l==0){ //加长时间
- k++; //延迟时间加1
- } else { //减少时间
- k--; //延迟时间减1
- }
- for(j=0;j<=160;j++){ //点亮LED一些时间
- s(0); //LED点亮
- }
- for(j=0;j<=160;j++){ //循环计数,条形码多少位这里改多少
- s(r(j)); //输出条形码位数据给LED
- }
- if(k==0x00||k==0xFF){ //延迟时间加满或者减零
- l=~l; //延迟时间增减取反
- }
- }
- }
复制代码
|
评分
-
查看全部评分
|