LED点阵

#include <reg52.h>          //包含寄存器的库文件

sbit LED = P0^0;

sbit ADDR0 = P1^0;

sbit ADDR1 = P1^1;

sbit ADDR2 = P1^2;

sbit ADDR3 = P1^3;

sbit ENLED = P1^4;



void main()

{  

    ENLED = 0;

     ADDR0 = 0;

    ADDR1 = 0;

     ADDR2 = 0;

     ADDR3 = 0;            //74HC138开启三极管



     LED = 0;              //点亮点阵的一个点

     while(1);            //程序停止在这里 

}

     同样的方法,我们可以点亮点阵的任意一行,74HC 138的导通点阵所用的三极管的方法和数码管很类似,那我们现在来点亮第二行整行的LED。

#include <reg52.h>            //包含寄存器的库文件

sbit ADDR0 = P1^0;

sbit ADDR1 = P1^1;

sbit ADDR2 = P1^2;

sbit ADDR3 = P1^3;

sbit ENLED = P1^4;



void main()

{  

    ENLED = 0;

    ADDR0 = 1;

    ADDR1 = 0;

    ADDR2 = 0;

     ADDR3 = 0;               //74HC138开启三极管



     P0 = 0x00;               //点亮小灯

     while(1);               //程序停止在这里 

}

    从这里我们逐步发现了一个问题,其实我们讲一个数码管就是8个LED小灯,一个点阵是64个LED小灯。同样的道理,我们还可以把一个点阵理解成8个数码管。我们前边掌握了6个数码管的同时显示方法,那8个数码管也应该轻轻松松了。我们先把这个点阵全部点亮。

#include <reg52.h>            //包含寄存器的库文件

sbit LED = P0^0;

sbit ADDR0 = P1^0;

sbit ADDR1 = P1^1;

sbit ADDR2 = P1^2;

sbit ADDR3 = P1^3;

sbit ENLED = P1^4;



void main()

{  

    ENLED = 0;

    ADDR3 = 0;

     TMOD = 0x01;         //设置定时器0为模式1

     TH0  = 0xFC;

    TL0  = 0x67;         //定时值初值,定时1ms

    TR0  = 1;            //打开定时器0

     EA = 1;              //打开中中断

     ET0 = 1;             //打开定时器0中断    



     while(1);          //程序停止在这里,定时器运行,等待定时器中断

}

void InterruptTimer0()  interrupt 1        //中断函数

{

    static unsigned char j = 0;

     TH0 = 0xFC;                               //溢出后进入中断重新赋值

     TL0 = 0x67;

     P0 = 0XFF;                                   //消隐

    switch(j)

    {

         case 0: ADDR0=0; ADDR1=0; ADDR2=0; j++; break; 

         case 1: ADDR0=1; ADDR1=0; ADDR2=0; j++; break;

         case 2:  ADDR0=0; ADDR1=1; ADDR2=0; j++; break;

         case 3:  ADDR0=1; ADDR1=1; ADDR2=0; j++; break;

        case 4:  ADDR0=0; ADDR1=0; ADDR2=1; j++; break;

         case 5:  ADDR0=1; ADDR1=0; ADDR2=1; j++; break;

         case 6: ADDR0=0; ADDR1=1; ADDR2=1; j++; break;

        case 7: ADDR0=1; ADDR1=1; ADDR2=1; j=0; break;

         default: break;

     }     //动态刷新

    P0=0x00;

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值