这个本来是想用LED显示0——2翻页的,但是下载到单片机只是停留在0就不动了,麻烦专业人员帮我解决一下,谢谢。(用的是普中的51单片机)
#include "reg51.h"
#include "intrins.h"
typedef unsigned int u16;
typedef unsigned char u8;
sbit SRCLK=P3^6;
sbit RCLK=P3^5;
sbit SER=P3^4;
u8 ledwei[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
u8 flag;
u8 i;
void delay(u16 i)
{
while(i--);
}
void Timer0Init() //定时器0中断
{
TMOD|=0X01;
TH0=0XFC;
TL0=0X18;
ET0=1;
EA=1;
TR0=1;
}
void Hc595SendByte(u8 dat1,u8 dat2)
{
u8 a;
SRCLK = 1;
RCLK = 1;
for(a=0;a<8;a++)
{
SER = dat1 >> 7;
dat1 <<= 1;
SRCLK = 0;
_nop_();
_nop_();
SRCLK = 1;
}
for(a=0;a<8;a++)
{
SER = dat2 >> 7;
dat2 <<= 1;
SRCLK = 0;
_nop_();
_nop_();
SRCLK = 1;
}
RCLK = 0;
_nop_();
_nop_();
RCLK = 1;
}
void xian0() //显示0
{
while(1)
{
for(i=0;i<8;i++)
{
Hc595SendByte(ledwei[i],ledduan0[i]);
delay(10);
}
}
}
void xian1() //显示1
{
while(1)
{
for(i=0;i<8;i++)
{
Hc595SendByte(ledwei[i],ledduan1[i]);
delay(10);
}
}
}
void xian2() //显示2
{
while(1)
{
for(i=0;i<8;i++)
{
Hc595SendByte(ledwei[i],ledduan2[i]);
delay(10);
}
}
}
void main()
{
Timer0Init();
while(1)
{
if(flag==0) xian0();
if(flag==1) xian1();
if(flag==2) xian2();
}
}
void Timer0() interrupt 1
{
static u16 i2;
TH0=0XFC;
TL0=0X18;
i2++;
if(i2==1000)
{
i2=0;
flag++;
if(flag>2)
flag=0;
}
}