历史上的今天
返回首页

历史上的今天

今天是:2025年03月16日(星期日)

正在发生

2020年03月16日 | 基于51单片机的8x8 LED点阵

2020-03-16 来源:eefocus

最近学了LED点阵,并用了三种方式显示字母组,分别为按键控制显示,自动变换显示,和滚动显示


第一种

#include"reg51.h"

#include

typedef unsigned char u8;

typedef unsigned int u16;


sbit RCLK=P3^5;

sbit SRCLK=P3^6;

sbit SER=P3^4;


#define GPIP_KEY P1

#define GPIO_DIG P0


u8 keyvalue;


u8 code duan[16][8]={{0x00,0x42,0x7e,0x42,0x42,0x3c,0x00,0x00},//对字母编码

                     {0x00,0x11,0x12,0x14,0xF8,0x14,0x12,0x11},

                     {0x00,0x00,0x60,0x10,0x0E,0x10,0x60,0x00},

                     {0x18,0x24,0x22,0x11,0x22,0x24,0x18,0x00},

                     {0x00,0x42,0x7E,0x42,0x02,0x06,0x00,0x00},

                     {0x00,0x06,0x61,0x91,0x89,0x86,0x60,0x00},

                     {0x81,0xFF,0x81,0x60,0x18,0x86,0xFF,0x81}};


u8 code ledwei[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//扫描数组



void delay(u16 i)

{  

     while(i--);

}


void keydown()  //按键函数

{   

 u8 a;

     GPIP_KEY=0x0f;

 if(GPIP_KEY!=0x0f)

 {  

     delay(1000);

 if(GPIP_KEY!=0x0f)

 {

GPIP_KEY=0x0f;

switch(GPIP_KEY)

{

  case(0x07): keyvalue=0; break;

  case(0x0b): keyvalue=1; break;

  case(0x0d): keyvalue=2; break;

  case(0x0e): keyvalue=3; break;

    }

    GPIP_KEY=0xf0;

    switch(GPIP_KEY)

{

  case(0x70): keyvalue=keyvalue; break;

  case(0xb0): keyvalue=keyvalue+4; break;

  case(0xd0): keyvalue=keyvalue+8; break;

  case(0xe0): keyvalue=keyvalue+12; break;

}

while((a<50)&&(GPIP_KEY!=0xf0))

{

  delay(1000);

  a++;

}

 }


 }

}


void hc595sendbyte(u8 dat) //hc595模块定义

{

    u8 a;

SRCLK=0;

RCLK=0;

for(a=0;a<8;a++)

{

    SER=dat>>7;

    dat<<=1;

    SRCLK=1;

    _nop_();

    _nop_();

    SRCLK=0;

 }

 RCLK=1;

 _nop_();

 _nop_();

 SRCLK=0;

}


void main() 

{

   u8 i;

   while(1)

   {

     keydown();


 for(i=0;i<8;i++)    

 {

          P0=ledwei[i];

  hc595sendbyte(duan[keyvalue][i]);

  delay(100);

  hc595sendbyte(0x00); //LED矩阵消影


}

}

}

第二种:

#include"reg51.h"

#include

typedef unsigned char u8;

typedef unsigned int u16;


sbit RCLK=P3^5;

sbit SRCLK=P3^6;

sbit SER=P3^4;


#define GPIP_KEY P1

#define GPIO_DIG P0


u8 keyvalue;


u8 code duan[7][8]={{0x00,0x42,0x7e,0x42,0x42,0x3c,0x00,0x00},//字母段设置

                     {0x00,0x11,0x12,0x14,0xF8,0x14,0x12,0x11},

                     {0x00,0x00,0x60,0x10,0x0E,0x10,0x60,0x00},

                     {0x18,0x24,0x22,0x11,0x22,0x24,0x18,0x00},

                     {0x00,0x42,0x7E,0x42,0x02,0x06,0x00,0x00},

                     {0x00,0x06,0x61,0x91,0x89,0x86,0x60,0x00},

                     {0x81,0xFF,0x81,0x60,0x18,0x86,0xFF,0x81}};


u8 code ledwei[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//扫描段


void delay(u16 i)

{  

     while(i--);

}


void hc595sendbyte(u8 dat) //hc595模块设置

{

    u8 a;

    SRCLK=0;

    RCLK=0;

    for(a=0;a<8;a++)

    {

        SER=dat>>7;

        dat<<=1;

        SRCLK=1;

        _nop_();

        _nop_();

        SRCLK=0;

     }

     RCLK=1;

     _nop_();

     _nop_();

     SRCLK=0;

}


void main()

{


   while(1)

   {

      u8 i,j,t=100;



     for(i=0;i<7;i++)    

     {


        while(t--)

        { 

          for(j=0;j<8;j++)

          {

             P0=ledwei[j];

             hc595sendbyte(duan[i][j]);

             delay(100);

             hc595sendbyte(0x00);//LED矩阵消影

          }


         }

         t=100; 


     }

     hc595sendbyte(0x00);


   }



第三种


#include"reg51.h"

#include

typedef unsigned char u8;

typedef unsigned int u16;


sbit RCLK=P3^5;

sbit SRCLK=P3^6;

sbit SER=P3^4;


#define GPIP_KEY P1

#define GPIO_DIG P0


u8 keyvalue;


u8 code duan[]={0x00,0x00,0x00,0x00,0x42,0x7E,0x42,0x00,  //I

                0x41,0x7F,0x41,0x01,0x01,0x03,0x00,  //L

                0x3C,0x42,0x42,0x42,0x3C,0x00,   //O

                0x70,0x0C,0x02,0x0C,0x70,0x00,  //V

                0x7F,0x49,0x49,0x49,0x49,0x00,  //E

0x60,0x10,0x0E,0x10,0x60,0x00,  //Y

0x3C,0x42,0x42,0x42,0x3C,0x00,   //O

0x40,0x7C,0x42,0x01,0x01,0x42,0x7C,0x40 //U

};


u8 code ledwei[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//扫描编码段


void delay(u16 i)

{  

     while(i--);

}


void hc595sendbyte(u8 dat)//hc595模块初始化

{

    u8 a;

SRCLK=0;

RCLK=0;

for(a=0;a<8;a++)

{

    SER=dat>>7;

    dat<<=1;

    SRCLK=1;

    _nop_();

    _nop_();

    SRCLK=0;

 }

 RCLK=1;

 _nop_();

 _nop_();

 SRCLK=0;

}


void main()

{


   while(1)

   {

      u8 i,j,t=30,q=0;


 for(i=0;i<46;i++)

 {


while(t--)

  for(j=i;j<8+i;j++)

  {

     P0=ledwei[q++];

     hc595sendbyte(duan[j]);

 delay(100);

 hc595sendbyte(0x00);  //LED矩阵消影

  }

  q=0;

 }

 t=30; 

}

}

}


推荐阅读

史海拾趣

Hilscher Gesellschaft für Systemautomation mbH公司的发展小趣事

随着技术实力的增强,HVPSI开始将目光投向国际市场。公司积极参与国际电子展会,与全球各地的客户建立联系,展示其高压电源解决方案的卓越性能。同时,HVPSI也加强了与跨国企业的合作,共同开发定制化的高压电源产品,满足特定行业的需求。这一系列举措极大地拓宽了公司的市场份额,使其在国际舞台上崭露头角。

Dicon Fiberoptics Inc公司的发展小趣事

作为一家具有高度责任感的企业,DiCon长期以来一直致力于为国防工业提供高质量的光纤通信产品。公司的首批产品之一FDDI交换机在许多海军舰艇上部署了30多年,为国家的安全稳定做出了重要贡献。这一里程碑事件不仅彰显了DiCon在光纤通信技术领域的实力,也进一步提升了公司的品牌形象和市场地位。

Excelitas公司的发展小趣事

Excelitas公司自成立以来,一直致力于光电技术的研发与创新。在某次关键的技术突破中,公司成功研发出一种新型高效能LED灯,这种灯在紫外光固化领域具有显著优势。这一技术突破不仅为公司赢得了市场份额,还确立了Excelitas在光电领域的领先地位。公司随后围绕这一技术,推出了一系列相关产品,进一步巩固了市场地位。

Corsair Memory Inc公司的发展小趣事

Corsair Memory Inc公司,由Don Lieberman、John Beekley与Andy Paul于1994年在美国加州佛利蒙创立。起初,公司专注于为英特尔系统生产Cache-On-A-Stick (COAST)模组。然而,随着英特尔将快取内存由主板移至处理器晶体中,Corsair迅速调整战略,将注意力转向电脑内存市场。这一转变不仅使Corsair避开了潜在的市场风险,更为其后续的内存业务奠定了坚实的基础。

广东爱晟电子(exsense)公司的发展小趣事

广东爱晟电子自成立以来,一直致力于NTC热敏电阻技术的研发和创新。在2010年代初,公司面临技术瓶颈,市场竞争激烈。然而,爱晟电子团队不畏艰难,通过深入研究,成功研发出具有更高精度和稳定性的NTC热敏电阻。这一技术突破迅速获得了市场的认可,公司销售额逐年攀升,奠定了在电子行业的领先地位。

Gould Fiber Optics公司的发展小趣事
可能是电源插头未插好、保险丝熔断、输入电压异常或电源内部元件损坏。

问答坊 | AI 解惑

EDA?

我想学EDA,希望大家给点建议呗,…

查看全部问答>

【求助】在wince6.0中定制shell的相关问题

在wince6.0下,按照网上寻找的步骤来定制shell,可是网上提供的参考文献是PB5.0的文件路径,有些文件和路径对应不起来 特此求助 譬如:在wince5.0中路径E:\\WINCE500\\public\\shell\\oak\\lib\\x86\\retail\\aygutils.lib      ...…

查看全部问答>

我想转学习嵌入式,不知道行不?

  信息与计算专业,毕业2年一直在用VC在一家小公司里面,写应用软件软件。   C语言一般,大学期间学习过电路的知识,不过多是理论。2年了。基本忘的差不多了。 我想知道 我现在转去学嵌入式,难不?跨度大不?…

查看全部问答>

为什么会发生程序跑飞和程序陷入死循环现象

为什么会发生程序跑飞和程序陷入死循环现象呢? …

查看全部问答>

PC机中IDE接口的端口地址

PC机有个IDE 接口,我通过他接个小硬盘,如何知道这个IDE接口的端口地址呢?我要通过这个地址进行 通讯,高手请指教…

查看全部问答>

wince 里的例子运行不了

请教,当在evc4.0里面创建winapi的应运时,编译通过,模拟器可以运行 而创建mfc应用时 ,编译可以通过, 在模拟器上运行出错 提示:“....Make sure the path and filename are correct and that all the required libraries are available.” ...…

查看全部问答>

关于仿真板AD采样

我用的是DEC2812。查看了一下仿真板,没有发现AD有输入信号,为什么采用TI提供的例子进行仿真时AdcRegs.RESULT会有转换数据? 另外,进入AD中断程序后,为什么可以直接读转换结果,不需要等待转换结束才开始读吗? 请各位指点! …

查看全部问答>

电路设计以及EMC器件如何选择?

1.电路设计及EMC器件选择  在新设计及开发项目的开始,正确选择有源与无源器件及完善的电路设计技术,将有利于以最低的成本获得EMC认证,减少产品因屏蔽和滤波所带来的额外的成本、体积和重量。 这些技术也可以提高数字信号的完整性及模拟 ...…

查看全部问答>

单片机原理与应用实例仿真(51)

单片机原理与应用实例仿真(51)…

查看全部问答>

TI 推出最新更新的MR16调光方案,欢迎讨论

这是TI针对目前MR16调光市场推出的最新方案,输出功率一般限制在6W以下。兼容性和调光效果还不错。 目前方案的应用规格为: 电性能测试结果: 调光兼容测试结果和EMI测试结果: TI LM3492 MR16调光板子: 待测试图: …

查看全部问答>