美文网首页16级单片机实践经验分享
8*8LED点阵显示-李颖超-0113

8*8LED点阵显示-李颖超-0113

作者: 李颖超0113 | 来源:发表于2018-05-19 15:00 被阅读29次

一、读懂代码

因为自身C语言基础比较差,所以决定先把代码看懂然后再在源代码的基础上修改写成自己的点阵显示。
自己对代码的简短理解都写成注释附在下面的源代码中了,有不对的地方请指正

              8*8LED点阵———显示数字实验
实现现象:下载程序后点阵上显示数字0
            
注意事项:一定要将JOE短接片短接到GND端,如果不需要595后面的小灯点亮可以拔掉JP595短接片。                                                                               
***************************************************************************************/

#include "reg51.h"           //此文件中定义了单片机的一些特殊功能寄存器
#include<intrins.h>

typedef unsigned int u16;     //对数据类型进行声明定义
typedef unsigned char u8;

sbit SRCLK=P3^6;//用SRCLK来表示P3口的第六位
sbit RCLK=P3^5;//用RCLK来表示P3口的第五位
sbit SER=P3^4;//用SER来表示P3口的第四位
//SRCLK、RCLK、SER都是下面程序用到的的芯片74hc595中的引脚的名称,想对芯片进一步了解的同学可以看一下代码后面附的链接

u8 ledduan[]={0x00,0x00,0x3e,0x41,0x41,0x41,0x3e,0x00};
u8 ledwei[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
//二极管点亮的的条件是对应行列分别为高低电平使得电流产生。
//对应本实验实验板即为列线为高电平,行线为低电平时二极管被点亮
//第一行代码控制哪列为高电平即为需要此列是否点亮,第二行控制哪一行为低电平,即某一行被点亮,行列共同点亮时交叉处LED亮灯
//实验板的原理图因为自己看不懂所以这里的行列可能混了【手动狗头】对这个比较清楚的同学可以帮给我指正一下,谢谢。
/*******************************************************************************
* 函 数 名         : delay
* 函数功能         : 延时函数,i=1时,大约延时10us
死循环实现延时功能
*******************************************************************************/
void delay(u16 i)
{
    while(i--); 
}

/*******************************************************************************
* 函数名         : Hc595SendByte(u8 dat)
* 函数功能         : 向74HC595发送一个字节的数据
* 输入           : 无
* 输出             : 无
将一个字节的信息串行输入给74HC595以后由芯片并行输出
*******************************************************************************/
void Hc595SendByte(u8 dat)
{
    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_();
    RCLK=0;
}

/*******************************************************************************
* 函 数 名       : main
* 函数功能       : 主函数
* 输    入       : 无
* 输    出         : 无
*******************************************************************************/
void main()
{           
    u8 i;
    while(1)//轮回点亮循环体
    {
        P0=0x7f;
        for(i=0;i<8;i++)
        {
            P0=ledwei[i];         //位选
            Hc595SendByte(ledduan[i]);  //发送段选数据
            delay(100);        //延时
            Hc595SendByte(0x00);  //消隐,如果的话点阵显示时会出现重影现象
        }   
    }       
}

74HC595芯片资料:http://www.51hei.com/chip/3978.html

二、修改代码

理解代码以后我们对代码进行修改来实现自己的点阵显示。
因为对亮度和别的指标没有要求,所以只需要修改和字符显示的这一段就可以啦

u8 ledduan[]={0x00,0x00,0x3e,0x41,0x41,0x41,0x3e,0x00};
我要显示的是佐字,对应的代码经过推断 替换代码推断.jpg

所以代码修改为

u8 ledduan[]={0x20,0x7f,0xd0,0x71,0x51,0xdf,0x51,0x51};

三、烧录

将代码编译形成新的hex文件后下载到实验板上就OK啦,当然前提是你没有像我一样忘记JOE短接片短接到GND端


成果.jpg

相关文章

  • 8*8LED点阵显示-李颖超-0113

    一、读懂代码 因为自身C语言基础比较差,所以决定先把代码看懂然后再在源代码的基础上修改写成自己的点阵显示。自己对代...

  • 实验1—杨金钰—0114

    8*8LED点阵显示字母YJ 电教本1601 杨金钰 201612030114 一、LED显示原理 LED点阵显示...

  • 2018-05-13 8*8LED点阵显示的实验——显示I♡S

    8*8LED点阵显示的实验——显示I♡SDNU 教育学部电教本1601柳珏玺 201612030101 一、单片机...

  • 实验一-沈正浩-0214

    8*8LED点阵实验——显示SDNU 一、单片机使用过程 使用单片机的LED点阵,将单片机和电脑连接好,且用kei...

  • 8*8LED点阵显示汉字

    一.实验目的 在大板LED点阵上显示汉字“中国加油” 二.实验器材 keil软件,普中烧录软件,实验板 三.实验原...

  • 实验1 王倩 0121

    一、实验名称:8*8LED点阵显示“W”“X”“M”“心形” 二、实验前的准备: 1.知识准备:大板共阴极,对于共...

  • 实验一 0206 刘春平

    8*8LED点阵显示实验一——显示P❤T 身为一个理科生,对于表白这种事情当然不能简简单单靠几句甜言蜜语就完事,还...

  • 实验一:8×8LED点阵显示“ABCDEFG”

    一、实验目的 1.了解LED8×8点阵的内部结构。 2.学会编写点阵显示实验的代码程序。 3.了解编写程序各部分的...

  • 实验1-于钦春-0111

    8*8LED点阵显示“仁” 在了解到单片机应用范围很广的时候,便对其有了很大的兴趣,自己理解反应比较慢,所以慢慢的...

  • 2018-05-17 8*8LED点阵显示

    实验步骤 一、确定汉字点阵 二、编写代码 #include "reg51.h"//定义单片机的特殊寄存器#incl...

网友评论

    本文标题:8*8LED点阵显示-李颖超-0113

    本文链接:https://www.haomeiwen.com/subject/lqzodftx.html