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);
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
最佳答案
一周热门 更多>