您的问题我已经解决,外加一张电路图。实现的主要功能为:按一次按键开关,二极管实现左到右的点亮;再按一次按键开关,二极管实现右到左的点亮;再按一次按键开关,又实现二极管做到右的点亮.........即:若按奇数次开关时,二极管实现左到右点亮;若按偶数次开关时,二极管实现右到左点亮。
电路图:
程序如下:
#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
uchar code table_1[]={
0xf7,0xfb,0xfd,0xfe};
uchar code table_2[]={
0xfe,0xfd,0xfb,0xf7};
sbit key=P2^0;
uint num;
//延时子程序
void relay(uint xm)
{
uint i,j;
for(i=xm;i>0;i--)
for(j=110;j>0;j--);
}
//实现左移
void left_shift()
{
uint i;
while(1)
{
for(i=0;i<4;i++)
{
P1=table_1[i];
relay(500);
}
}
}
//实现右移
void right_shift()
{
uint i;
for(i=0;i<4;i++)
{
P1=table_2[i];
relay(500);
}
}
void main()
{
while(1)
{
if(key==0)
{
relay(5); //防抖延时
if(key==0)
{
while(key) //按键是否起来
{
num++;
switch(num%2)
{
case 1:left_shift();break;
case 0:right_shift();break;
}
}
}
}
}
}
芯芯之火2011/6/13