单片机8*8LED点阵—显示汉字实验

发布者:DazzlingSpirit最新更新时间:2020-02-07 来源: 51hei关键字:单片机  8*8LED点阵  显示汉字 手机看文章 扫描二维码
随时随地手机看文章

一、读懂代码

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


自己对代码的简短理解都写成注释附在下面的源代码中了,有不对的地方请指正


实现现象:下载程序后点阵上显示数字0

            

注意事项:一定要将JOE短接片短接到GND端,如果不需要595后面的小灯点亮可以拔掉JP595短接片。                                                                               

***************************************************************************************/


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

#include


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};


我要显示的是佐字,对应的代码经过推断

 


所以代码修改为


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


三、烧录

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

关键字:单片机  8*8LED点阵  显示汉字 引用地址:单片机8*8LED点阵—显示汉字实验

上一篇:51单片机FFT运算转换程序 adc数据
下一篇:基于单片机的数字电压表毕业设计

小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
更多往期活动

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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