使用AT89C51单片机控制灯亮,要求按一下亮一个灯,但是因为是个小白,做不到按一下灯亮再按一下灯灭,仅供参考
原理图如图
代码如下
#include<reg51.h>
unsigned char s[]={0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00};
unsigned char num=-1;
void delay(unsigned int n)
{
unsigned int i=0,j=0;
for(i;i<n;i++)
{
for(j;j<120;j++);
}
}
void scan()
{
unsigned char temp0=0,temp1=0,temp=0;
P2=0xf0;
delay(100);
if(P2!=0xf0)
{
delay(20);
temp0=P2;
P2=0x0f;
if(P2!=0x0f)
{
temp1=P2;
}
}
temp=temp0+temp1;
if(temp==0xee)
{
num=0;
}
if(temp==0xed)
{
num=1;
}
if(temp==0xeb)
{
num=2;
}
if(temp==0xe7)
{
num=3;
}
if(temp==0xde)
{
num=4;
}
if(temp==0xdd)
{
num=5;
}
if(temp==0xdb)
{
num=6;
}
if(temp==0xd7)
{
num=7;
}
}
void display()
{
P1=s[num];
}
void main()
{
while(1)
{
scan();
display();
}
}
|