历史上的今天
返回首页

历史上的今天

今天是:2024年10月17日(星期四)

正在发生

2019年10月17日 | 单片机+74HC595入门8X8点阵教学

2019-10-17 来源:51hei

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


照样, 先上原理图, 接线图
点阵0423(修正).png?imageView2/2/w/550



程序有附仿真程序, 方便调试
JD20190424210555.png?imageView2/2/w/550


由于是测试, 所以用排针+杜邦线
IMG_20190423_050352.jpg?imageView2/2/w/550 


IMG_20190423_050400.jpg?imageView2/2/w/550 


IMG_20190423_050456.jpg?imageView2/2/w/550 


IMG_20190423_052826.jpg?imageView2/2/w/550 


IMG_20190423_052911.jpg?imageView2/2/w/550 


单片机源程序如下:

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

接线方式请看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]);

                                }

                        }

                }

        }                                        

}


推荐阅读

史海拾趣

ABL Heatsink公司的发展小趣事

早期,ABL Heatsink公司主要生产通用型散热器,但随着市场竞争的加剧,公司意识到必须调整市场定位。于是,公司开始专注于研发针对特定电子设备的高性能散热器。通过深入了解客户需求,ABL Heatsink成功开发出一系列定制化产品,赢得了市场的青睐。

Eris Technology Corp公司的发展小趣事

Eris Technology Corp公司自1995年成立以来,一直致力于半导体及相关技术的研发。在成立初期,公司面临激烈的市场竞争和技术挑战。然而,通过不断的研发投入和人才引进,Eris Tech成功开发出一款高性能的二极管产品,并凭借其优异的性能赢得了市场的认可。随着产品线的不断丰富和市场布局的逐渐完善,Eris Tech逐渐在电子行业中崭露头角。

Gould Fiber Optics公司的发展小趣事
可能是散热不良、负载过大或内部元件短路。
Design Gateway公司的发展小趣事

1985年,泰德·维特(Ted Waitt)和Mike Hammond两位年轻人决定辍学创业。他们利用维特祖母的15,000美元存款作为担保,从银行获得了10,000美元贷款,租用了一台计算机,并准备了一份三页的经营计划。在维特父亲位于爱荷华州苏城的牧场里,他们创办了TIPC Network公司(Gateway的前身)。公司起步时,主要向得克萨斯电脑器械公司销售零配件,并开展计算机邮购业务。得益于直销商业模式,Gateway在短短四个月内就实现了10万美元的销售额。

Everett Charles Technologies (ECT)公司的发展小趣事

随着全球电子产业的快速发展和市场竞争的加剧,ECT不断加快全球化战略的实施。公司在全球范围内设立分支机构,积极拓展海外市场,加强与国际知名企业的合作与交流。同时,ECT也注重培养本土人才和创新能力,不断提升公司的核心竞争力。展望未来,ECT将继续秉承“创新、质量、服务”的理念,致力于成为全球领先的电子测试系统供应商和服务商。

以上五个故事概述了Everett Charles Technologies (ECT) 公司的发展历程和关键节点,每个故事都体现了公司在技术创新、市场拓展和全球化战略方面的努力和成果。这些故事不仅展现了ECT的辉煌过去,也预示着其更加美好的未来。

Advanced Photonix公司的发展小趣事

在电子行业的早期,Advanced Photonix以其卓越的光学技术脱颖而出。公司创始团队由一群富有远见的科学家和工程师组成,他们专注于研发高速光电子和高性能的光纤测试产品。经过无数次的实验和试错,团队终于成功开发出一种具有创新性的光纤传感技术,这一技术为电信行业提供了前所未有的分布式光纤传感解决方案。这一技术突破不仅为Advanced Photonix赢得了市场声誉,也奠定了公司在电子行业的重要地位。

问答坊 | AI 解惑

PIC 8位单片机的电源和时钟

单片机是一种超大规模集成电路,在该集成电路内有成千上万个晶体管或场效应管,因此,要单片机正常运行,就必须为其提供能量,即为片内的晶体管或场效应管供给电源,使其能工作在相应的状态。  PIC16F84单片机需要一个5V电源(实际工作电压为4?0V ...…

查看全部问答>

ARM入门者的天堂(一点经验)

一 首先说说ARM的发展       可以用一片大好来形容,翻开各个公司的网站,招聘里面嵌入式占据了大半工程师职位。       广义的嵌入式无非几种:传统的什么51、AVR、PIC称做嵌入式微控制器;ARM是嵌入式 ...…

查看全部问答>

电子无忧网 批量供应Xilinx USB 下载电缆企业版

本产品适用于Xilinx 全系列CPLD/FPGA芯片的下载调试。 Xilinx USB 下载电缆 Xilinx Platform USB Cable 全兼容XILINX USB下载电缆,xilinx impact下载线 产品特点 1.完全兼容XILINX原厂Xilinx Platform Cable USB电缆,支持自动升级固件程序; ...…

查看全部问答>

两个RtlInitUnicodeString()有什么区别

创建设备名称    UNICODE_STRING devName;    RtlInitUnicodeString(&devName,L\"\\\\Device\\\\MyDDKDevice\"); 创建符号链接    UNICODE_STRING symLinkName;    RtlInitUnicodeString(&symLinkNam ...…

查看全部问答>

WDM驱动的3个初级问题

各位大虾,小弟有以下几个问题需要向大家求助: 1、设备管理器中显示出的设备,是根据什么显示出来的,为什么有时候我插入一个设备,里面会多出两个对应设备,以下有3个例子: (1)比如我插入我的USB接口的移动硬盘,会在\"通用串行总线控制器\" ...…

查看全部问答>

求救!!WinCE和WebServices!!

在vs2003中开发的web服务,能在wince(模拟)中使用吗? 能在wince(模拟)中提供web服务即可! 在wince(模拟)中能搭建.net环境吗? 初学且急用中,请高手详细介绍一下!…

查看全部问答>

本人想购买一套EKK-LM3S8962用于学习,价格希望在300以内!

今晚几乎把TI M3的帖子都翻了一遍,心情澎湃啊!如果那位前辈有要转手的,请加QQ:316950354,谢谢! [ 本帖最后由 artcam 于 2011-8-30 01:08 编辑 ]…

查看全部问答>

FRAM_GUI.exe无法运行

刚在试试买回来的板子 FRAM_GUI.exe双击没反应?   另MSP-EXP430FR5739的例程是用ccs打开还是IAR?…

查看全部问答>

gcc -O3优化后readelf查看地址对齐方式【探讨】

本帖最后由 lzwml 于 2014-12-15 10:59 编辑 为了给控制端加入的命令特性,我借鉴uboot的U_BOOT_CMD方式定义一个端,命名为W_BOOT_CMD,并在Uboot基础上添加些独有特性。但是我在地址对齐上遇到个bug,目前bug已经解决,发帖只是想和大家探讨关于 ...…

查看全部问答>