返回主页 单片机教程XL2000开发板 单片机学习 自制编程器 单片机资料 软件下载 电子技术产品介绍如何购买 进入论坛

第三届单片机征文精选稿件深圳学林电子www.51c51.com 版权所有 转载注明出处  
作品1:51单片机的LED点阵屏设计 (河南省新乡市 邢建鹏)作品5:基于视觉暂留原理的摇动显示装置 (黑龙江 刘庆宇
作品2:电子时钟加日历显示 (甘肃省天水 叶思奇作品6:单片机,让我的生活更精彩 (北京市 彭宏伟)
作品3:单片机软件实现直流电机PWM以及电机测速 (温州 叶祥祥)作品7:学习单片机的心得体会 (成都市  唐平)
作品4:多任务系统设计思想的数控稳压源设计 (湖北 程海朋)

                          基于视觉暂留原理的摇动显示装置

                                    刘庆宇

                        黑龙江八一农垦大学信息技术学院05电气


摘要:“摇动显示装置”,俗称“摇摇棒”,是基于人的视觉暂留原理的,通过分时刷新32个发光二极管来显示输出文字或图案等信息的显示装置。输出信号频率的控制通过单片机来实现,用摇动传感器检测当前摇动状态。当进行摇动时,由于人的视觉暂留原理,会在发光二极管摇动区域产生一个视觉平面,在视觉平面内的二极管通过不同频率的刷新,会在摇动区域内产生图像,从而达到在该视觉平面上传达信息的作用。
关键字:单片机;摇摇棒;发光二极管 ;摇动



前言:随着人们物质生活水平的提高,人们对精神生活的追求也愈加强烈,对信息的渴求已成为了人们必不可少的需要,更加简捷与新颖的信息传递方式无疑会给人们带来耳目一新的感受。而现代工具务求简捷化、便携化,因此,摇动显示装置的到来,必将会给人们带来一种新的方便的文化传递方式。



一、系统硬件
系统功能主要体现在3个部分:
(1)单片机控制(STC12C2052)
本装置采用了STC12C2052单片机,它支持直接通过串口线下载程序,对于本设计而言,显示文字需经常改变,STC12C2052方便许多,因此选择STC12C2052作为本设计所用的单片机。
(2)显示功能。(D1~D32)
信息传递主要由显示来完成,本设计显示功能由32个发光二极管来完成。32个发光二极管分为4组,以共阳的方式连接,共用P1口作为数据输出口。另外4条I/O口作为段选,通过三极管选通相应段。
(3)传感器系统。(S2)
硬件传感器主要为摇动传感器,本设计的摇动传感器由滚珠开关构成。
可选摇动开关有水银摇动开关和滚珠开关两种。水银摇动开关稳定性较高,但容易发生破裂,水银外泄,安全性较差。滚珠开关稳定性稍差,但不容易损坏,安全度很高。考虑到实际应用环境,故选用滚珠开关作为系统的摇动传感器。由滚珠开关带来的不稳定性可以通过软件进行弥补。



            图1:滚珠开关内部结构图


另外D_B1和D_B2为装饰用的蓝色发光二极管,J1为串口,供下载程序用。J2和J3为电池盒插座。



                                           图2:系统硬件原理图


二、系统软件

系统开始运行,内部进行初始化后,等待外部中断。当摇动到指定位置时,由滚珠开关出触发外部中断,再经过一段时间延时后开始显示。显示完成返回主程序,等待下一个摇动周期的到来。
程序清单如下:
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int


#define out P1 //数据输出端口
sbit led1=P3^2; //第1组LED
sbit led2=P3^4; //第2组LED
sbit led3=P3^5; //第3组LED
sbit led4=P3^7; //第4组LED


uchar code disp_tab[]=
{0xFF,0xFF, 0x0F,0xFF,
0xFF,0x9F, 0xFF,0xFF,
0xFF,0xCF, 0x00,0x80,
0xFF,0xE7, 0x00,0x80,
0xFF,0xF3, 0xEF,0xFF,
0xFF,0xF8, 0xDF,0xFF,
0x00,0xFC, 0x8F,0x9F,
0x00,0xFE, 0x81,0x9C,
0x7F,0xFC, 0xE1,0x9C,
0xFF,0xF9, 0xE7,0x9C,
0xFF,0xF3, 0x00,0x80,
0xFF,0xE7, 0x00,0x80,
0xFF,0xCF, 0xE7,0x9C,
0xFF,0x9F, 0xE7,0x9C,
0xFF,0xDF, 0xE7,0x9F,
0xFF,0xFF,0xFF,0xFF,

0xFF,0xDF, 0xFF,0xF7,
0xCF,0xCF, 0xE7,0xE7,
0xCF,0xE7, 0xE7,0xF3,
0xCF,0xF7, 0xE7,0xF9,
0xCF,0xE3, 0x67,0xF0,
0xCF,0xC9, 0x27,0xF2,
0xCE,0xDC, 0x07,0xF3,
0x48,0x9E, 0x00,0x80,
0x09,0x9F, 0x00,0x80,
0x8F,0x9F, 0x27,0xF3,
0x8F,0x9F, 0x67,0xF2,
0xCF,0x9F, 0xE7,0xF0,
0xCF,0x9F, 0xE7,0xF9,
0xCF,0x9F, 0xE7,0xF3,
0xFF,0x9F, 0xE7,0xF7,
0xFF,0xFF,0xFF,0xFF,

0xFF,0xFD, 0xFF,0xFF,
0xE7,0xFC, 0xFF,0xFD,
0x64,0xFE, 0xBB,0x85,
0x20,0x80, 0x2A,0x85,
0x01,0x80, 0x28,0xD4,
0x47,0xFC, 0xA9,0xD4,
0x3F,0x99, 0xAB,0xD5,
0xB3,0xCF, 0x03,0xD4,
0xF3,0xE3, 0x03,0xD4,
0x03,0xF0, 0xA9,0xD5,
0x03,0x9C, 0xA8,0xD4,
0xF3,0x9F, 0x2A,0x84,
0xF3,0x8F, 0x2B,0x85,
0x03,0xC0, 0xBB,0xFD,
0x03,0xE0, 0xFF,0xFD,
0xFF,0xFF,0xFF,0xFF};


void delay(n); //延时子程序
void display(); //显示子程序


void main()
{
EX1=1; //开放外部中断1
IT1=0; //中断1为边沿触发方式
EA=1;
while(1);
}


void display()
{uchar i,n;
n=0; //初始化数据表计数
for(i=0;i<48;i++) //共显示16*3=48列
{
out=0xff; //清显示
led4=1; //关闭第4组LED
led1=0; //开启第1组LED
out=disp_tab[n++]; //输出数据到LED
delay(20); //延时

out=0xff; //清显示
led1=1; //关闭第1组LED
led2=0; //开启第2组LED
out=disp_tab[n++]; //输出数据到LED
delay(20); //延时

out=0xff; //清显示
led2=1; //关闭第2组LED
led3=0; //开启第3组LED
out=disp_tab[n++]; //输出数据到LED
delay(20); //延时

out=0xff; //清显示
led3=1; //关闭第3组LED
led4=0; //开启第4组LED
out=disp_tab[n++]; //输出数据到LED
delay(20); //延时
}
}


void delay(n)
{
uchar i;
for(;n>0;n--)
{
for(i=0;i<7;i++);
}
}


void int1() interrupt 2 //使用外部中断1
{
uint i=5000; //延时一段时间开始显示
out=0xff;
while(i--);
display(); //显示
}


三、“pctolcd2002”软件使用方法
程序中“字符点阵数据表”中的数据是由“pctolcd2002”软件生成的,下面介绍使用pctolcd2002生成3个×2行的汉字点阵数据的方法:
1、启动pctolcd2002软件,“模式”设为“字符模式”。字宽和字高设为16*16。“选项”中的“自定义格式”选择“C51”格式。其它默认即可。

2、输入第一行的三个(或四个)汉字,生成字模。
例如:
{0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11}
{0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22}
{0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33}
3、将字模保存好,输入第二行的三个(或四个)汉字,生成字模。
例如:
{0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44}
{0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55}
{0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66}
4、由于摇摇棒是逐列扫描,需要将同一列上下两行16位的数据组成一列32位数据。

按上面的数据,组合后为:
{0x11,0x11,0x44,0x44,
0x11,0x11,0x44,0x44,
0x11,0x11,0x44,0x44,
0x11,0x11,0x44,0x44,
0x22,0x22,0x55,0x55,
0x22,0x22,0x55,0x55,
0x22,0x22,0x55,0x55,
0x22,0x22,0x55,0x55,
0x33,0x33,0x66,0x66,
0x33,0x33,0x66,0x66,
0x33,0x33,0x66,0x66,
0x33,0x33,0x66,0x66};
5、将数据替换,如每行显示4个汉字则修改程序 for(i=0;i<48;i++)为 for(i=0;i<64;i++)



四、结论
本文以传感器和单片机的实际应用为背景,介绍了以单片机和传感器为核心系统摇动传感器和显示设计的基本结构和基本原理。
本文将使用单片机对摇动显示进行实例化,设计一个LED摇动显示器来显示文字、图像等信息。掌握利用8051型单片机对发光二极管阵列进行摇动控制的方法。输出信号频率的控制通过单片机来实现,用摇动传感器检测当前摇动状态,用32个发光二极管进行不同频率的亮灭刷新,通过手动摇动可显示输出文字及图案等信息。当进行摇动时,由于人的视觉暂留原理,会在发光二极管摇动区域产生一个视觉平面,在视觉平面内的二极管通过不同频率的刷新,会在摇动区域内产生图像,从而达到在该视觉平面上传达信息的作用。
设计具有市场前景,可满足各种大型演出、集会、游行等宣传需要,为人们的生活提供便利。