历史上的今天
今天是:2025年04月07日(星期一)
2020年04月07日 | 51单片机点阵解析
2020-04-07 来源:eefocus
感谢大熙熙 对51单片机点阵代码的详细分析
http://www.cnblogs.com/one-meter/p/4188277.html
网址阐述了他对代码的解析
不过部分代码解析不够透彻
我融入了个人对代码的理解
并且做了详细的解析
代码参考了普中给的代码
网上代码很多可以自己下载测试
代码如下
#include #include //重定义 函数变量 #define uchar unsigned char #define uint unsigned int #define ulong unsigned long //spi 所使用的 3个管脚 并进行定义 sbit MOSIO =P3^4; sbit R_CLK =P3^5; sbit S_CLK =P3^6; //--点阵显示数组--// uchar code tab0[] = {0x00, 0x01, 0x00, 0x02, 0x00, 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0x80, 0x01, 0x00, 0x02, 0x00, 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0x80, 0x00}; //--10字模--// uchar code tab1[] = {0, 0, 0, 0, 0, 0, 8, 24, 14, 36, 8, 66, 8, 66, 8, 66, 8, 66, 8, 66, 8, 66, 8, 36, 62, 24, 0, 0, 0, 0, 0, 0}; //--09字模--// uchar code tab2[] = {0, 0, 0, 0, 0, 0, 24, 24, 36, 36, 66, 66, 66, 66, 66, 66, 66, 100, 66, 88, 66, 64, 66, 64, 36, 36, 24, 28, 0, 0, 0, 0} ; //--08字模--// uchar code tab3[] = {0, 0, 0, 0, 0, 0, 24, 60, 36, 66, 66, 66, 66, 66, 66, 36, 66, 24, 66, 36, 66, 66, 66, 66, 36, 66, 24, 60, 0, 0, 0, 0}; //--07字模--// uchar code tab4[] = {0, 0, 0, 0, 0, 0, 24, 126, 36, 34, 66, 34, 66, 16, 66, 16, 66, 8, 66, 8, 66, 8, 66, 8, 36, 8, 24, 8, 0, 0, 0, 0}; //--06字模--// uchar code tab5[] = {0, 0, 0, 0, 0, 0, 24, 56, 36, 36, 66, 2, 66, 2, 66, 26, 66, 38, 66, 66, 66, 66, 66, 66, 36, 36, 24, 24, 0, 0, 0, 0}; //--05字模--// uchar code tab6[] = {0, 0, 0, 0, 0, 0, 24, 126, 36, 2, 66, 2, 66, 2, 66, 26, 66, 38, 66, 64, 66, 64, 66, 66, 36, 34, 24, 28, 0, 0, 0, 0}; //--04字模--// uchar code tab7[] = {0, 0, 0, 0, 0, 0, 24, 32, 36, 48, 66, 40, 66, 36, 66, 36, 66, 34, 66, 34, 66, 126, 66, 32, 36, 32, 24, 120, 0, 0, 0, 0}; //--03字模--// uchar code tab8[] = {0, 0, 0, 0, 0, 0, 24, 60, 36, 66, 66, 66, 66, 32, 66, 24, 66, 32, 66, 64, 66, 64, 66, 66, 36, 34, 24, 28, 0, 0, 0, 0}; //--02字模--// uchar code tab9[] = {0, 0, 0, 0, 0, 0, 24, 60, 36, 66, 66, 66, 66, 66, 66, 32, 66, 32, 66, 16, 66, 8, 66, 4, 36, 66, 24, 126, 0, 0, 0, 0}; //--01字模--// uchar code tab10[] = {0, 0, 0, 0, 0, 0, 24, 8, 36, 14, 66, 8, 66, 8, 66, 8, 66, 8, 66, 8, 66, 8, 66, 8, 36, 8, 24, 62, 0, 0, 0, 0}; //--00字模--// uchar code tab11[] = {0, 0, 0, 0, 0, 0, 24, 24, 36, 36, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 36, 36, 24, 24, 0, 0, 0, 0}; //--GO--// uchar code tab12[] = {0, 0, 0, 0, 0, 0, 60, 28, 34, 34, 34, 65, 1, 65, 1, 65, 1, 65, 113, 65, 33, 65, 34, 65, 34, 34, 28, 28, 0, 0, 0, 0}; //全局变量 ulong column; //列 ulong row; //行 ulong dt; //具体分析 查看 函数实现方法 void HC595_data(uchar BT3,uchar BT2,uchar BT1,uchar BT0); void main() { int k=0; while(1) { //for() this is used by how long for(k=0;k<16;k++) { HC595_data(~tab12[2*k+1],~tab12[2*k],tab0[2*k],tab0[2*k+1]); } HC595_data(0xff,0xff,0,0); } } /******************************** BT3 是第2列 。。。。。。。 因此 输入为 列2 列1 行1(值是行2的值) 行2(值是行1的值) 然而 实际不是这样 原因是 74h595 是4个并联的 相当于 8个 8*8 而且只有一个输入 当输入值时 会进行进位操作 可以理解为 压栈 所以变成了 行2(值是行1的值) 行 1 (值是行2的值) 列 2 列 1 **********************************/ void HC595_data(uchar BT3,uchar BT2,uchar BT1,uchar BT0) { uchar i; for(i=0;i<8;i++) { MOSIO=BT3>>7; //BT 右移7位 即是得到最高位的值 BT3<<=1; //左移1位 最高为溢出,第7位变成最高位,达到按位输入的功能 S_CLK=0; //开始累加 S_CLK=1; //关闭 } for(i=0;i<8;i++) { MOSIO=BT2>>7; //BT 右移7位 即是得到最高位的值 BT2<<=1; //左移1位 最高为溢出,第7位变成最高位,达到按位输入的功能 S_CLK=0; //开始累加 S_CLK=1; //关闭 } for(i=0;i<8;i++) { MOSIO=BT1>>7; //BT 右移7位 即是得到最高位的值 BT1<<=1; //左移1位 最高为溢出,第7位变成最高位,达到按位输入的功能 S_CLK=0; //开始累加 S_CLK=1; //关闭 } for(i=0;i<8;i++) { MOSIO=BT0>>7; //BT 右移7位 即是得到最高位的值 BT0<<=1; //左移1位 最高为溢出,第7位变成最高位,达到按位输入的功能 S_CLK=0; //开始累加 S_CLK=1; //关闭 } R_CLK = 0; //set dataline low R_CLK = 1; //片选 R_CLK = 0; //set dataline low }
史海拾趣
|
作者:孙天泽,华清远见嵌入式学院金牌讲师。 从1991年诞生的那天起,Linux内核就在全世界的黑客们精心呵护下不断发展壮大。很多Linux Fans想为Linux内核做贡献,但或许是包括技术在内的等等原因,你的Ideas不一定会被内核容纳。对于操作系统来 ...… 查看全部问答> |
|
有个工控设备,其中内置一台个人电脑(PC全内置主板),需要配备显示器和键盘。 因为安装空间太小,容纳不了普通CRT或笔记本LCD显示器。况且,该设备的用户界面很简单,只需要控制串口通讯以及操作一个简单的ACCESS数据库,使用带触摸的2.5~3.5寸 ...… 查看全部问答> |
|
前几日使用维纶触摸屏MT6100I系列产品,大约7天后发现故障: 基本症状如下: 黑屏与维纶手型标志交替闪动. 咨询厂家说: 没有遇到此类情况. 把屏返回厂家说,测试了几天,没有发现故障. 大约7天后,另外一个工地,同样的屏出现了同样的故障.即黑屏与维纶手 ...… 查看全部问答> |
|
如题,官方评估板的例程带了RLos, 我用UDPTCPdbg工具调试,在局域网里传送文件,工具上显示速率只有几十K,想弄个裸奔的程序再试试,有没有弄过的指点下。先谢谢了!… 查看全部问答> |
|
OFFSET current:失调电流、BIAS current:偏置电流 选择运放的时候,看见这两个参数,他们的区别是什么呢?搞不懂啊, 实际运用中用的到吗? … 查看全部问答> |
|
在请问一下,我定义一个 srtuct a { unsigned char a1; unsigned char a2; unsigned char a3; unsigned char a4; }aa; 现在我想把一个数组,比如unsigned char b[4]={0,1,2,3}; 分别赋给结构体里的a1,a2,a3,a4有没有方便的办 ...… 查看全部问答> |
|
求大神帮我看看程序的问题啊,用G2553与NRF2401的无线通信 我的硬件接法是:CE-XIN,CS-XOUT,SCK-P1.7,MOSI-P2.5,MISO-P2.4,IRQ-P2.3.具体程序如下,跪求大神帮忙啊!! /******************************************************************** //NRF24L01测试程序,发送端程序 //一直发送0x01,02,03…… ...… 查看全部问答> |




