单片机+74HC595入门8X8点阵教学

发布者:csZhou最新更新时间:2019-10-17 来源: 51hei关键字:单片机  74HC595  8X8点阵 手机看文章 扫描二维码
随时随地手机看文章

写在前面的话
希望所有发贴求助的新人朋友们, 请先在论坛搜索, 论坛有很多老师们发的贴子, 虽然有很多描述得不清不楚, 但总是有能用的
8X8点阵我也参考了好多, 发代码的确实不少, 但在硬件方面配套的原理图, 连接图都不太清楚, 于是就瞎子摸象, 总算是搞清楚了
特发此贴跟大家分享


照样, 先上原理图, 接线图
点阵0423(修正).png



程序有附仿真程序, 方便调试
JD20190424210555.png


由于是测试, 所以用排针+杜邦线
IMG_20190423_050352.jpg 


IMG_20190423_050400.jpg 


IMG_20190423_050456.jpg 


IMG_20190423_052826.jpg 


IMG_20190423_052911.jpg 


单片机源程序如下:

/*********************************************************************************

接线方式请看main.h说明

        二片74HC595 + 一个8*8点阵(1088AS共阴)

        实现文字静态显示+移动显示(左移/右移/上移/下移)

        代码精简,方便理解

**********************************************************************************/

#include "main.h"


//定义变量

uchar temp = 0xfe;


/*取模说明:

菜单选项:

"点阵格式" : 根据你的点阵是共阴还是共阳, 我的是共阴, 所以选择的是阴码

"取模走向" : 根据你的需求, 选择逆向或顺向, 我这里选择的是逆向

"取模方式" : 请看下面示例说明, 根据移动方向选择

"每行显示数据" : 点阵=8, 索引=8

"液晶面板仿真" : 像素大小=8

"输出数制" : 选择"十六进制数"

"输出选项" : 选择"输出精简格式"和"输出紧凑格式"

"自定义格式" : 选择"C51格式", 其它默认


主界面选项:

字体: 幼圆

字宽: 8                字高: 8

点阵宽: 8        点阵高: 8

*/


//动态显示数组

uchar Display_word1[48] = {                        //数组个数(这里的40代表有40个十六进制,因为是8*8点阵,所以每个字有8个十六进制)

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,        //空白(前面放一个空白屏,实现移动出字效果)

//0x10,0x38,0x54,0x10,0x10,0x10,0x10,0x10,        //箭头


//逆向+逐列式或列行式 (左移/右移)

0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x08,        //"一",0

0x80,0x80,0x80,0xFE,0x90,0x90,0x80,0x80,        //"上",1

0x00,0x40,0x44,0x44,0x44,0x44,0x40,0x00,        //"二",2

0x00,0x02,0x02,0xFE,0x0A,0x12,0x02,0x00,        //"下",3



//逆向+行列式或逐行式 (上移/下移)

/*0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,        //"一",0

0x00,0x08,0x08,0x08,0x38,0x08,0x08,0xFF,        //"上",1

0x00,0x00,0x3C,0x00,0x00,0x00,0x7E,0x00,        //"二",2

0x00,0x7E,0x08,0x18,0x28,0x08,0x08,0x08,        //"下",3

*/


0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,        //空白(最后放一个空白屏,以免出现乱码)

};


//静态显示数组(第1个参数为几个字,第2个参数为每字多少字节)

uchar Display_word2[3][8] = {

0x0C,0x1E,0x3E,0x7C,0x7C,0x3E,0x1E,0x0C,        //心

0x10,0x38,0x54,0x10,0x10,0x10,0x10,0x10,        //箭头

0x0C,0x1E,0x3E,0x7C,0x7C,0x3E,0x1E,0x0C,        //心

};


//****************************************************

//主函数

//****************************************************

void main()

{

        uint i;

        uchar j,k;

        while(1)

        {                

                ///////////////////////////////////////////////////////////////////////////

                //静态显示

                for(j = 0 ; j < 3 ; j++) {                //共需显示3个字

                        for(i = 0 ; i < 1000 ; i++)        {                //静态显示时间

                                temp = 0x7f;

                                for(k = 0 ; k < 8 ; k++) {                //显示1-8列(8为显示8列)如果改成4则有4列显示,另4列黑屏

                                        Send_Data(Display_word2[j][k]);

                                }

                        }

                }


                ///////////////////////////////////////////////////////////////////////////                

                //移动方式(想要不同的移动方式,就按以下说明修改)


                //for(j = 0 ; j < 40 ; j++) //左移(逐列式)/上移(逐行式)

                //for(j = 39 ; j-1 > 0 ; j--)        //右移(逐列式)/下移(逐行式)


                for(j = 0 ; j < 40 ; j++) {                                //要显示的字数(每个字8位,这里是显示一屏空白+4个字,所以是8+4*8=40)

                        for(i = 0 ; i < 50 ; i++) {                        //控制移动的速度(数字越小移动速度越快,越大越慢)

                                temp = 0x7f;


                                //移动方式(想要不同的移动方式,就按以下说明修改)

                                //for(k = 0 ; k < 8 ; k++) //左移(逐列式)/右移(逐列式)

                                //for(k = 8 ; k-1 > 0 ; k--) //上移(逐行式)/下移(逐行式)


                                for(k = 0 ; k < 8 ; k++) {                //(每个字取8次数组, 不要修改)

                                        Send_Data(Display_word1[j+k]);

                                }

                        }

                }

        }                                        

}


关键字:单片机  74HC595  8X8点阵 引用地址:单片机+74HC595入门8X8点阵教学

上一篇:分享一个按键消抖和数码管显示都不用延时函数的倒计时器
下一篇:基于DHT11的温湿计设计 OLED12864显示

推荐阅读最新更新时间:2024-11-13 11:12

第10节:一个用来学习C语言的模板程序
从业十年,教你单片机入门 第10讲: 目前,几乎所有的初学者在学习和上机练习C语言的时候,都是在电脑上安装VC这个调试软件,在源代码里只要调用打印语句printf就可以观察到不同的变量结果,挺方便的。但是现在我要提出另外一种方法,学习单片机的C语言,不一定非要用VC调试软件,也可以直接在坚鸿51学习板上学习和上机练习的。我可以做一个调试模板程序给初学者使用,利用8位数码管和16个LED灯来显示不同的变量结果,利用3个按键来切换显示不同的变量,这样就能达到类似在VC平台下用printf语句来观察变量的效果。甚至我个人认为这样比用VC调试的效果还更加直观。现在重点介绍这个模板程序的使用。 在模板程序里,初学者只需要在主程序的初始化区域
[单片机]
PIC单片机的学习——时钟的配置
一、概念 Fcy是CPU时钟,Fosc晶振频率。Fcy = Fosc/2,也就是CPU时钟是晶振频率的1/2。 二、寄存器的配置 例子如下: //系统时钟初始化 产生55.296M //11.0592M晶振 // Fosc= Fin*M/(N1*N2), Fcy=Fosc/2 // Fosc= 11.0592M*60/(2*3)=110.592Mhz for 11.0592M input clock // Fcy= Fosc/2 = 55.296MHZ PLLFBD = 58; //M=PLLFBD+2=60 CLKDIVbits.PLLPOST = 0; // N2=2*(PLLPOST
[单片机]
51单片机定时/计数器详解(工作原理及模式、应用)
51单片机是基础入门的一个单片机,还是应用最广泛的一种。本文主要介绍51单片机定时/计数器,首先介绍了51单片机定时/计数器的工作原理,其次介绍了51单片机定时/计数器的工作模式,最后阐述了51单片机定时/计数器的应用,具体的跟随小编一起来了解一下吧。 51单片机的定时/计数器的概念 单片机中,脉冲计数与时间之间的关系十分密切,每输入一个脉冲,计数器的值就会自动累加1,只要相邻两个计数脉冲之间的时间间隔相等,则计数值就代表了时间的流逝,因此,单片机中的定时器和计数器其实是同一个物理的电子元件,只不过计数器记录的是单片机外部发生的事情(接受的是外部脉冲),而定时器则是由单片机自身提供的一个非常稳定的计数器,这个稳定的计数器就是单
[单片机]
51<font color='red'>单片机</font>定时/计数器详解(工作原理及模式、应用)
单片机和数字电路怎么抗干扰
单片机和数字电路怎么抗干扰 形成干扰的基本要素有三个: (1)干扰源,指产生干扰的元件、设备或信号,用数学语言描述如下:du/dt,di/dt大的地方就是干扰源。如:雷电、继电器、可控硅、电机、高频时钟等都可能成为干扰源。 (2)传播路径,指干扰从干扰源传播到敏感器件的通路或媒介。典型的干扰传播路径是通过导线的传导和空间的辐射。 (3)敏感器件,指容易被干扰的对象。如:A/D、D/A变换器,单片机,数字IC,弱信号放大器等。 抗干扰设计的基本原则是:抑制干扰源,切断干扰传播路径,提高敏感器件的抗干扰性能。(类似于传染病的预防) 1、抑制干扰源 抑制干扰源就是尽可能的减小干扰源的du/dt,di/dt。这是抗干扰设计中最优先考虑和最
[单片机]
单片机ADC采样算法----中位值滤波法
中位值滤波法就是通过连续采样奇数个数据,然后对数据从小到大排序,取中间的值做为本次采样值。 下面看C代码的实现 #define M 11 unsigned int filter2( void ) { unsigned int value_buf ; unsigned int count, i, j, temp; for( count = 0; count M; count++ ) { value_buf = ReadVol_CH2(); } for( j = 0; j M - 1; j++ ) { for( i = 0; i M - j - 1; i++ ) {
[单片机]
<font color='red'>单片机</font>ADC采样算法----中位值滤波法
单片机攻略3——C51入门
一:背景介绍 随着时代的发展,人们希望把CPU、RAM等器件集成到一个平台上来工作,单片机就这么诞生了。到现在为止市面上的单片机款式种类多如牛毛,继承的功能也要根据实际需求演化出了不同的方向。以51系列为例,比较常见的是Intel开发的MCS-51系列,和国内的STC51系列。 之后也以51系列(STC89C52RC型号)学习。 STC89C52RC资源:8kbROM程序储存器,256B数据存储器RAM,3个定时器计数器,6个中断源,16位重装 二:51的结构 51是40针脚直插式排布。下图是51芯片的实际引脚图。(细枝末节的硬件结构以后再补) 2.1 各引脚的功能作用 C51总体来讲可以分为六个类型的
[单片机]
<font color='red'>单片机</font>攻略3——C51入门
51单片机系列——定时/计数器
51单片机有2个16位定时器/计数器:定时器0(T0为P3.4)和定时器1(T1为P3.5) 这里所说的16位是指定时/计数器内部分别有16位的计数寄存器。分别为低8位寄存器和高8位寄存器。 定时器模式 当工作在定时模式时,每经过一个机器周期内部的16位计数寄存器的值就会加1,当这个寄存器装满时溢出。 我们可以算出工作在定时模式时最高单次定时时间为 65535*1.085us=时间(单位us) 定时器作用:可以用于精确事件定时,PWM脉宽调制,波形发生,信号时序测量的方面。 计数器模式 当工作在计数器模式时,T0(P3.4引脚),T1(P3.5引脚)。每来一个脉冲,计数寄存器加1。 使用51定时/计数器步骤
[单片机]
51<font color='red'>单片机</font>系列——定时/计数器
瑞萨推出全新RA8入门级MCU产品群, 提供极具性价比的高性能Arm Cortex-M85处理器
RA8E1与RA8E2提供理想的标量和矢量计算性能以及同类卓越的功能集,满足价值导向型市场需求 2024 年 11 月 5 日,中国北京讯 - 全球半导体解决方案供应商瑞萨电子 今日宣布,推出RA8E1和RA8E2微控制器(MCU)产品群,进一步扩展其业界卓越和广受欢迎的MCU系列。 2023年推出的RA8系列MCU是首批采用Arm® Cortex®-M85处理器的MCU,实现市场领先的6.39 CoreMark/MHz(注)性能。新款RA8E1和RA8E2 MCU在保持同等性能的同时,通过精简功能集降低成本,成为工业和家居自动化、办公设备、医疗保健和消费品等大批量应用的理想之选。 RA8E1和RA8E2 MCU采用
[单片机]
瑞萨推出全新RA8入门级<font color='red'>MCU</font>产品群,  提供极具性价比的高性能Arm Cortex-M85处理器
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved