将16*16点阵看作四个8*8点阵,分别点亮,快速扫描实现字幕显示

数组指针右移实现字幕向左滚动的显示效果

硬件连接:74HC595四片级联,点阵屏的行输入连接HC595第一,二级输出,列输入连接第三,四级输出。74HC595的输入,大家可以根据各自的喜好和习惯连接,然后改掉端口定义。

//定义 74HC595 在电路连接中对应的 STC89C51 I/O口
/*--  当后续电路改变时,只需在此处更换IO口的定义即可,无需再回到函数中改变内容--*/
sbit SER = P0^0; //74HC595 字符输入端 SER
sbit SCK = P0^1; //74HC595 移位寄存器钟控端 SCK
sbit RCK = P0^2; //74HC595 并行输出钟控端 RCK

以下是我写的源码,可供大家参考

初学单片机,16*16点阵是昨天学的,还有很多理解不深刻的地方,或许有跟简单的方法,欢迎各位提出更好的意见或建议

#include <REGX52.H>//定义一个数组存放需要显示的字符内容
unsigned char code Matrix_led[] = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*--  文字:  计  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x02,0x02,0x42,0x33,0x00,0x02,0x02,0x02,0x02,0xFF,0x02,0x02,0x02,0x02,0x02,0x00,
0x00,0x00,0x00,0xFE,0x04,0x08,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,/*--  文字:  算  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x10,0x20,0xCF,0x4A,0x6A,0x4A,0x4A,0x0A,0x2A,0xCA,0x4A,0x6A,0x4F,0x40,0x40,0x00,
0x08,0x08,0xE9,0xAA,0xBC,0xA8,0xA8,0xA8,0xA8,0xA8,0xBF,0xA8,0xE8,0x08,0x08,0x00,/*--  文字:  机  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x08,0x08,0x0B,0xFF,0x09,0x08,0x00,0x7F,0x40,0x40,0x40,0x7F,0x00,0x00,0x00,0x00,
0x20,0xC0,0x00,0xFF,0x00,0xC1,0x06,0xF8,0x00,0x00,0x00,0xFC,0x02,0x02,0x1E,0x00,/*--  文字:  学  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x02,0x0C,0x88,0x69,0x09,0x09,0x89,0x69,0x09,0x09,0x19,0x28,0xC8,0x0A,0x0C,0x00,
0x20,0x20,0x20,0x20,0x20,0x22,0x21,0x7E,0x60,0xA0,0x20,0x20,0x20,0x20,0x20,0x00,/*--  文字:  院  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x7F,0x44,0x5A,0x61,0x08,0x30,0x24,0x24,0xA4,0x64,0x24,0x24,0x28,0x30,0x00,
0x00,0xFF,0x20,0x10,0xE0,0x01,0x82,0x8C,0xF0,0x80,0x80,0xFC,0x82,0x82,0x8E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};//定义 74HC595 在电路连接中对应的 STC89C51 I/O口
/*--  当后续电路改变时,只需在此处更换IO口的定义即可,无需再回到函数中改变内容--*/
sbit SER = P0^0; //74HC595 字符输入端 SER
sbit SCK = P0^1; //74HC595 移位寄存器钟控端 SCK
sbit RCK = P0^2; //74HC595 并行输出钟控端 RCK//控制四级级联 74HC595 的RCK端
unsigned char _74HC595_RCK_CTRI = 0;//数组长度
unsigned char length = sizeof(Matrix_led) / sizeof(Matrix_led[0]);/*------------------------------------------------------------------------------*/
//函数声明: 用户调用函数
/*------------------------------------------------------------------------------*/
void Delay1ms (unsigned char xms);
void Delay10us(unsigned int xus);
void Matrix_Led_Init( void );
void Matrix_Led_Show(unsigned char* Matrix_led_code);
void Matrix_Led_Column(unsigned char col, unsigned char led_code_col, unsigned char k);
void _74HC595_WriteByte(unsigned char led_code_col);/*------------------------------------------------------------------------------*/
//函数定义
/*------------------------------------------------------------------------------*/
/*** @brief   点阵屏初始化* @param   无* @retval  无*/
void Matrix_Led_Init( void )
{SCK = 1;RCK = 1;
}/*** @brief   在16*16点阵屏上显示字符内容* @param   无* @retval  无*/
void Matrix_Led_Show(unsigned char* Matrix_led_code)
{unsigned char k;unsigned char m = 0, //检测字符序列s = 0; //防止指针越界访问for(;s <= length - 129; Matrix_led_code++, s++){m++;if(m == 17){m = 1;Matrix_led_code += 16; //数组指针右移,每当连续显示完16帧时,跳过16个字符,跳到下一个字}for(k = 1; k <= 4; k++){unsigned char i, i2;for(i = 0; i <= 7;i ++) //循环,依次显示第一列到第八列{if((i + 8*(k - 1)) % 16 >= 16 - m){i2 = i + 8*(k - 1) + 16;//当某一列显示到某个字的最后一列时,跳过16个字节,跳到下一个字}else{i2 = i + 8*(k - 1);}Matrix_Led_Column(i, Matrix_led_code[i2], k);}}}
}/*** @brief   在点阵屏指定的一列上显示一个8位字符数据* @param   led_cdoe_col 要显示的一个字符数据* @param     col 说明了字符要显示在哪一列的位置上* @retval  无* @explain 将16*16点阵看作四个8*8点阵,依次分别显示一个屏幕上的内容,并快速刷新*/
void Matrix_Led_Column(unsigned char col, unsigned char led_code_col, unsigned char k)
{unsigned char i;if(k == 1){i = 0x00;} //显示左上角if(k == 2){i = 0x01;}//显示右上角if(k == 3){i = 0x10;}//显示左下角if(k == 4){i = 0x11;}//显示右下角//选列if(i == 0x00 || i == 0x10){_74HC595_WriteByte(~0x00);_74HC595_WriteByte(~(0x80 >> col));}else{_74HC595_WriteByte(~(0x80 >> col));_74HC595_WriteByte(~0x00);}//选行if(i == 0x00 || i == 0x01){_74HC595_WriteByte(0x00);_74HC595_WriteByte(led_code_col);}else{_74HC595_WriteByte(led_code_col);_74HC595_WriteByte(0x00);}
}/*** @brief   利用74HC595四级级联,将四个字符并行输出。每次调用此函数时led_code_col传进一个字符,_74HC595_RCK_CTRI累加计数每当函数中传入四个字符时并行输出,_74HC595_RCK_CTRI置0,重新计数* @param   led_cdoe_col 一个字符数据* @retval  无*/
void _74HC595_WriteByte(unsigned char led_code_col)
{unsigned char i;for(i = 0; i <= 7; i++) //将led_code_col传入的字符按位(从低位到高位)放入移位寄存器{SER = led_code_col & ( 0x01 << i ); //从低位到高位依次读取位数值SCK = 0;;;  //控制移位寄存器时钟,将数据送入移位寄存器SCK = 1;  //将 SCK 钟控端复位}_74HC595_RCK_CTRI ++; //是全局变量//控制四级级联的74HC595 RCK端 //其初值为0,SER端每进入一个字符时,74HC595_RCK_CTRI ++//当74HC595_RCK_CTRI == 4 时(进入四个字符)//将RCK 置1,并行输出所有数据//并将74HC595_RCK_CTRI置0,重新计数if(_74HC595_RCK_CTRI >= 4) //当有4个字符数据时{RCK = 0;;;     //通过 RCK 控制74HC595并行输出数据RCK = 1;       //RCK复位_74HC595_RCK_CTRI = 0;}
}void main()
{Matrix_Led_Init();//点阵屏初始化while(1){Matrix_Led_Show(Matrix_led);}
}

STC89C51 16*16点阵滚动显示字幕——C语言 源码(字幕内容可以更换)相关推荐

  1. 51单片机实现c语言字母滚动,基于51单片机的led点阵滚动显示上下左右c语言程序.docx...

    *********** * * *LED点阵实验(左右上下流动显示) ***************************************************************** ...

  2. 【proteus仿真】单片机汇编+74xx595驱动8X8点阵滚动显示

    [proteus仿真]单片机汇编+74xx595驱动8X8点阵滚动显示 Proteus仿真 汇编代码(.asm) ORG 00HJMP MAINORG 0BHLJMP INTS_T0ORG 30H M ...

  3. 使用51单片机和MAX7219控制点阵滚动显示

    最近玩MAX7129控制点阵,弄了一个用51和MAX7219控制两个1088AS点阵滚动显示.此文章作为总结.方便自己日后需要时回顾,也方便他人借鉴参考.文中如果有地方不准确,有错误,欢迎指正. 这次 ...

  4. [Android 编译(一)] Ubuntu 16.04 LTS 成功编译 Android 6.0 源码教程

    1 前言 经过3天奋战,终于在Ubuntu 16.04上把Android 6.0的源码编译出来了,各种配置,各种error,各种爬坑,特写此博客记录爬坑经历.先上图,Ubuntu上编译完后成功运行模拟 ...

  5. 基于51单片机的蓝牙控制双色LED点阵显示屏(实物图+原理图+源码+全套资料)

    资料编号:086 采用stm32单片机,可以通过蓝牙app控制点阵显示不同效果, 具体功能请看演示视频,全套资料齐全: 86-基于51单片机的蓝牙控制双色LED点阵显示屏(实物图+原理图+源码+全套资 ...

  6. 炫酷滚动弹幕生成小程序源码+支持多样化模板

    正文: 这是一款滚动弹幕生成小程序源码,让弹幕文字在手机屏幕上跑起来,LED弹幕,手机弹幕,告白神奇等,支持多种模板,每一种模板都支持自定义颜色等等,字体跳动,字体表白等等,另外也可以支持自定义文字, ...

  7. 帝国CMS微信分文章显示缩略图、简介源码分享到朋友圈转发好友带缩略图

    帝国CMS 微信分享文章显示缩略图.简介源码 分享到朋友圈 转发好友带缩略图 资源下载地址:https://download.csdn.net/download/bobbsh/12139464 适用帝 ...

  8. 51单片机基于Proteus的8X8点阵滚动显示心形

    代码及仿真原理图下载地址: https://download.csdn.net/download/qq_41639829/10641349 一.效果展示及连线方式 注:制作动图时效果显示不好 二.所用 ...

  9. 单片机控制LED点阵滚动显示:I LOVE YOU

    题目要求: 控制LED点阵依次滚动显示出I LOVE YOU,并且滚动速度可控. 仿真电路: 仿真效果: C语言程序代码: # include <at89x51.h> # define u ...

最新文章

  1. 2022-2028年中国可生物降解农用薄膜产业竞争现状及投资决策建议报告
  2. git cherry-pick. 如何把已经提交的commit, 从一个分支放到另一个分支
  3. mysql 5.7编译安装重启_mysql5.7源码编译安装
  4. 跟着实例学习设计模式(7)-原型模式prototype(创建型)
  5. Spring配置C3P0开源连接池
  6. cloud一分钟 | 李飞飞离任谷歌云,工作重心将重新转回学术界
  7. input框带图片的写法
  8. 高数学习笔记:计算方向导数
  9. 发邮件请领导审批文件怎么说_住建部:1月1日起,两项甲级资质实行告知承诺审批!...
  10. asp.net生成高质量缩略图通用函数
  11. linux用grep查找文件内容
  12. s7200cpu224xp手册_S7-200 PLC DC224XP DC DC DC的接线图说明
  13. 计算机音乐恋曲1990字谱,歌曲恋曲1990简谱
  14. 混合开发--vue之mand-mobile 框架引入,解决组件巨大问题
  15. 看这篇就够了!能源企业数字化升级,推动绿色低碳发展
  16. 【算法训练营学习笔记-Week06】一遍不懂就多刷几遍
  17. 《阿里云天池大赛赛题解析(深度学习篇)》学习笔记(1)自然语言处理基础
  18. upload-labs通关详解
  19. 〖Python 数据库开发实战 - Python与MySQL交互篇⑮〗- 项目实战 - 实现新闻管理 - 删除新闻功能
  20. 数字化和社会化商业转型中首席信息官的作用

热门文章

  1. HTTP之手机抓包工具篇
  2. memset函数的实现方式
  3. 什么是智能生产线?常州智慧工厂,数字孪生,三维交互
  4. [循环链表]——单向循环链表
  5. 在STM32下完成对SD卡的数据读取
  6. 百度地图的轨迹回放和实时监控
  7. 账号被盗,慎用免费WiFi
  8. 给我未来的孩子--(转载)
  9. WeakReference 与 ThreadLocal
  10. 中国代步平衡车市场销售态势与消费趋势预测报告(2022-2027年)