历史上的今天
今天是:2025年04月01日(星期二)
2020年04月01日 | 51_单片机_点阵深度分析
2020-04-01 来源:eefocus
感谢 大熙熙 的代码解析
网址 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 }
史海拾趣
|
安装到,复制新文件的时候,出现 错误。写入文件C:\\WINDOWS\\system32\\rapi.dll 时出错。 请验证您有权访问该目录。 之前也装过 ActiveSync4.5 但是没有出现问题,该怎么解决啊?? 谢谢大家了!!… 查看全部问答> |
|
ORG 0000H AJMP START ORG 30H START: MOV R1,#01HMOV P1,#0FFH ;关所 灯 MOV TMOD,#00000001B ;定时/计数器0工作于方式1 MOV TH0,#15H MOV TL0,#0A0H ;即数5536 SETB TR0 ;定时/计数器0开始运行 LOOP:JBC TF0,NEXT ;如果TF0等于1,则清TF ...… 查看全部问答> |
|
通过模拟开关或者继电器导通电流信号,现有问题,请大家指教 1,如果是模拟开关,漏电流不能恒定,会随着信号的大小变化。以至于信号本来是线性的,结果就非线性了。2,如果是继电器,有声音。有无声的继电器吗? 那种光电转换的继电器也会有漏电 ...… 查看全部问答> |
|
现在lauchpad不在身边,要画PCB需要相应参数。最好有文档神马的,原来用游标卡尺测过,数据没有带来……就是J1排针和J5排针,以及J6排针和J5排针之间的距离… 查看全部问答> |
|
本帖最后由 tiankai001 于 2015-2-27 17:20 编辑 你在自己的学习工作中,能不能跟和你意见不一致的人一起工作,能不能保持一种宽容的心态。因为人与人的思维方式是不一样的,你在你的工作中肯定会遇到与你意见不一致的人,这一点是毫 ...… 查看全部问答> |




