就是刚开始第一个数码管显0,然后下面的灯依次亮显示10,210,3210,43210,543210,654321 765432。。一直让其循环下去,这个程序怎么编写,求解
我用的是TX的板
今天回来没有多少事情,看看百度问问,然后就用avr单片机写了一个和你程序差不多的程序。可能还有点差距,但是稍微调整一下就好了。数码管事动态扫描显示的,如原理图所示。顺便录了一个视频,可以看看一下啊!希望可以给你一点思路。
http://www.tudou.com/programs/view/0GmdlNj9rF4/
#define F_CPU 12000000UL
#include <avr/io.h>
#include <util/delay.h>
#define INT8U unsigned char
#define INT16 unsigned int
#define LATCH_B0 PORTC&=~_BV(0)
#define LATCH_B1 PORTC|=_BV(0)
#define LATCH_A0 PORTC&=~_BV(1)
#define LATCH_A1 PORTC|=_BV(1)
INT8U SMG_Wei[9]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0xff};/*位1,2,3,4,5,6,7,8,off*/
INT8U SMG_Cde[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};/*0,1,2,3,4,5,6,7,8,9*/
INT8U DataBuf[8]={0,1,2,3,4,5,6,7,};
int main(void)
{
INT8U i,j;
INT16 uDelay;
DDRA=0xff,PORTA=0x00; /*设置端口B为输出模式,输出为0x00*/
DDRC=0x03,PORTC=0x00;
while(1)
{
//TODO:: Please write your application code
for(j=7;j!=0xff;j--)
{
uDelay=10;
while(uDelay--)
{
for (i=0;i<8;i++)
{
PORTA=SMG_Cde[DataBuf[i]];
LATCH_B1;
LATCH_B0;
if(i+j<8)
{
PORTA=~SMG_Wei[i+j];
LATCH_A1;
LATCH_A0;
}
else
{
PORTA=0xff;
LATCH_A1;
LATCH_A0;
}
_delay_ms(1);
PORTA=0x00;
LATCH_B1;
LATCH_B0;
PORTA=0xff;
LATCH_A1;
LATCH_A0;
_delay_us(10);
}
}
}
////////////////////////////////////////////////////////////
for(j=0;j<8;j++)
{
uDelay=10;
while(uDelay--)
{
for (i=0;i<8;i++)
{
PORTA=SMG_Cde[DataBuf[i]];
LATCH_B1;
LATCH_B0;
if(i+j<8)
{
PORTA=~SMG_Wei[i+j];
LATCH_A1;
LATCH_A0;
}
else
{
PORTA=0xff;
LATCH_A1;
LATCH_A0;
}
_delay_ms(1);
PORTA=0x00;
LATCH_B1;
LATCH_B0;
PORTA=0xff;
LATCH_A1;
LATCH_A0;
_delay_us(10);
}
}
}
}
}
本回答被提问者采纳那个串口我还没学,不用那个怎么写啊
追答额,不知道了,采纳我吧