历史上的今天
今天是:2024年10月17日(星期四)
2019年10月17日 | 单片机+74HC595入门8X8点阵教学
2019-10-17 来源:51hei
写在前面的话
希望所有发贴求助的新人朋友们, 请先在论坛搜索, 论坛有很多老师们发的贴子, 虽然有很多描述得不清不楚, 但总是有能用的
8X8点阵我也参考了好多, 发代码的确实不少, 但在硬件方面配套的原理图, 连接图都不太清楚, 于是就瞎子摸象, 总算是搞清楚了
特发此贴跟大家分享
照样, 先上原理图, 接线图
程序有附仿真程序, 方便调试
由于是测试, 所以用排针+杜邦线
单片机源程序如下:
/*********************************************************************************
接线方式请看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]);
}
}
}
}
}
史海拾趣
|
单片机是一种超大规模集成电路,在该集成电路内有成千上万个晶体管或场效应管,因此,要单片机正常运行,就必须为其提供能量,即为片内的晶体管或场效应管供给电源,使其能工作在相应的状态。 PIC16F84单片机需要一个5V电源(实际工作电压为4?0V ...… 查看全部问答> |
|
一 首先说说ARM的发展 可以用一片大好来形容,翻开各个公司的网站,招聘里面嵌入式占据了大半工程师职位。 广义的嵌入式无非几种:传统的什么51、AVR、PIC称做嵌入式微控制器;ARM是嵌入式 ...… 查看全部问答> |
|
本产品适用于Xilinx 全系列CPLD/FPGA芯片的下载调试。 Xilinx USB 下载电缆 Xilinx Platform USB Cable 全兼容XILINX USB下载电缆,xilinx impact下载线 产品特点 1.完全兼容XILINX原厂Xilinx Platform Cable USB电缆,支持自动升级固件程序; ...… 查看全部问答> |
|
创建设备名称 UNICODE_STRING devName; RtlInitUnicodeString(&devName,L\"\\\\Device\\\\MyDDKDevice\"); 创建符号链接 UNICODE_STRING symLinkName; RtlInitUnicodeString(&symLinkNam ...… 查看全部问答> |
|
各位大虾,小弟有以下几个问题需要向大家求助: 1、设备管理器中显示出的设备,是根据什么显示出来的,为什么有时候我插入一个设备,里面会多出两个对应设备,以下有3个例子: (1)比如我插入我的USB接口的移动硬盘,会在\"通用串行总线控制器\" ...… 查看全部问答> |
|
在vs2003中开发的web服务,能在wince(模拟)中使用吗? 能在wince(模拟)中提供web服务即可! 在wince(模拟)中能搭建.net环境吗? 初学且急用中,请高手详细介绍一下!… 查看全部问答> |
|
本人想购买一套EKK-LM3S8962用于学习,价格希望在300以内! 今晚几乎把TI M3的帖子都翻了一遍,心情澎湃啊!如果那位前辈有要转手的,请加QQ:316950354,谢谢! [ 本帖最后由 artcam 于 2011-8-30 01:08 编辑 ]… 查看全部问答> |
|
本帖最后由 lzwml 于 2014-12-15 10:59 编辑 为了给控制端加入的命令特性,我借鉴uboot的U_BOOT_CMD方式定义一个端,命名为W_BOOT_CMD,并在Uboot基础上添加些独有特性。但是我在地址对齐上遇到个bug,目前bug已经解决,发帖只是想和大家探讨关于 ...… 查看全部问答> |




