历史上的今天
返回首页

历史上的今天

今天是:2025年05月04日(星期日)

2020年05月04日 | 使用51单片机点亮我们的点阵灯

2020-05-04 来源:eefocus

通过前面我们都知道点亮我们的不管是点阵,数码管,还是LED灯,不仅要熟悉我们的代码还要会看我们的原理图和真值表,所以我们如果真的要写代码倒是其次的,首先我们得学会看我们的原理图和真值表,但是认识那个我们可以在网上找教程的,所以啊我这里就不去重诉别人的话了。那么我们今天要讨论什么问题勒!?我们今天讲一下点阵吧,点阵说实话对于单片机来说虽然并不是最重要的,但是点阵却是我们单片机中花样最多的之一。可能说到这么有人会说了,学了单片机我们有什么用呢,那么我们可以留意一下我们身边的一些物品,比如我们常在街上可以看见一些商店利用那些LED灯做出的花样,什么闪烁啊,各种图形变化啊,其实和我们的点阵原理都很像,不过他们那些控制的位更多,而我们51 单片机操作的位少一些,只有八位而已。但是我们其实把他的原理弄懂了我们学其他的或者操作更多的位也是很容易的。


我们其实刚开始我们学习51单片机上面的点阵可能会疑惑,我们照着老师的代码敲我们可以点亮他说的灯,但是我们通过原理图来点亮我们的灯却不是那么容易,为什么呢?或许我们细心的同学会发现我们要点亮的灯和我们的代码所写不一样,不一样在什么地方呢?每一排的位操作挺好像是相反的。那么前面的疑惑我们就解决了,我们要操作的点阵和我们的代码点亮是相反的!在我们的51单片机中我们0称做低电平,而1被叫做高电平,低电平是将灯点亮,高电平不亮。我们正对单片机如果我们要点阵第一个灯,那么我们我们要写的代码是P0=0x01;而转换成二进制就是0000 0001(这里我们可以在网上去看2进制和16进制相互转换的一些资料)我们可以知道的是他和我们设想的有些差别,比如我们就是要点亮第一排第一个灯,输入了P0=0x01我们却看见和我们的二进制数不符合,就像我们的灯一样每个灯就是我们的一个位,每个灯有两种状态,一个是1,另一个就是0。实际上我们就可以得出结论操作我们的灯就是操作我们的二进制。那么可以看一下我们的代码,来验证我们的猜想:


/*点亮我们的点阵第一排第一个灯*/

#include

sbit ADDR0=P0^0;

sbit ADDR1=P1^1;

sbit ADDR2=P1^2;

sbit ADDR3=P1^3;

sbit ENLED=P1^4;

//延时函数

delay(unsigned int x)

{

while(x--);

}

//

dz(unsigned int d,c,b,a)

{

ENLED=1;

ADDR3=d;

ADDR2=c;

ADDR1=b;

ADDR0=a;

}

void main()

{

P0=0x01;

dz(0,0,0,1);

delay(300);//延时函数的调用

}

 

其实我们的点阵的灯就是操作我们的一个八位数的位,每个灯就是一位,因为我们点阵就是一排八个灯(这个一定得记住)那么我们知道了点亮我们的点阵第一排第一个,我们可不可以点亮我们的点阵第一排呢?!代码如下:

/*点亮我们的点阵第一排灯*/

#include

sbit ADDR0=P0^0;

sbit ADDR1=P1^1;

sbit ADDR2=P1^2;

sbit ADDR3=P1^3;

sbit ENLED=P1^4;

//延时函数

delay(unsigned int x)

{

while(x--);

}

//

dz(unsigned int d,c,b,a)

{

ENLED=1;

ADDR3=d;

ADDR2=c;

ADDR1=b;

ADDR0=a;

}

void main()

{

P0=0x00;

dz(0,0,0,1);

delay(300);//延时函数的调用

}

其实代码都差不多,就是我们怎么用了,那么思考我们想多点几排呢?比如我们就要“同时”点亮两排三排或者更多呢?记住我们 一定得看真值表!

代码如下:

/*点亮我们的点阵第一排第一个灯*/

#include

sbit ADDR0=P0^0;

sbit ADDR1=P1^1;

sbit ADDR2=P1^2;

sbit ADDR3=P1^3;

sbit ENLED=P1^4;

//延时函数

delay(unsigned int x)

{

while(x--);

}

//

dz(unsigned int d,c,b,a)

{

ENLED=1;

ADDR3=d;

ADDR2=c;

ADDR1=b;

ADDR0=a;

}

void main()

{

//第一行

P0=0x00;

dz(0,0,0,1);

delay(300);//延时函数的调用

//第二行

dz(0,0,0,1);

P0=0x00;

delay(300);

}

我们知道了一些点阵的原理那么我们就来尝试点亮我们全部数码管呗:

#include

sbit ADDR0=P0^0;

sbit ADDR1=P1^1;

sbit ADDR2=P1^2;

sbit ADDR3=P1^3;

sbit ENLED=P1^4;

//延时函数

delay(unsigned int x)

{

while(x--);

}

//

dz(unsigned int d,c,b,a)

{

ENLED=1;

ADDR3=d;

ADDR2=c;

ADDR1=b;

ADDR0=a;

}

void main(){

while(1){
//第一行
LSD(0,0,0,0);
P0=0x00;
delay(300);
//第二行
LSD(0,0,0,1);
P0=0x00;
delay(100);
//第三行
LSD(0,0,1,0);
P0=0x00;
delay(100);
//第4行
LSD(0,0,1,1);
P0=0x00;
delay(100);

//第5行
LSD(0,1,0,0);
P0=0x00;
delay(100);
//第6行
LSD(0,1,0,1);
P0=0x00;
delay(100);
 //第7行
LSD(0,1,1,0);
P0=0x00;
delay(100);

//第8行
LSD(0,1,1,1);
P0=0x00;
delay(100);
                }

}

大家可以自己将代码复制在自己的程序中看一下代码和我说的效果有什么差别没有。

其实我们有没有想过我们该如何将我们的点阵对角线点亮一行呢?

#include

sbit ADDR0=P0^0;

sbit ADDR1=P1^1;

sbit ADDR2=P1^2;

sbit ADDR3=P1^3;

sbit ENLED=P1^4;

//延时函数

delay(unsigned int x)

{

while(x--);

}

//

dz(unsigned int d,c,b,a)

{

ENLED=1;

ADDR3=d;

ADDR2=c;

ADDR1=b;

ADDR0=a;

}

void main()

{

while(1)

{

  //第一行第一颗
             dz(0,0,0);
             P0=0xFE;
             delay(100);
            
                //第2行第2颗
             dz(0,0,1);
             P0=0xFD;
             delay(100);

               //第3行第3颗
             dz(0,1,0);
             P0=0xFB;
             delay(100);

             //第4行第4
             dz(0,1,1);
             P0=0xF7;
             delay(100);

             //第5行第 5
             dz(1,0,0);
             P0=0xEF;
             delay(100);

             //第6行第 6
             dz(1,0,1);
             P0=0xDF;
             delay(100);

             //第7行第7
             dz(1,1,0);
             P0=0xBF;
             delay(100);

             //第8行第8
             dz(1,1,1);
             P0=0x7F;
             delay(100);

}

}

推荐阅读

史海拾趣

Giga公司的发展小趣事
如自动浇水系统、温度控制系统等,通过定时启动或关闭设备。
Advanced Components Industries Inc公司的发展小趣事

随着环保意识的日益增强,ACI积极响应国家号召,致力于绿色电子产品的研发和生产。公司投入大量资源研发环保材料和技术,推出了一系列符合环保标准的产品。

这些绿色电子产品在市场上受到了广泛欢迎。消费者越来越关注产品的环保性能,ACI的产品正好满足了这一需求。同时,公司的环保理念也得到了社会各界的认可和支持,进一步提升了公司的品牌形象。

Compensated Devices Inc公司的发展小趣事

随着全球环保意识的日益增强,电子行业对环保的要求也越来越高。CDI积极响应这一趋势,将环保理念贯穿于产品研发、生产和销售的全过程。公司推出了一系列绿色环保型电子元件,并采用了环保材料和生产工艺。这一举措不仅赢得了客户的认可,还为公司的可持续发展奠定了坚实基础。

Custom LeatherCraft Manufacturing Co Inc公司的发展小趣事

随着电子行业的迅速发展,工程师和技术人员需要携带的工具和设备也越来越多。CLC敏锐地捕捉到了这一变化,开始研发具有更多功能和口袋的工具包。同时,他们还引入了新的材料和技术,使产品更加轻便、耐用。这些创新设计不仅满足了客户的需求,还进一步巩固了CLC在市场上的地位。

微芯(CMOSIC)公司的发展小趣事

随着全球化的加速发展,微芯生物也积极开展国际合作与交流。他们与国际知名医药企业、科研机构以及高校建立了紧密的合作关系,共同开展新药研发和技术创新。通过国际合作与交流,微芯生物不仅吸收了国际先进的研发理念和技术经验,还为公司的发展带来了更广阔的市场空间和合作机会。

ERP公司的发展小趣事

为了进一步拓展市场和提高竞争力,电子智链开始寻求与其他企业建立生态合作关系。公司与多家电子制造设备供应商、原材料供应商和物流服务商建立了战略合作关系,共同打造了一个覆盖电子产业全链条的生态圈。这一合作模式不仅为客户提供了更加全面和高效的解决方案,还促进了整个电子产业的协同发展。

问答坊 | AI 解惑

如何鉴别芯片真假,cecclab为你解答

怎么判定芯片的真伪? 概述: 通过化学腐蚀及物理显微观察、简单电性能等方法,来检验鉴定器件是否为原半导体厂商的器件。 检验的内容: A、货品外包装、湿度标示卡、器件日期批号等检查确认及记录 B、外观检测,器件的表面状况、印字标准、重 ...…

查看全部问答>

用什么也别用害人的红外一体机!(转)

转自:http://www.1000bbs.com/dispbbs.asp?boardid=51&Id=261604 首先声明一下身份:辽宁锦州安防器材经销商、工程商。 我开始选择红外一体机,是因为甲方点着名要这玩意。 选了哪些厂家的哪些型号的红外机,恕我不一一列举了。总之,深圳的、 ...…

查看全部问答>

WINCE SDK平台改变后出现的问题!求助!

WINCE SDK平台改变后出现的问题: fatal error LNK1112: module machine type \'ARM\' conflicts with target machine type \'SH3\' 这要怎么解决啊???…

查看全部问答>

求驱动函数

菜鸟请高手指点 有三个设备A、B、C A是最底层,然后挂载B到A上面,也就是原来设备栈的顺序是 A--B (由底到顶) 现在我想在A,B的设备栈里面加入C,但是我不希望设备栈的顺序是 A--B--C(由底到顶) ,而是希望希望设备栈的顺序 是 A--C--B(由底到顶) ...…

查看全部问答>

关于lpc2292 arm的初始化外部总线控制器 问题

我现在程序在外部flash运行,LPC2292,外部flash是sst39vf1601,在外部flash的0x10000地址(也就是arm看到的0x80010000地址开始我是烧的fpga程序,这个已经是没问题的),在用EASYJTAG-H外部仿真的时候,在MAIN入口处,我也看到了数据。startup.s的设 ...…

查看全部问答>

SEFS安全透明加密内核

软件名称:SEFS安全透明加密内核 软件版本:1.0 建议分类:系统安全/文件加密 软件大小:635K 安装平台:Win2000/xp/2003 软件语言:简体中文/繁体中文/英文 软件授权:共享软件 软件主页:http://www.sefs.net 支持邮箱:admin@sefs.ne ...…

查看全部问答>

vb上位机 51单片机下位机 编程

Visual Basic设计完成了上位机界面;同时利用51单片机作为下位机微处理器,采集无刷电机运行工作中的电压、电流和转速等基本参数,通过串行通讯口将数据上传至上位机系统中。上位机系统对下位机上传的数据加以分析计算,直观的绘制个参数的变化曲线 ...…

查看全部问答>

C2000/MSP430/电源的在线学习不能用了!!!!

C2000/MSP430/电源的在线学习不能用了!!!! 求关注,你们那里有这个现象没?…

查看全部问答>

电池内部细微结构可能是波音787起火原因

美国全国运输安全委员会(National Transportation Safety Board, 简称NTSB)的调查人员正在分析近一个月前发生的两起波音(Boeing Co., BA) 787梦想飞机起火事故是否与锂电池内部细微结构(即树枝晶)的构造有关。相关事故已导致波音787飞机禁飞。 & ...…

查看全部问答>