⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 led汉字显示_移位寄存器方式(595)程序成功.txt

📁 多个595程序
💻 TXT
📖 第 1 页 / 共 2 页
字号:
/* 延时子程序                                                             */
/*                                                                                                            */
/********************************************************/

void delay(int ms)
{                           
   int k;
   while(ms--)
   {
     for(k=0; k<250; k++)
     {
      _nop_();
      _nop_();
      _nop_();
      _nop_();
     }
   }
}

/********************************************************/
/*                                                                                                            */
/*将显示数据送入74HC595内部移位寄存器                                  */
/*                                                                                                            */
/********************************************************/

void WR_595(void)
{
     uchar j;
      for (j=0;j<8;j++)
     {
      temp=temp<<1 ; 
      SDATA_595=CY;
      SCLK_595=1;                     //上升沿发生移位
       _nop_();
       _nop_();
      SCLK_595=0;
     }        
}

/********************************************************/
/*                                                                                                            */
/*将移位寄存器内的数据锁存到输出寄存器并显示                              */
/*                                                                                                            */
/********************************************************/

void OUT_595(void)
{
    RCK_595=0; 
    _nop_();
    _nop_();
    RCK_595=1;                     //上升沿将数据送到输出锁存器
    _nop_();
    _nop_(); 
    _nop_();
    RCK_595=0;
}

/********************************************************
*                                                                                                              *
*  主程序                                                                  *
*                                                                                                              *
*********************************************************/

main()
{  
   SCLK_595=0;
   RCK_595=1;
    
   while(1)             
    {
      uchar i;
      for (i=0; i<8; i++)
       {
        temp=DAT[ i ];               //取显示数据
        WR_595();
        OUT_595();
        delay(100);
       }
    }
}             

 
 
 
 
 
74ls595 8位输出锁存移位寄存器 
RESET: 复位信号
shitf clock:移位时钟
serial data input:串行数据输入
output enable:输出使能
latch clock:锁存时钟
595有3层结构:
第一层为移位D触发器;
第二层为锁存D触发器;
第三层为输出3态门;
当复位信号为0时,移位D触发器清0;
当移位脉冲从L->H时,第一个移位D触发器的Q=D;
其它的Qn=Qn-1;
当锁存脉冲从0->1时,第二层为锁存D触发器的输出=/输入;
当OE=1时,595的输出为高阻态;
当OE=0时,595的输出为第二层为锁存D触发器的输出的反相;



问题: 本人新手刚上路,现在用51单片机和74HC595来做一个控制LED显示电路,
看74HC595资料上的说明很简单,可是我试着去编程,却发现,
这个74HC595怎么也不工作啊。我对这个芯片一点不了解
下面是我编的程序来测试74HC595功能,
这里面肯定有错误,请高人们指点,小的多谢了!
enable equ p0.6  //595的13脚   输出使能引脚
shift equ p0.4   //595的11脚   输入移位引脚
store equ p0.5   //595的12脚   数据存储引脚
data equ p3.7    //595的14脚   数据输入引脚
我的目的很简单,只想在595的Q0-Q7段输出01010101B (即#55H):

main_loop:
    mov r4,#08h   //8位
    mov a,#55h    //送入数据
    clr c
    setb enable   //不使能输出
move_data:
    rrc a         //把要发送数据移入C
    mov data,c    //一位一位的输入
    setb shift   
    setb store    
    nop
    clr shift
    clr store
    nop
    djnz r4,move_data //8位输入完毕
    clr enable        //使能输出
    nop
    call delay_5ms    //延时5ms
    jmp main_loop
   
请大侠们指点啊,急死我了,这么几天都搞不出来,毫无头绪,跪谢! 
回答1:没人在吗?怎么没有人回复啊?
斑竹,救命啊
回答2:PO口此时必须上拉电阻
回答3:我修改了一下(PO口此时必须上拉电阻)main_loop:
    mov r4,#08h   //8位
    mov a,#55h    //送入数据
    clr shift
//    clr c       //No use

move_data:
    mov data,Acc.7    //一位一位的输入
    setb shift       //给上升沿  
   
    nop
    clr shift
   rrc a         //把要发送数据移入C

    nop
    djnz r4,move_data //8位输入完毕
    clr enable        //使能输出
    nop
    setb enable   //不使能输出-----给上升沿打入8bit数据
    call delay_5ms    //延时5ms
    jmp main_loop


再试试看,根据595datasheet的时序来,就可以了!

回答4:setb store/nop/nop/ clr store 放在最后就可以了
回答5:store /shift/enable三者位置关系到底怎么放呢?楼上的,请问store /shift/enable三者位置关系到底怎么放呢?
使能输出必须一直位底电平吗?
还有就是 数据存储脉冲store只能发一个吗?而且放在第八个移位脉冲shift之后?
我很是糊涂,请高人指点迷津

回答6:网上找来的,给你参考一下,本人不测试过!;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;595A:9----595B:14
;;595A:14-------------P3.7
;;595A:11---595B:11---P3.5
;;595A:12---595B:12---P3.4
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;以下定义IO口
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        DA2             EQU     P3.7    ;595-14
        LATCH2          EQU     P3.4    ;595-12
        CLK2            EQU     P3.5    ;595-11
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;以下定义缓冲区
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        DATA595A        EQU     4CH
        DATA595B        EQU     4BH
        DELBUF          EQU     4AH
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;        
;;操作模式
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
       MOV     DATA595A,     #0FEH
       MOV     DATA595B,     #0EFH
       LCALL   DATA595
       
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;595子程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

DATA595:        CLR     DA2
                CLR     LATCH2
                CLR     CLK2
                LCALL   SDELAY
                MOV     A,  DATA595B
                MOV     R7, #08H
MAIN595B1:      RLC     A
                MOV     DA2,    C
                LCALL   SDELAY
                SETB    CLK2
                LCALL   SDELAY
                CLR     CLK2
                LCALL   SDELAY
                DJNZ    R7, MAIN595B1
                MOV     A,  DATA595A
                MOV     R7, #08H
MAIN595B2:      RLC     A
                MOV     DA2,    C
                LCALL   SDELAY
                SETB    CLK2
                LCALL   SDELAY
                CLR     CLK2
                LCALL   SDELAY
                DJNZ    R7, MAIN595B2
                LCALL   SDELAY
                SETB    LATCH2
                LCALL   SDELAY
                LCALL   SDELAY
                CLR     LATCH2
                CLR     DA2
                CLR     CLK2
                RET

SDELAY:       MOV       DELBUF,     #18D
SDEL1:        NOP
              NOP
              DJNZ      DELBUF,     SDEL1
              RET

回答7:还有一个例程.;;============================================
;; 5个74HC595一起,CLK和DATA脚分别连起来,
;; LATCH脚独立控制
;;============================================

        SCLK     EQU     P0.1
        SDATA    EQU     P0.0


WRITE5950:      LCALL WRITE595
                SETB P2.0
                NOP
                CLR P2.0
                NOP
                SETB P2.0
                NOP
                CLR P2.0
                RET
WRITE5951:      LCALL WRITE595
                SETB P2.1
                NOP
                CLR P2.1
                NOP
                SETB P2.1
                NOP
                CLR P2.1
                RET
WRITE5952:      LCALL WRITE595
                SETB P2.2
                NOP
                CLR P2.2
                NOP
                SETB P2.2
                NOP
                CLR P2.2
                RET
WRITE5953:      LCALL WRITE595
                SETB P2.3
                NOP
                CLR P2.3
                NOP
                SETB P2.3
                NOP
                CLR P2.3
                RET
WRITE5954:      LCALL WRITE595
                SETB P2.4
                NOP
                CLR P2.4
                NOP
                SETB P2.4
                NOP
                CLR P2.4
                RET
WRITE595:       MOV R5,#08H
                MOV A,2AH
LOOP:           RLC A
                MOV P0.0,C
                SETB P0.1
                NOP
                CLR P0.1
                DJNZ R5,LOOP
                RET

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -