历史上的今天
返回首页

历史上的今天

今天是: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

}


推荐阅读

史海拾趣

Geyer Electronic E K公司的发展小趣事

Geyer Electronic E.K.公司的发展故事

故事一:创立与初步发展

Geyer Electronic E.K.公司由Rudolf Geyer于1964年创立,最初是一家位于慕尼黑莱姆区的电子产品零售店。在那个年代,电子产品行业正处于快速发展阶段,Geyer凭借其敏锐的市场洞察力和对技术的热情,逐渐在市场中站稳了脚跟。起初,店铺销售各类电子产品,从简单的收音机到复杂的电子设备,一应俱全。随着时间的推移,Geyer Electronic凭借其优质的服务和丰富的产品线,逐渐赢得了当地消费者的信任和支持。

故事二:转型与专业化

1992年,Geyer Electronic经历了一次重要的转折点。在Jürgen Reichmann的领导下,公司被收购并进行了战略调整,正式转型为一家专门从事频率产品和特殊电池的公司。这一转型标志着Geyer Electronic开始专注于某一特定领域,并致力于在该领域成为行业的领导者。公司投入大量资源进行技术研发和产品创新,不断推出符合市场需求的高质量频率产品和特殊电池,逐渐在行业内树立了良好的口碑。

故事三:全球化布局

随着业务的不断扩展,Geyer Electronic开始将目光投向全球市场。公司不仅在欧洲建立了稳固的市场地位,还逐渐将业务拓展到亚洲和美国等其他地区。为了实现全球化战略,Geyer Electronic加强了与全球合作伙伴的合作与交流,共同推动频率产品和特殊电池技术的创新与发展。同时,公司还建立了完善的全球销售网络,确保产品能够在短时间内送达全球各地的客户手中。

故事四:认证与品质保证

为了进一步提升产品质量和客户满意度,Geyer Electronic积极寻求国际认证。公司通过了DIN ISO 9001:2015等国际质量管理体系认证,这标志着Geyer Electronic在质量管理方面已经达到了国际先进水平。通过严格的质量控制和持续的技术创新,Geyer Electronic不断推出高品质的频率产品和特殊电池,赢得了全球客户的广泛认可和信赖。

故事五:搬迁与未来发展

为了满足未来发展的需要,Geyer Electronic于2022年搬到了位于Planegg的新公司所在地。这次搬迁不仅为公司提供了更加宽敞和现代化的办公和生产环境,还为公司未来的发展奠定了坚实的基础。在新的起点上,Geyer Electronic将继续秉承“质量第一、客户至上”的经营理念,不断推动技术创新和产品升级,为全球客户提供更加优质、高效的服务和解决方案。同时,公司还将积极探索新的市场领域和发展机遇,努力成为全球电子行业中的佼佼者。

无锡友达公司的发展小趣事

随着产品性能的不断提升和市场需求的扩大,无锡友达开始积极拓展国内外市场。公司的产品不仅覆盖国内二十多个省、市,还远销欧美、中东、港澳台等国家和地区。通过与国际知名企业的合作,无锡友达不断提升自身的品牌影响力,逐渐在全球电子行业中占据一席之地。

Apex [Apex Microtechnology]公司的发展小趣事

Apex Microtechnology凭借其卓越的产品质量和服务水平,赢得了客户的广泛认可。其中,公司连续两年获得雷神公司的5星供应商卓越奖,这一奖项是雷神公司综合防御系统业务部对供应商在质量和性能方面的最高认可。Apex Microtechnology的获奖不仅体现了其在电子行业中的领先地位,也为其未来的发展奠定了坚实的基础。

这些故事展示了Apex Microtechnology在电子行业中的发展历程和成就,体现了其在功率模拟技术领域的专业实力和不断创新的精神。作为电子行业的佼佼者,Apex Microtechnology将继续致力于为客户提供更优质的产品和服务,推动电子行业的持续发展。

ECLIPTEK公司的发展小趣事

面对数字化浪潮的冲击,ECLIPTEK公司积极拥抱数字化转型和智能制造。公司引入大数据、云计算和人工智能等先进技术,推动生产过程的智能化和自动化。通过数字化转型和智能制造,ECLIPTEK不仅提高了生产效率和质量,还降低了生产成本和能源消耗。这一转型为公司未来的发展奠定了坚实的基础。

德力西(DELIXI)公司的发展小趣事

进入新世纪后,德力西开始全国化布局和多元化发展。1998年,在上海注册成立了上海德力西集团有限公司,与西安高压电器研究所联合生产高压电器和成套设备。此外,德力西还积极参与国企改革,整体并购了杭州西子(集团)公司,并进入环保领域,建设垃圾处理及水处理项目。这些举措使德力西在电子行业的地位更加稳固。

Geo Semiconductor Inc公司的发展小趣事
采用更合理的电路布局和元件选型,减少因设计不当导致的故障。

问答坊 | AI 解惑

运放经典

本帖最后由 paulhyde 于 2014-9-15 04:26 编辑 运放经典 运放经典  …

查看全部问答>

Linux发行版,你了解么?

作者:孙天泽,华清远见嵌入式学院金牌讲师。 从1991年诞生的那天起,Linux内核就在全世界的黑客们精心呵护下不断发展壮大。很多Linux Fans想为Linux内核做贡献,但或许是包括技术在内的等等原因,你的Ideas不一定会被内核容纳。对于操作系统来 ...…

查看全部问答>

PC可以直接使用手机显示屏吗?

有个工控设备,其中内置一台个人电脑(PC全内置主板),需要配备显示器和键盘。 因为安装空间太小,容纳不了普通CRT或笔记本LCD显示器。况且,该设备的用户界面很简单,只需要控制串口通讯以及操作一个简单的ACCESS数据库,使用带触摸的2.5~3.5寸 ...…

查看全部问答>

维纶触摸屏MT6系列产品问题

前几日使用维纶触摸屏MT6100I系列产品,大约7天后发现故障: 基本症状如下: 黑屏与维纶手型标志交替闪动. 咨询厂家说: 没有遇到此类情况. 把屏返回厂家说,测试了几天,没有发现故障. 大约7天后,另外一个工地,同样的屏出现了同样的故障.即黑屏与维纶手 ...…

查看全部问答>

Stellaris ICDI ND manual(811国产板使用说明书)

附:stellaris_icdi_switch转换工具的使用说明…

查看全部问答>

STM32F407 以太网如何配置?

如题,官方评估板的例程带了RLos, 我用UDPTCPdbg工具调试,在局域网里传送文件,工具上显示速率只有几十K,想弄个裸奔的程序再试试,有没有弄过的指点下。先谢谢了!…

查看全部问答>

关于失调电流和偏置电流的区别

OFFSET current:失调电流、BIAS  current:偏置电流 选择运放的时候,看见这两个参数,他们的区别是什么呢?搞不懂啊, 实际运用中用的到吗? …

查看全部问答>

问一个C语言结构体赋值的问题

在请问一下,我定义一个 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…… ...…

查看全部问答>