PIC单片机利用视觉暂留现象显示字符
Persistance of Vision (PoV), 即视觉暂留现象, 人眼在观察景物时,光信号传人大脑神经,需经过一段短暂的时间,光的作用结束后,视觉形象并不立即消失,这种残留的视觉称“后像”,视觉的这一现象则被称为“视觉暂留”。其具体应用是电影的拍摄和放映。原因是由视神经的反应速度造成的.其时值是二十四分之一秒。是动画、电影等视觉媒体形成和传播的根据。
利用PoV,还可以制作电子小玩意,比如利用几个LED,就能显示图案,字符等。
下面是一个利用PoV显示时钟的例子:
下面是一段利用PoV显示字符的PIC单片机程序,利用CCS C编译器编译:
主程序文件: pov.c
#include "font.h"
#include "font.c"
#fuses HS,NOWDT,NOPROTECT,NOLVP /* DONNOT use WDT */
/* Port D drives the LEDs */
#use fast_io(D)
#use delay(clock = 4000000) /* the crystal frequency is 4.000 MHz*/
void display_string(int8 *str)
{
int8 font_matrix_buf[FONT_WIDTH];
int8 i, j;
for(i = 0; str[i] != 0; i++)
{
get_font_matrix(str[i], font_matrix_buf);
for(j = 0; j < FONT_WIDTH; j++)
{
output_d(font_matrix_buf[j]); /* output the dots */
delay_ms(5); /* delay some time */
}
output_d(0x00);
delay_ms(5);
}
}
/**********************************************************
Description:
The entry point of the whole program.
Parameters:
None.
Return Value:
None.
Note:
N/A.
Date:
2006-04-02
**********************************************************/
void main(void)
{
int8 string[]= {'C', 'h', 'i', 'n', 'a', 0x00};
set_tris_d(0x00); /* set portD to output mode */
while(1)
{
display_string(string);
delay_ms(200);
}
}
字模头文件: font.h
#define FONT_H
#define FONT_WIDTH 5
/*
CCS C doesn't support double-byte array subscript. so we must put the font table
in different arrays.
*/
#define FONT_BLANK_TABLE_SIZE (1 * FONT_WIDTH)
#define FONT_NUMBER_TABLE_SIZE (10 * FONT_WIDTH)
#define FONT_UPPER_CASE_TABLE_SIZE (26 * FONT_WIDTH)
#define FONT_LOWER_CASE_TABLE_SIZE (26 * FONT_WIDTH)
void get_font_matrix(int8 ascii_code, int8 *buf);
#endif
字模c文件: font.c
*8*8ASC码字模头文件
*右转90度ASC字模
*Modify:2005-3-16 14:31
********************************************************************/
const int8 font_blank_table[FONT_BLANK_TABLE_SIZE] = {
0x00,0x00,0x00,0x00,0x00// blank
};
const int8 font_number_table[FONT_NUMBER_TABLE_SIZE] = {
0x7C,0xA2,0x92,0x8A,0x7C,// 0
0x00,0x84,0xFE,0x80,0x00,// 1
0xC4,0xA2,0x92,0x8A,0x84,// 2
0x42,0x82,0x8A,0x96,0x62,// 3
0x30,0x28,0x24,0xFE,0x20,// 4
0x4E,0x8A,0x8A,0x8A,0x72,// 5
0x78,0x94,0x92,0x92,0x60,// 6
0x02,0xE2,0x12,0x0A,0x06,// 7
0x6C,0x92,0x92,0x92,0x6C,// 8
0x0C,0x92,0x92,0x52,0x3C// 9
};
const int8 font_uletter_table[FONT_UPPER_CASE_TABLE_SIZE] = {
0xFC,0x22,0x22,0x22,0xFC,// A
0xFE,0x92,0x92,0x92,0x6C,// B
0x7C,0x82,0x82,0x82,0x44,// C
0xFE,0x82,0x82,0x44,0x38,// D
0xFE,0x92,0x92,0x92,0x82,// E
0xFE,0x12,0x12,0x12,0x02,// F
0x7C,0x82,0x92,0x92,0x74,// G
0xFE,0x10,0x10,0x10,0xFE,// H
0x00,0x82,0xFE,0x82,0x00,// I
0x40,0x80,0x82,0x7E,0x02,// J
0xFE,0x10,0x28,0x44,0x82,// K
0xFE,0x80,0x80,0x80,0x80,// L
0xFE,0x04,0x18,0x04,0xFE,// M
0xFE,0x08,0x10,0x20,0xFE,// N
0x7C,0x82,0x82,0x82,0x7C,// O
0xFE,0x12,0x12,0x12,0x0C,// P
0x7C,0x82,0xA2,0x42,0xBC,// Q
0xFE,0x12,0x32,0x52,0x8C,// R
0x4C,0x92,0x92,0x92,0x64,// S
0x02,0x02,0xFE,0x02,0x02,// T
0x7E,0x80,0x80,0x80,0x7E,// U
0x3E,0x40,0x80,0x40,0x3E,// V
0x7E,0x80,0x70,0x80,0x7E,// W
0xC6,0x28,0x10,0x28,0xC6,// X
0x0E,0x10,0xE0,0x10,0x0E,// Y
0xC2,0xA2,0x92,0x8A,0x86// Z
};
const int8 font_lletter_table[FONT_LOWER_CASE_TABLE_SIZE] = {
0x40,0xA8,0xA8,0xA8,0xF0,// a
0xFE,0x88,0x88,0x88,0x70,// b
0x70,0x88,0x88,0x88,0x88,// c
0x70,0x88,0x88,0x88,0xFE,// d
0x70,0xA8,0xA8,0xA8,0x10,// e
0x08,0x08,0xFC,0x0A,0x0A,// f
0x10,0xA8,0xA8,0xA8,0x78,// g
0xFE,0x10,0x08,0x08,0xF0,// h
0x00,0x88,0xFA,0x80,0x00,// i
0x40,0x80,0x88,0x7A,0x00,// j
0xFE,0x20,0x50,0x88,0x00,// k
0x00,0x82,0xFE,0x80,0x00,// l
0xF8,0x08,0xF8,0x08,0xF0,// m
0xF8,0x10,0x08,0x08,0xF0,// n
0x70,0x88,0x88,0x88,0x70,// o
0xF8,0x28,0x28,0x28,0x10,// p
0x10,0x28,0x28,0x28,0xF8,// q
0xF8,0x10,0x08,0x08,0x00,// r
0x90,0xA8,0xA8,0xA8,0x48,// s
0x08,0x08,0x7E,0x88,0x88,// t
0x78,0x80,0x80,0x40,0xF8,// u
0x38,0x40,0x80,0x40,0x38,// v
0x78,0x80,0x60,0x80,0x78,// w
0x88,0x50,0x20,0x50,0x88,// x
0x18,0xA0,0xA0,0xA0,0x78,// y
0x88,0xC8,0xA8,0x98,0x88// z
};
void get_font_matrix(int8 ascii_code, int8 *buf)
{
int8 i;
int8 base;
if(ascii_code == ' ')
{
for(i=0, base=0; i < FONT_WIDTH; i++)
{
*(buf+i) = font_blank_table[base + i];
}
}
else if(ascii_code >= '0' && ascii_code <= '9')
{
for(i=0, base = (ascii_code - '0') * FONT_WIDTH; i < FONT_WIDTH; i++)
{
*(buf+i) = font_number_table[base + i];
}
}
else if(ascii_code >= 'A' && ascii_code <= 'Z')
{
for(i=0, base = (ascii_code - 'A') * FONT_WIDTH; i < FONT_WIDTH; i++)
{
*(buf+i) = font_uletter_table[base + i];
}
}
else
{
for(i=0, base = (ascii_code - 'a') * FONT_WIDTH; i < FONT_WIDTH; i++)
{
*(buf+i) = font_uletter_table[base + i];
}
}
}
这段程序会在PIC单片机的Port D点亮一排LED,用手晃动这排LED,就会看到“china”字样。
转载于:https://blog.51cto.com/techlife/97500
PIC单片机利用视觉暂留现象显示字符相关推荐
- 基于Arduino的视觉暂留现象和频闪效应演示系统程序设计
[前言]: 此项目是为了初学Arduino而做的小练习,耗时3天多,在此做一个记录. 该系统可以演示频闪效应和视觉暂留现象,硬件设计已给出,需在此基础上设计程序,满足演示需求. [演示需求]: 风扇共 ...
- 探究性学习任务1:关于“视觉暂留”现象的探究性学习
推荐浏览的主题内容: 百度百科中对"视觉暂留"的解释 视觉暂留与动画 教学视频 小实验:流星后为什么会留下一道亮线? 小实验:小鸟飞进笼子了吗? 小实验:把两枚硬币变成三枚 小实验 ...
- 基于物联网的视觉暂留风扇设计
论文下载:知网链接 版权所有,有相关问题或索要完整代码实现请联系作者gzn00417或邮箱gzn00417@foxmail.com 基于物联网的视觉暂留风扇设计 郭茁宁1,林亦宁2,何胜阳2 哈尔滨工 ...
- c语言动态扫描原理,基于视觉暂留的动态扫描LED旋转屏
2.3 红外解码 红外遥控器与电器之间的通信存在一个通信协议,一般是单向的通信协议.这个单向的通信协议称为红外遥控编码协议.本文使用NEC红外编码协议,当发射器按键按下后,即有遥控码发出,所按的键不同 ...
- 电影是根据似动现象还是视觉暂留发明的?
链接:https://www.zhihu.com/question/30614811/answer/48750886 我们常以为的,在影院或电脑上看到的电影是他们自动放映的结果,我们只需要机械的接受就 ...
- CES Asia专题|视觉暂留黑科技,这款全息展示机有点酷
利用视觉暂留原理,把传统图像转变为带有浮空效果的视频. 去年镁客君曾经报道过一种"黑科技"产品--空间发生器,这是一种利用视觉暂留技术的悬屏.而在今年的CES Asia上,我们再次 ...
- 视觉暂留:余晖效应/视觉暂留
ylbtech-视觉暂留:余晖效应/视觉暂留 视觉暂留现象(Visual staying phenomenon,duration of vision)又称"余晖效应".人眼在观察景 ...
- 视觉暂留-Info:这些神奇的“视觉暂留”动画,每一幅都让人拍案叫绝!
ylbtech-视觉暂留-Info:这些神奇的"视觉暂留"动画,每一幅都让人拍案叫绝! 1.返回顶部 1. 这些神奇的"视觉暂留"动画,每一幅都让人拍案叫绝! ...
- 数码管动态显示Verilog实现(参考小梅哥教程)(视觉暂留)
一个数码管有八个引脚,控制八段二极管的亮灭,用以显示需要的数字. 当有N个数码管时,一个一个控制的话需要N x 8 个引脚,消耗资源较多. 因此可以利用动态显示的方案通过人眼的视觉暂留特性达到静态显示 ...
最新文章
- sj 网页前端与后台数据交互的3种方式
- 学习笔记(二十二)—— 了解进程和线程
- 计算机网络工作组英文,十进制网络标准工作组:IPv4,IPv6,IPv9三代协议比较
- 机智云代码移植_一步一步移植麒麟座例程到机智云GoKit V2.1
- SpringBoot—自定义线程池及并发定时任务模板
- PDE抛物型方程数值解法总结与例题分析
- iOS开发之创建颜色渐变视图View
- 手柄xinput模式_让你的普通手柄变成360手柄(XInputEmulator)下载_让你的普通手柄变成360手柄(XInputEmulator)官方下载-太平洋下载中心...
- 深度学习网络训练技巧篇:神经网络初始化tricks---何凯明大神2018年新作(随机初始化网络)
- springboot基于BS结构的企业人事管理系统的设计与实现毕业设计源码121727
- android如何修改视频的分辨率,Android录制视频,视频压缩,设置分辨率,设置视频名称...
- 微分方程的Matlab解法
- 电脑ping,电脑ping如何打开 电脑ping打开教程
- VMware虚拟机如何联网详解
- 持续不定期更新:CFDC++之拟一维喷管流动的数值解(2)
- 【HTMLCSS】CSS当中设置背景图片不显示的问题
- Vue.js中的v-model指令(双向绑定)
- counters.dat_使用sys.dm_os_performance_counters对SQL Server问题进行故障排除
- Oracle 创建用户详解(create user)
- 办公室的好帮手!多能办公记事本 V3.7 (20150607更新)