那位高手可以指导下74hc595如何控制流水灯,主要软件编程~~~~
2个回答
展开全部
74HC595 走马灯演示程序
C语言:
#include < ;reg51.h> //51芯片管脚定义头文件
#include < ;intrins.h>型嫌 //内部包含延时函数 _nop_() ;
#define uchar unsigned char
#define uint unsigned int
uchar code DAT[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f} ;
sbit SDATA_595=P1^0 ; //串行数据输入
sbit SCLK_595 =P1^1 ; //移位时钟脉冲
sbit RCK_595 =P1^2 ; //输出锁存器控制脉冲
uchar temp ;
/拆键********************************************************/
/* */
/* 延时子程序 */
/* */
/********************************************************/
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) ;
}
}
}
汇编语言:
SDATA_595 EQU P1.0 ;串行数据输入
SCLK_595 EQU P1.1 ;移位时钟脉冲
RCK_595 EQU P1.2 ;输出锁存器旅租巧控制脉冲
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:
MOV SP,#60H
MOV R0,#0FEH
MAIN1:
CALL OUT_595
CALL DELAY
MOV A,R0
RL A
MOV R0,A
JMP MAIN1
;----------------------------------------------------------------------
;输出锁存器输出数据子程序
;----------------------------------------------------------------------
OUT_595:
LCALL WR_595
CLR RCK_595
NOP
NOP
SETB RCK_595 ;上升沿将数据送到输出锁存器
NOP
NOP
NOP
CLR RCK_595
RET
;---------------------------------------------------------------------
;移位寄存器接收数据子程序
;---------------------------------------------------------------------
WR_595:
MOV R4,#08H ;
MOV A,R0
WR_LOOP:
RLC A
MOV SDATA_595,C
SETB SCLK_595 ;上升沿发生移位
NOP
NOP
CLR SCLK_595
DJNZ R4,WR_LOOP
RET
;--------------------------------------------------------------------
;延时子程序
;--------------------------------------------------------------------
DELAY:
MOV R5,#03H
DEL0:
MOV R6,#0FFH
DEL1:
MOV R7,#0FFH
DJNZ R7,$
DJNZ R6,DEL1
DJNZ R5,DEL0
RET
END
C语言:
#include < ;reg51.h> //51芯片管脚定义头文件
#include < ;intrins.h>型嫌 //内部包含延时函数 _nop_() ;
#define uchar unsigned char
#define uint unsigned int
uchar code DAT[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f} ;
sbit SDATA_595=P1^0 ; //串行数据输入
sbit SCLK_595 =P1^1 ; //移位时钟脉冲
sbit RCK_595 =P1^2 ; //输出锁存器控制脉冲
uchar temp ;
/拆键********************************************************/
/* */
/* 延时子程序 */
/* */
/********************************************************/
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) ;
}
}
}
汇编语言:
SDATA_595 EQU P1.0 ;串行数据输入
SCLK_595 EQU P1.1 ;移位时钟脉冲
RCK_595 EQU P1.2 ;输出锁存器旅租巧控制脉冲
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:
MOV SP,#60H
MOV R0,#0FEH
MAIN1:
CALL OUT_595
CALL DELAY
MOV A,R0
RL A
MOV R0,A
JMP MAIN1
;----------------------------------------------------------------------
;输出锁存器输出数据子程序
;----------------------------------------------------------------------
OUT_595:
LCALL WR_595
CLR RCK_595
NOP
NOP
SETB RCK_595 ;上升沿将数据送到输出锁存器
NOP
NOP
NOP
CLR RCK_595
RET
;---------------------------------------------------------------------
;移位寄存器接收数据子程序
;---------------------------------------------------------------------
WR_595:
MOV R4,#08H ;
MOV A,R0
WR_LOOP:
RLC A
MOV SDATA_595,C
SETB SCLK_595 ;上升沿发生移位
NOP
NOP
CLR SCLK_595
DJNZ R4,WR_LOOP
RET
;--------------------------------------------------------------------
;延时子程序
;--------------------------------------------------------------------
DELAY:
MOV R5,#03H
DEL0:
MOV R6,#0FFH
DEL1:
MOV R7,#0FFH
DJNZ R7,$
DJNZ R6,DEL1
DJNZ R5,DEL0
RET
END
昆山海旭电子
2024-12-02 广告
2024-12-02 广告
有源蜂鸣器是一种内置振荡源的电子器件,只要通电就会发出声音。它利用内部电子震荡电路来产生声音信号,并将其放大并输出。有源蜂鸣器通常比无源蜂鸣器更贵,因为它内部包含了一个振荡电路和放大电路。有源蜂鸣器可以使用直流电源来驱动,但需要满足一定的条...
点击进入详情页
本回答由昆山海旭电子提供
展开全部
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询