老师好! 我写了个驱动595数码管显示的代码,不知道怎么回事,总是不显示。LED数码管显示的都是4个"8.",数码管全亮。您看看这个这个代码是否有问题呢?谢谢!!
#include <avr/io.h> #include <util/delay.h>
#define uchar unsigned char #define uint unsigned int /* PA4-PA7 为共阳数码管位选控制端,PB5 为595数据端,PB6为595移位时钟, PB7 为595锁存时钟端 */
unsigned char temp; /*************************************************************** 函 数 名:void Send_595(unsigned char data) 功 能:送数据进595 说 明:模拟SPI 入口参数:data 返 回 值:无 ****************************************************************/ void SendData_595(void) { unsigned char i; for (i = 0; i < 8; i++) { if (temp & 0x80) { PORTB |= _BV(PB5);//数据为1,就发送1 } else { PORTB &= ~(_BV(PB5));//数据为0,就发送0 } PORTB &= ~(_BV(PB6));//上升沿将数据移位到寄存器 PORTB |= _BV(PB6); temp <<= 1; //将待发送的数据左移移位, }
}
/*************************************************************** 函 数 名:void Output_595(unsigned char Odata) 功 能:数据从595的并行口输出 说 明: 入口参数:Odata 返 回 值:无 ****************************************************************/ void OutputData_595(void) { PORTB &= ~(_BV(PB7));// PORTB |= _BV(PB7);// }
int main(void) { DDRA = 0XFF; PORTA = 0XFF; PORTB=0xFF; DDRB=0xFF; // PORTA &= ~(_BV(PA4)|_BV(PA5)|_BV(PA6)|_BV(PA7));//PA4-PA7接数码管位选,共阳
while(1) { temp = 0x3c; //要发送的数据,0 显示代码 SendData_595();//发送数据到595 OutputData_595();//输出到595显示
} return (0); } |