通过前面我们都知道点亮我们的不管是点阵,数码管,还是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);

}

}

51单片机点阵c语言程序,使用51单片机点亮我们的点阵灯相关推荐

  1. 单片机遥控车c语言程序,基于51单片机的无线遥控小车设计[附发射接收程序]

    /***************************************************************/ /*[基于51单片机的无线遥控小车设计] 作者王*茹 */ /*** ...

  2. 51单片机频率计c语言程序,基于51单片机的频率计程序

    这个是电路原理图 *********************************************** **************入门级频率计设计****************** ** ...

  3. 51单片机微波炉c语言程序,基于51单片机的微波炉控制C源程序.doc

    #include #define GET_KEY P1 #define GET_LED P0 sbit LSA=P2^2; sbit LSB=P2^3; sbit LSC=P2^4; unsigned ...

  4. 汉字点阵c语言程序,用c51单片机控制1616点阵显示汉字源代码

    #include #define uchar unsigned char #define uint unsigned int #define out0 P0 #define out2 P2 #defi ...

  5. 单片机时间控制器c语言程序,基于AT89C52单片机实时时钟程序编写

    #include'reg52.h' //包含单片机寄存器的头文件 #include'intrins.h' //包含_nop_()的头文件 sbit RS=P2^0; //LCD读写选择位 sbit R ...

  6. 89c51c语言程序,89C51单片机计算器C语言程序.doc

    89C51单片机计算器C语言程序 89C51单片机[计算器]C语言程序 89C51单片机[计算器]C语言程序2010-12-15 16:54/*89C51单片机[计算器]C语言程序*/ /*P2位选P ...

  7. C语言26个英文字母点阵,16X16点阵C语言程序(国外英文资料).doc

    16X16点阵C语言程序(国外英文资料) 16X16点阵C语言程序(国外英文资料) / * -- -16 * 16 # include < reg51. H > # include < ...

  8. 共阳极数码时钟c语言程序,基于51单片机C语言数字钟程序.doc

    基于51单片机C语言数字钟程序 基于51单片机C语言数字钟程序 数字电子钟的设计 一. 绪论 (一)引言 20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地 ...

  9. 湿度控制c语言程序,基于51单片机的湿度控制系统设计.doc

    基于51单片机的湿度控制系统设计 基于51单片机的湿度控制系统设计 摘要 关键词:单片机:湿度传感器:ADC0832数模转换 目 录 序 言1 第一章 系统的整体设计方案2 1.1设计内容2 1.2系 ...

最新文章

  1. Linux下的网络远程安装
  2. iframe显示错误页面
  3. 两个月拿到N个offer,看看我是如何做到的
  4. 【注册机】Zillions of Games v2.0.1p 注册机
  5. 江苏省高邮2021年高考成绩查询,2021年江苏高考成绩排名及一分一段表
  6. 如何在计算机设置鼠标宏,罗技鼠标指向宏怎么设置?鼠标宏功能设置教程
  7. CIM系统与MES系统介绍
  8. python视频培训班
  9. 用WPF实现打印及打印预览
  10. 深度学习教程(5) | 深度学习的实用层面(吴恩达·完整版)
  11. java中getBytes()方法的使用
  12. html网页怎么弄背景 图片,在html网页中如何设置背景图片?网页背景怎么设置?...
  13. 一名2018年应届生的美团前端校招面试之旅
  14. JAVA快递单号查询接口对接教程【快递鸟DEMO】
  15. Gos —— shell程序
  16. 无人再谈“永恒牛市”
  17. Samba TDB 数据库 在嵌入式中的使用
  18. kali创建文件_在kali中使用ecryptfs创建加密文件夹-bin文件夹
  19. 蚂蚁区块链第8课 如何创建新的账户,获取私钥和identity标识?
  20. python 利用递归算法来完成计算乘阶、斐波那契数列、汉诺塔

热门文章

  1. 水处理工艺流程图怎样绘制?分享水处理工艺流程图模板
  2. YII2框架中 where limit offset 函数对分页的使用
  3. HttpClient 带参数get请求
  4. 不忘初心,做一行爱一行
  5. 微信小程序--黑马程序员
  6. mamp mysql启动失败_MAMP pro mysql 启动失败
  7. 根据坐标点位置计算方位角(python实现)
  8. GNSS模块“电力通信”的应用
  9. 常用的四种CSS样式表格
  10. USACO2.4.4 Bessie Come Home (comehome)