普中开源电子分享网

 找回密码
 立即注册
搜索
查看: 2326|回复: 0

有关74HC595芯片的一个问题

 关闭 [复制链接]

1

主题

1

帖子

16

积分

新手上路

Rank: 1

积分
16
发表于 2019-9-2 20:55:17 | 显示全部楼层 |阅读模式
用的是普中的EM3 V2.2的板子,在做运用两个595芯片控制8*8点阵时,遇到的问题:74HC595芯片的存储寄存器的控制引脚(STCP),手册上说上升沿触发,将移位寄存器里面的8位数据转移到输出引脚上,我的问题是在移位之前将STCP置0还是8次移位之后再进行置0然后触发上升沿呢?
我看的普中教程里面是(只截取了595芯片的驱动程序子函数):
void HC595_Send(unsigned char dat1,unsigned char dat2)
{
        unsigned char i;
        for(i=0;i<8;i++)
        {
                SDI(串行数据输入)=dat1>>7;               
                dat1<<=1;
                SHCP(移位寄存器控制引脚)=0;
                _nop_();
                _nop_();
                SHCP=1;
                _nop_();
                _nop_();       
        }
        for(i=0;i<8;i++)
        {
               
                SDI=dat2>>7;
                dat2<<=1;
                SHCP=0;
                _nop_();
                _nop_();
                SHCP=1;
                _nop_();
                _nop_();       
        }
        STCP(移位寄存器控制引脚)=0;
        _nop_();
        _nop_();
       
        STCP=1;
        _nop_();
        _nop_();
       
}
但我根据这个程序,我的 点阵是全亮。后来我更改了程序,就达到了实验效果,以下是我改后的程序:
#include<reg51.h>
#include<intrins.h>

unsigned char code ledbyte1[]={0xFF,0xC9,0xB6,0xBE,0xDD,0xEB,0xF7,0xFF};
unsigned char code ledbyte2[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//定义两个数组,让点阵显示心型。

sbit SHCP=P3^6;
sbit STCP=P3^5;
sbit SDI=P3^4;

void main()
{
        EA=1;
        TMOD = 0x01;
        TH0 = 0xFD;
        TL0 = 0xD7;                             //配置定时器以及打开定时器和定时器中断
        TR0 = 1;
        ET0 = 1;
        while(1);
}

void HC595_Send(unsigned char dat1,unsigned char dat2)
{
        unsigned char i;
        STCP=0;
        for(i=0;i<8;i++)
        {
                SDI=dat1>>7;               
                dat1<<=1;
                SHCP=0;
                _nop_();
                _nop_();
                SHCP=1;
                _nop_();
                _nop_();       
        }
        for(i=0;i<8;i++)
        {
               
                SDI=dat2>>7;
                dat2<<=1;
                SHCP=0;
                _nop_();
                _nop_();
                SHCP=1;
                _nop_();
                _nop_();       
        }
        STCP=1;
        _nop_();
        _nop_();
       
}
void InterruptT0 () interrupt 1
{
        static unsigned char i=0;
                TH0 = 0xFD;
                TL0 = 0xD7;
//定时器定时0.6ms
                        switch(i)
                {
                        case 0: HC595_Send(ledbyte1[0],ledbyte2[0]);i++;break;
                        case 1: HC595_Send(ledbyte1[1],ledbyte2[1]);i++;break;
                        case 2: HC595_Send(ledbyte1[2],ledbyte2[2]);i++;break;
                        case 3: HC595_Send(ledbyte1[3],ledbyte2[3]);i++;break;
                        case 4: HC595_Send(ledbyte1[4],ledbyte2[4]);i++;break;
                        case 5: HC595_Send(ledbyte1[5],ledbyte2[5]);i++;break;
                        case 6: HC595_Send(ledbyte1[6],ledbyte2[6]);i++;break;
                        case 7: HC595_Send(ledbyte1[7],ledbyte2[7]);i=0;break;
                        default:break;
                }       
}

看了好多人的程序都没有涉及到我想知道的这个点,在这想问问大神们595芯片STCP到底是如何触发的?
回复

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2024-4-20 08:12 , Processed in 0.091772 second(s), 30 queries .

Powered by 论坛搭建 X3.4

Copyright © 2001-2021, Tencent Cloud.

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