大家帮忙看看改怎么用74hc595,附程序
时间:10-02
整理:3721RD
点击:
一张是直接用io口驱动ULN2803,一张是用74HC595+ULN2803,是无法驱动还是程序问题,大家帮忙看看
用了74HC595后的程序:
#include<reg52.h>
#include <intrins.h> //内部包含延时函数 _nop_();
#define uint unsigned int
#define uchar unsigned char
//------8拍-----
uchar code zz1[]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09}; //正转
sbit SH_CP =P2^0; //移位时钟脉冲
sbit DS =P2^1; //串行数据输入
sbit ST_CP =P2^2; //输出锁存器控制脉冲
uchar temp;
/*****************************************************************************************
延时子程序
*****************************************************************************************/
void delay(uint ms)
{
uint t;
while(ms--)
for(t=0;t<120;t++);
}
/*****************************************************************************************
初始化74HC595
*****************************************************************************************/
void HC595_Init(void)
{
uchar j;
for (j=0;j<8;j++)
{
temp=temp<<1 ; //会把最高位元移入CY内
DS=CY; //把CY的值给P2^0,也就是准备好资料(0或1)给595
SH_CP=1; //上升沿发生移位
_nop_();
_nop_();
SH_CP=0;
}
ST_CP=0;
_nop_();
_nop_();
ST_CP=1;
}
/*****************************************************************************************
定义各脉冲输出
*****************************************************************************************/
void temp_zz1(uint n)
{
uint i,j;
for(i=0;i<5*n;i++)
{
for(j=0;j<8;j++)
{
if(P0==0xef)
break;
temp=zz1[j];
delay(20);
}
}
}
/*****************************************************************************************
主函数
*****************************************************************************************/
void main()
{
uint N=361; //转动圈速
SH_CP =0;
ST_CP =1;
while(1)
{
P0=0xff;
if(P0==0xfe)
{
while(P0==0xfe);
temp_zz1(N);
HC595_Init();
delay(20);
if(P0==0xef)
break;
}
}
用了74HC595后的程序:
#include<reg52.h>
#include <intrins.h> //内部包含延时函数 _nop_();
#define uint unsigned int
#define uchar unsigned char
//------8拍-----
uchar code zz1[]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09}; //正转
sbit SH_CP =P2^0; //移位时钟脉冲
sbit DS =P2^1; //串行数据输入
sbit ST_CP =P2^2; //输出锁存器控制脉冲
uchar temp;
/*****************************************************************************************
延时子程序
*****************************************************************************************/
void delay(uint ms)
{
uint t;
while(ms--)
for(t=0;t<120;t++);
}
/*****************************************************************************************
初始化74HC595
*****************************************************************************************/
void HC595_Init(void)
{
uchar j;
for (j=0;j<8;j++)
{
temp=temp<<1 ; //会把最高位元移入CY内
DS=CY; //把CY的值给P2^0,也就是准备好资料(0或1)给595
SH_CP=1; //上升沿发生移位
_nop_();
_nop_();
SH_CP=0;
}
ST_CP=0;
_nop_();
_nop_();
ST_CP=1;
}
/*****************************************************************************************
定义各脉冲输出
*****************************************************************************************/
void temp_zz1(uint n)
{
uint i,j;
for(i=0;i<5*n;i++)
{
for(j=0;j<8;j++)
{
if(P0==0xef)
break;
temp=zz1[j];
delay(20);
}
}
}
/*****************************************************************************************
主函数
*****************************************************************************************/
void main()
{
uint N=361; //转动圈速
SH_CP =0;
ST_CP =1;
while(1)
{
P0=0xff;
if(P0==0xfe)
{
while(P0==0xfe);
temp_zz1(N);
HC595_Init();
delay(20);
if(P0==0xef)
break;
}
}
程序都是在现成的基础上改的= =单片机初学者,求教
·····