微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 初次玩AVR,都是自学的,今天被一个74HC595给难住了!所以希望大家教我~

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

时间:10-02 整理:3721RD 点击:
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);
        }
}

http://bbs.elecfans.com/forum.php?mod=viewthread&tid=486854&page=2&extra=#pid3629623

真的谢谢!想买一本这个纸质版的!

已解决:是配置设置的问题!

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top