普中开源电子分享网

 找回密码
 立即注册
搜索
查看: 2656|回复: 2

hc595和8*8矩阵循环显示I,爱心,Y,烧写板中只显示I其余两个不显示,求大佬指点

[复制链接]

2

主题

2

帖子

12

积分

新手上路

Rank: 1

积分
12
发表于 2020-8-11 22:31:29 | 显示全部楼层 |阅读模式
程序如下
/**************************************************************************************
实验现象:下载程序后,LED点阵显示数字0
                  
接线说明: (具体接线图可见开发攻略对应实验的“实验现象”章节)
       
注意事项:                                                                                                                                                               

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

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

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

//--定义使用的IO口--//
sbit SRCLK=P3^6;
sbit RCLK=P3^5;
sbit SER=P3^4;


u8 wo[]={0x01,0x81,0x81,0xFF,0xFF,0x81,0x81,0x01};        //("I")类似于动态数码管的段选,8*8中是DPa-DPh的控制的行,该数据传入HC595
u8 wo1[]={0x03,0xC3,0xC3,0xFF,0xFF,0xC3,0xC3,0x03};        //("I"宽体)
u8 xin[]={0x38,0x7C,0x7E,0x3F,0x3F,0x7E,0x7C,0x38};        //(爱心)
u8 y[]={0x80,0xC0,0x60,0x3F,0x3F,0x60,0xC0,0x80};        //"Y"

/*取模要先上下颠倒*/
u8 ledwei[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};        //类似于动态数码管的位选

/*******************************************************************************
* 函 数 名         : delay
* 函数功能                   : 延时函数,i=1时,大约延时10us
*******************************************************************************/
void delay(u16 i)
{
        while(i--);       
}

void LED1(u8 dat1)
{
        P0=dat1;
}
/*******************************************************************************
* 函 数 名         : Hc595SendByte(u8 dat1,u8 dat2)
* 函数功能                   : 通过595发送2个字节的数据
* 输    入         : dat1:第2个595输出数值
*                  * dat2: 第1个595输出数值
* 输    出         : 无
*******************************************************************************/
void Hc595SendByte(u8 dat)
{
        u8 a;

        SRCLK = 1;
        RCLK = 1;

        for(a=0;a<8;a++)                 //发送8位数
        {
                SER = dat >> 7;                 //从最高位开始发送
                dat <<= 1;

                SRCLK = 0;                         //发送时序
                _nop_();
                _nop_();
                SRCLK = 1;       
        }
        RCLK = 0;
        _nop_();
        _nop_();
        RCLK = 1;
}


/*******************************************************************************
* 函 数 名       : main
* 函数功能                 : 主函数
* 输    入       : 无
* 输    出             : 无
*******************************************************************************/
void main()
{       
        u8 i=0;
        u8 n,m,v;
/*        while(1)
        {
           for(i=0;i<8;i++)
           {
                           Hc595SendByte(wo1[i]);
                         LED1(ledwei[i]);
                        delay(10);                       
           }
           delay(50000);
           for(i=0;i<8;i++)
           {
                           Hc595SendByte(xin[i]);
                         LED1(ledwei[i]);
                        delay(10);                       
           }
           delay(50000);
           for(i=0;i<8;i++)
           {
                           Hc595SendByte(y[i]);
                         LED1(ledwei[i]);
                        delay(10);                       
           }
           delay(50000);
        }
*/
        while(1)
        {
                for(n=0;n<500;n++)
                {
                        for(i=0;i<8;i++)
                           {
                                   Hc595SendByte(wo1[i]);
                                 LED1(ledwei[i]);
                                delay(10);                       
                           }
                       
                }
                for(m=0;m<500;m++)
                {
                        for(i=0;i<8;i++)
                           {
                                   Hc595SendByte(xin[i]);
                                 LED1(ledwei[i]);
                                delay(10);                       
                           }
                }
                for(v=0;v<500;v++)
                {
                        for(i=0;i<8;i++)
                           {
                                   Hc595SendByte(y[i]);
                                 LED1(ledwei[i]);
                                delay(10);                       
                           }
                }
        }               
}
回复

使用道具 举报

0

主题

1

帖子

4

积分

新手上路

Rank: 1

积分
4
发表于 2020-8-18 13:47:03 | 显示全部楼层
本帖最后由 xp546126163 于 2020-8-18 13:49 编辑

#include<reg51.h>
#include<intrins.h>
typedef unsigned int  u16;
typedef unsigned char u8;
sbit RCLK=P3^5;
sbit SRCLK=P3^6;
sbit SER=P3^4;
u8 code table_i[]={0x03,0xC3,0xC3,0xFF,0xFF,0xC3,0xC3,0x03};//i
u8 code table_x[]={0x38,0x7C,0x7E,0x3F,0x3F,0x7E,0x7C,0x38}; //x
u8 code table_y[]={0x80,0xC0,0x60,0x3F,0x3F,0x60,0xC0,0x80}; //y
u8 code table[]={0X7F,0XBF,0XDF,0XEF,0XF7,0XFB,0XFD,0XFE};   //p0


void disp(u8 dat1)
{   
    P0=dat1;
}
void HC595SendByte(u8 dat)
{    u8 i;
     RCLK=0;
      SRCLK=0;

    for(i=0;i<8;i++)
    {   SER=dat>>7;
        dat=dat<<1;
        SRCLK=1;
        _nop_();
        _nop_();
        SRCLK=0;
    }
          RCLK=1;
          _nop_();
          _nop_();
          RCLK=0;


}


void wei(u8 *zi)
{   u8 i;
    for(i=0;i<8;i++)
        {   
           disp(table);
           HC595SendByte(zi);
           HC595SendByte(0x00);      

         }

}

void fun()
{
u16 i;
while(1)
{
for(i=0;i<999;i++)
   {
       wei(table_i);

   }
for(i=0;i<999;i++)
   {
       wei(table_x);

   }
   for(i=0;i<999;i++)
   {
       wei(table_y);

   }
}
}
void main()
{
    while(1)
    {
     fun();
    }
}
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

Archiver|手机版|小黑屋|普中开源电子分享网 粤ICP备16123577号-2

GMT+8, 2024-4-26 10:21 , Processed in 0.107224 second(s), 33 queries .

Powered by 论坛搭建 X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表