// matrix2pcs20140821.ino

const int SH_CP = 8;

const int DS = 9;

const int ST_CP = 10;

//声明4个数组临时变量

byte part_A[8], part_B[8],part_C[8],part_D[8],

part_A_A[8],part_B_B[8],part_C_C[8],part_D_D[8],

part_E[8],part_F[8],part_G[8],part_H[8];

//字符列数据,规则是二维数组的第1维代表上下两个矩阵,第二维中第0数组和第1数组分别是左边的8*8点阵和右边的8*8点阵

byte Col[][2][16]={

{

{0xFD,0xFF,0xFD,0xFF,0xFD,0xFF,0xFC,0x03,0xFD,0xFF,0xFD,0xFF,0xC0,0x0F,0xDF,0xEF},

{0xDF,0xEF,0xDF,0xEF,0xC0,0x0F,0xFF,0xFF,0xDB,0x77,0xDD,0xBB,0xBD,0xBB,0x7F,0xFB},/*"点",0*/

}

,

{

{0xFF,0xBF,0x83,0xBF,0xBB,0xBF,0xB4,0x01,0xB7,0x7F,0xAF,0x5F,0xB6,0xDF,0xB6,0x03},

{0xBB,0xDF,0xBB,0xDF,0xBB,0xDF,0x94,0x01,0xAF,0xDF,0xBF,0xDF,0xBF,0xDF,0xBF,0xDF},/*"阵",1*/

}

,

{

{0xFF,0x7F,0xDF,0xBF,0xE8,0x03,0xEE,0xEF,0x7D,0xB7,0xBB,0x7B,0xBE,0xDF,0xEC,0x0F},

{0xEF,0xEF,0xDF,0x77,0x1E,0xAF,0xDC,0xDF,0xDA,0xEF,0xD6,0xB7,0xDE,0x79,0xFE,0xFF},/*"滚",2*/

}

,

{

{0xFF,0xFF,0xC0,0x07,0xDF,0xF7,0xDF,0xF7,0xC0,0x07,0xDB,0xEF,0xDD,0xDF,0xD0,0x07},

{0xDD,0xDF,0xDD,0xDF,0xC0,0x03,0xDD,0xDF,0xBD,0xDF,0xBB,0xDF,0x7B,0xDF,0xF7,0xDF},/*"屏",3*/

}

,

{

{0xDF,0xBF,0xC1,0x81,0xB7,0x6F,0x7F,0xFF,0xC0,0x07,0xDF,0xF7,0xC0,0x07,0xDF,0xF7},

{0xC0,0x07,0xDF,0xF7,0xC0,0x07,0xF7,0xDF,0x00,0x01,0xF7,0xDF,0xEF,0xDF,0xDF,0xDF},/*"算",4*/

}

,

{

{0xFF,0xBF,0xDF,0xBF,0xEF,0xBF,0xEF,0xBF,0x78,0x03,0xBF,0xBF,0xBF,0xBF,0xEF,0xBF},

{0xE0,0x01,0xDF,0xBF,0x1F,0x7F,0xDE,0xFF,0xDD,0xEF,0xDB,0xF7,0xD0,0x03,0xFB,0xFB},/*"法",5*/

}

,

};

byte Row[] = {1,2,4,8,16,32,64,128};

void setup() {

pinMode(SH_CP, OUTPUT);

pinMode(DS,OUTPUT);

pinMode(ST_CP,OUTPUT);

}

//定义待显示字符数量

byte ch_num=6;

//定义显示速度变量

byte speed = 10;

void loop() {

//初始化点阵移动计数器

byte counter=0;

//col[][]二维数组中两个数组,均为16个数据,循环16次,将数据分配各临时变量,4个临时变量对应4个8*8点阵,

//对应顺序是part_A对应左上;part_B对应右上;part_C对应左下;

//A和C点阵都是数组中的计数数据;B和C都是数组中的偶数数据

for(int c=0; c

byte a=0;

byte b=0;

for(int i=0; i<16; i++){

//i%2==0证明是数组中的偶数数据,包括0%2==0,故col数组中0,2,4,6,8,10,12,14,16相应数据装入part_A和part_C

if(i%2==0)

{

//如果读取的字符数据时字符数据库col中的倒数第二个数据时,

if(c==(ch_num-2)){

part_A[a]=Col[c][0][i];

part_C[a]=Col[c][1][i];

//第二个点阵数据为倒数第一个数据

part_A_A[a]=Col[c+1][0][i];

part_C_C[a]=Col[c+1][1][i];

//缓冲数据为字符库数据中开头数据

part_E[a]=Col[0][0][i];

part_G[a]=Col[0][1][i];

//将col[]数组中的数据逐一分配给临时变量

a++;

}

//如果读取的字符数据时字符数据库col中的倒数第一个数据时,

else if(c==(ch_num-1)){

part_A[a]=Col[c][0][i];

part_C[a]=Col[c][1][i];

//循环到字符数据库的开头数据

part_A_A[a]=Col[0][0][i];

part_C_C[a]=Col[0][1][i];

part_E[a]=Col[1][0][i];

part_G[a]=Col[1][1][i];

//将col[]数组中的数据逐一分配给临时变量

a++;

}

else

//这段是正常思路:逐个获取字符数据

{

part_A[a]=Col[c][0][i];

part_C[a]=Col[c][1][i];

part_A_A[a]=Col[c+1][0][i];

part_C_C[a]=Col[c+1][1][i];

part_E[a]=Col[c+2][0][i];

part_G[a]=Col[c+2][1][i];

a++;

}

}

//与i%2==0相对应,如果i%2≠0,就执行下面else里面的内容

else

{

//如果读取的字符数据时字符数据库col中的倒数第二个字符数据时

if(c==(ch_num-2)){

part_B[b]=Col[c][0][i];

part_D[b]=Col[c][1][i];

//第二个点阵数据为字符数据库中最后一个字符数据

part_B_B[b]=Col[c+1][0][i];

part_D_D[b]=Col[c+1][1][i];

//为了循环显示,缓冲数据回到字符数据库开头数据

part_F[b]=Col[0][0][i];

part_H[b]=Col[0][1][i];

//将col[]数组中的数据逐一分配给临时变量

b++;

}

//如果读取的字符数据时变量c为字符数据库col中的倒数第1个字符数据时

else if(c==(ch_num-1)){

part_B[b]=Col[c][0][i];

part_D[b]=Col[c][1][i];

part_B_B[b]=Col[0][0][i];

part_D_D[b]=Col[0][1][i];

part_F[b]=Col[1][0][i];

part_H[b]=Col[1][1][i];

b++;

}

//这个else里面的内容为正常思路,逐字符获取数据

else {

part_B[b]=Col[c][0][i];

part_D[b]=Col[c][1][i];

part_B_B[b]=Col[c+1][0][i];

part_D_D[b]=Col[c+1][1][i];

part_F[b]=Col[c+2][0][i];

part_H[b]=Col[c+2][1][i];

b++;

}

}

}

//第一次dowhile循环将点阵B数据移动到点阵A的位置;点着A_A数据移动到点阵B的位置。

do{

for(int t=0; t

for(int i=0; i<8; i++){

digitalWrite(ST_CP, LOW);

shiftOut(DS, SH_CP, MSBFIRST, part_A[i]<>(8-counter));

shiftOut(DS, SH_CP, MSBFIRST, part_B[i]<>(8-counter));

shiftOut(DS, SH_CP, MSBFIRST, part_A_A[i]<>(8-counter));

shiftOut(DS, SH_CP, MSBFIRST, part_B_B[i]<>(8-counter));

shiftOut(DS, SH_CP, MSBFIRST, Row[i]);

shiftOut(DS, SH_CP, MSBFIRST, part_C[i]<>(8-counter));

shiftOut(DS, SH_CP, MSBFIRST, part_D[i]<>(8-counter));

shiftOut(DS, SH_CP, MSBFIRST, part_C_C[i]<>(8-counter));

shiftOut(DS, SH_CP, MSBFIRST, part_D_D[i]<>(8-counter));

shiftOut(DS, SH_CP, MSBFIRST, Row[i]);

digitalWrite(ST_CP, HIGH);

}

}

counter++;

}

//第二次dowhile循环将点阵A_A数据移动到点阵A的位置;将点阵B_B的数据移动到点阵B的位置;第二个完整的字进入显示屏。

while (counter<8);

counter=0;

do{

for(int t=0; t

for(int i=0; i<8; i++){

digitalWrite(ST_CP, LOW);

shiftOut(DS, SH_CP, MSBFIRST, part_B[i]<>(8-counter));

shiftOut(DS, SH_CP, MSBFIRST, part_A_A[i]<>(8-counter));

shiftOut(DS, SH_CP, MSBFIRST, part_B_B[i]<>(8-counter));

shiftOut(DS, SH_CP, MSBFIRST, part_E[i]<>(8-counter));

shiftOut(DS, SH_CP, MSBFIRST, Row[i]);

shiftOut(DS, SH_CP, MSBFIRST, part_D[i]<>(8-counter));

shiftOut(DS, SH_CP, MSBFIRST, part_C_C[i]<>(8-counter));

shiftOut(DS, SH_CP, MSBFIRST, part_D_D[i]<>(8-counter));

shiftOut(DS, SH_CP, MSBFIRST, part_G[i]<>(8-counter));

shiftOut(DS, SH_CP, MSBFIRST, Row[i]);

digitalWrite(ST_CP, HIGH);

}

}

counter++;

}

while (counter<8);

counter=0;

}

}

c语言16x32点阵显示汉字,点阵16*32滚屏显示汉字相关推荐

  1. 12864带字库显示屏滚屏显示

    /*****************************************************/ //描述:LCD12864的驱动 //作者:小四叶草 //时间:2015/07/16 / ...

  2. QT 实现滚屏显示多张漂亮美眉图片(可放大缩小)

    作为新手小白的一些分享....... 其中一部分功能要求显示多张图片,如果图片总高度超过工具窗口的高度就要有滚动条出现,实现滚屏的效果,网上这部分内容少之又少,我就把效果和代码都贴出来供大家参考. 想 ...

  3. 汉字转16进制java_java实现汉字转unicode与汉字转16进制实例

    本文实例讲述了java实现汉字转unicode与汉字转16进制的实现方法.分享给大家供大家参考.具体实现方法如下: 一.汉字转unicode public static String toUnicod ...

  4. 当显示内容过多时的滚屏类Container.java

    很多时候,由于手机屏幕太小,一下子显示不了那么多内容,这个时候就需要通过按键一点一点的显示下面的内容(相当于浏览器中的滚动条的功能).我做了一个类,能够一点一点的显示内容.其实就是个容器,把内容统统放 ...

  5. 笔记本屏幕30hz_扩展显示-(多屏幕)三屏显示方案全攻略

    此文做为自己对扩展显示屏的各种方案记录,多屏幕可以极大提高工作效率,现在显示器价格也非常便宜,不管是个人工作室,还是公司使用,多显示器已经慢慢成为一种标配. 本来我是想给自己的X1C外接2个显示器,因 ...

  6. linux分屏方式显示2015,Linux下的分屏显示

    首先解释一下我们这里的"分屏显示":指两个或四个显示器共同显示一个X-window的内容,而不是每个显示器都完整的显示一个X-window的内容(readme文件有描述,称为 MU ...

  7. OLED屏显和汉字点阵

    文章目录 一.OLED原理 1.简介 2.基本参数 3.优点 4.电路图及接法 二.SPI串行外设接口 1.SPI概述 2.特点 3.通信原理 4.SPI的通讯过程 三.示例实现 1.姓名学号 (1) ...

  8. 用STM32F103达成基于I2C协议的AHT20温湿度传感器和OLED屏显示汉字

    目录 一 I2C协议简介 硬件I2C与软件I2C 二 代码和ATH20芯片实现温湿度的串口显示 三 用stm32f103芯片的SPI和IIC接口接上OLED屏显示中文姓名温湿度 1 先用文字字模生成器 ...

  9. 基于STM32的0.96寸OLED屏显示学号姓名和滚动显示

    文章目录 **一.SPI(串行外设接口)** **二.使用0.96寸OLED显示屏显示学号姓名** **三.0.96寸OLED在STM32f103上实现滚动显示长字符** **四.参考资料** 一.S ...

最新文章

  1. JNI开发笔记(七)--aar库的生成和调用
  2. 包头昆区多大面积_包头地铁“胎死腹中”,何时“卷土重来”?
  3. 海龟绘图两小时上手C语言 - 3 正方形螺旋线
  4. Doris之BE的所有配置项(全面)
  5. js压缩代码后怎么生成source map_浅谈前端代码加密
  6. 无法更新 TeamViewer 服务属性是什么意思?
  7. 软件项目中的成本构成及估算方法
  8. 高中数学学习方法的8个诀窍,高中生必看
  9. 春风十里不如你、与IPC的邂逅
  10. 服务器取证——服务器基础知识
  11. [linux] linux shuf 和 mac gshuf
  12. Linux终端一直输出login,Linux tty pty console区别
  13. 在Word中引用参考文献
  14. 串行FLASH文件系统FatFs---转自野火论坛
  15. 金花关键词工具-金花关键词软件-自动金花关键词软件下载
  16. Springboot redis多数据源过期监听案例
  17. TrafficMonitor win7 win10 任务栏显示 网速 CPU利用率
  18. Linux Hook技术实践
  19. 关于scrollHeight
  20. CSS设置背景颜色 拼接 (一半黑一半白) 条纹 渐变

热门文章

  1. vivado点击xsetup.exe没有反应 最终版
  2. class ts 扩展方法_一些让程序保持可扩展的 TypeScript 技巧
  3. python 如果没有该key值置为空_在python字典中用“None”替换空值
  4. 餐厅前台php,餐厅前台接听电话技巧
  5. golang协程介绍和理解
  6. hosts和resolv.conf区别
  7. laravel修改storage目录和bootstrap目录
  8. python普通菜单_python多级菜单
  9. spark端口实验总结:
  10. mysql什么级别数据库_Mysql的四种隔离级别是什么