基于51单片机的8x8 LED点阵

发布者:mlgb999最新更新时间:2020-03-16 来源: eefocus关键字:51单片机  8x8  LED点阵 手机看文章 扫描二维码
随时随地手机看文章

最近学了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; 

}

}

}


关键字:51单片机  8x8  LED点阵 引用地址:基于51单片机的8x8 LED点阵

上一篇:51例程---led点阵
下一篇:利用51单片机的LED点阵输出生日快乐

推荐阅读最新更新时间:2024-11-11 17:34

89c51单片机32个心形流水灯
#include reg52.h #include intrins.h //库函数 #define uint unsigned int #define uchar unsigned char//宏定义 void delay(uint xms)//延时函数 { uint i,j; for(i=xms;i 0;i--) for(j=110;j 0;j--); } void zys(uint t)//左右闪烁 { while(t--) { P3=P2=0x00; delay(500); P3=P2=0xff; P1=P0=0x00; delay(500);
[单片机]
89c<font color='red'>51单片机</font>32个心形流水灯
51单片机串口调试程序C语言
/*定义为中断方式串口处理*/ #define INTERSENDSTR /*不为8032系列芯片 */ //#define CHIP_8032 #include absacc.h #include reg51.h #include string.h #include err.h #ifdef INTERSENDSTR unsigned char xdata sSendComBuf ,sRecComBuf ; unsigned char data bOut,bIn,bSout,bSin; #else #define DEFSENDCHAR TI=0;SBUF=ACC;while(!TI);TI=0; #endif
[单片机]
51单片机(AT89C52)外部中断程序
#include reg52.h #define uchar unsigned char #define uint unsigned int #define DELAY 1000 void delay(uint z) //1ms { uint x,y; for(x=z;x 0;x--) for(y=111;y 0;y--); } void main() { uchar i,dt; EA=1; //开总中断 EX1=1; //开外部中断1 // IT1=0; //设置外部中断1为低电平触发 IT1=1; //设置外部中断1为下降沿触发 while(1)
[单片机]
<font color='red'>51单片机</font>(AT89C52)外部中断程序
c51单片机中断号及中断向量
1、外部中断 0、 1;分别由引脚/INT0、/INT1的电平信号引起。 2、定时/计数器 0、1;分别由T0、 T1的溢出引起。 3、串行口发送、接收;发送完一个字节或接收到一个字节引起。 上述共5个中断源。 一、中断号 外部中断0 0 定时器T0 1 外部中断1 2 定时器T1 3 串口中断 4 二、 interrupt 和 using 在C51中断中的使用 8051 系列 MCU 的基本结构包括:32 个 I/O 口(4 组8 bit 端口);两个16 位定时计数器;全双工串行通信;6 个中断源(2 个外部中断、2 个定时/计数器中断、1 个
[单片机]
c<font color='red'>51单片机</font>中断号及中断向量
51单片机定时器初值的计算
什么是时钟周期?什么是机器周期?什么是指令周期? 时钟周期 时钟周期也称为振荡周期,定义为时钟脉冲的倒数(可以这样来理解,时钟周期就是单片机外接晶振的倒数,例如12M的晶振,它的时间周期就是1/12 us),是计算机中最基本的、最小的时间单位。在一个时钟周期内,CPU仅完成一个最基本的动作。对于某种单片机,若采用了1MHZ的时钟频率,则时钟周期为1us;若采用4MHZ的时钟频率,则时钟周期为250ns。由于时钟脉冲是计算机的基本工作脉冲,它控制着计算机的工作节奏(使计算机的每一步都统一到它的步调上来)。显然,对同一种机型的计算机,时钟频率越高,计算机的工作速度就越快。但是,由于不同的计算机硬件电路和器件的不完全相同,所以其所
[单片机]
基于51单片机+SYN6288语音播报
资料 我用的是绿深电子技术的模块,资料也挺齐全的。也有相关例程。 SYN6288模块原理图 语音合成命令 接线 如何接线 接线其实很简单。 实现原理 51单片机 串口接收数据,根据不同的数据 通过串口的形式发送给 SYN6288,从而控制SYN6288语音播报。 程序代码 我用的是STC89C52 main.c #include reg52.h #include syn6288.h #include delay.h #include uart.h /**************芯片设置命令*********************/ unsigned char SYN_StopCom = {0xF
[单片机]
基于<font color='red'>51单片机</font>+SYN6288语音播报
51单片机原理及应用
  51单片机是一种基于哈弗(Harvard)结构设计的8位单片机,也叫做AT89C51。它由Intel公司在1980年代初推出,成为当时最受欢迎的单片机之一,至今仍广泛应用于各种嵌入式系统中。   51单片机的架构包括CPU、内存、IO口、定时器/计数器、串口、中断控制器等模块。其中CPU采用基于8位数据总线、16位地址总线的哈夫结构设计,运行速度一般为12MHz,最高可以达到33MHz。   内存分为程序存储器ROM和数据存储器RAM,ROM存储程序代码,RAM存储数据,它们的容量分别为64KB和128B。IO口包括32个口线,可以进行输入输出操作,其中P0口和P2口还具有外部中断功能。定时器/计数器共有4个,可以进行
[单片机]
51单片机的脉冲控制器
这个是在前面那个定时器的基础上改过来的。 脉冲控制器 输出4个脉冲,输出方式: 先输出P0 50ms,停止100ms后,输出P1 50ms,停止100ms后。。。 P3输出完成后,停止10秒,之后循环 由于时间比较规整,可以在中断里判断输出: 第一个到时,输出P0, 第二个到时,关闭P0 第三个到时,无动作 第四个到时,输出P1, 第五个到时,关闭P1 第六个到时,无动作 第七个到时,输出P2, 第八个到时,关闭P2 第九个到时,无动作 第十个到时,输出P3, 第11个到时,关闭P3 休息200个周期,第211个到时,复位i case
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved