初次玩AVR,都是自学的,今天被一个74HC595给难住了!!所以希望大家教我~

2019-07-15 16:33发布

ATMEGA32+74HC595AD

对接的管脚如下
PB7---------SFTclk
PD3---------LCHclk
PB5----------SDI

下面是自己写的程序,led灯会闪烁,但是595压根没输出是咋回事。。。。。。。。??

//CPU:mega32

#include <avr/io.h>


#define uchar unsigned char
#define  uint unsigned int

#define scl_H (PORTB|=0x80)  //时钟信号置为高电平
#define scl_L (PORTB&=0xef) //时钟信号置为低电平

#define sda_H (PORTB|=0x20)  //数据信号置为高电平
#define sda_L (PORTB&=0xdf)  //数据信号置为低电平

#define en_H (PORTD|=0x04)  //输出使能信号置为高电平
#define en_L (PORTD&=0xfb)  //输出使能信号置为低电平

#define led_H (PORTD|=0x40)  //led信号置为高电平
#define led_L (PORTD&=0xbf)  //led信号置为低电平

void delay(uint ms)
{
  uchar j;
  while(ms--)
  for(j=0;j<100;j++);
}

void nc()
{
uchar as;
for(as=20;as>0;as--);

}
/*
void IO_init()
{
//         DDRA=0xff;  //都做输出用
         DDRB=0xff;
//         DDRC=0xff;
         DDRD=0xff;

//         PORTA =0xff; //全部内接上拉电阻
         PORTB =0xff;
//         PORTC =0xff;
         PORTD =0xff;
}

*/
void sendbyte(uchar a)        //单位数据发送函数
{
     uchar i,s;     //定义变量
         s=a;

         en_L;
                         
   for(i=0;i<8;i++)            //for 循环,循环8次,把一个数据发送出去
        {
         scl_L; // 把595 SCLK频率置低电平
                        
                 if(s&0x80)

                         sda_H;
               
                 else

                         sda_L;


         scl_H;
         s=s<<1;          //把数据a左移一位
                 delay(1);

        }

                en_H;
}

int main(void)
{

  // IO_init();
        while(1)
        {
           led_H;

      sendbyte(0xff);

          delay(2000);

           led_L;

          sendbyte(0x00);

          delay(2000);
        }
}


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
friend0720
1楼-- · 2019-07-15 20:33
刘方南
2楼-- · 2019-07-15 21:18
真的谢谢!想买一本这个纸质版的!!
刘方南
3楼-- · 2019-07-15 22:31
已解决:是配置设置的问题!

一周热门 更多>