某控制系统有1个开关,8个发光二极管,当开光按动1次时,8个发光二极管闪烁;当开光按动2次时,8个发光二极管摇摆;当开关按动3次时,8个发光二极管流水式点亮;当开关按动4次时,8个发光二极管累计式点亮,不断循环。设计出AT89C51与外设连接的Proteus仿真电路图,并编程实现题目所要求的功能。
代码:
#include<reg51.h>
typedef unsigned char uc;
typedef unsigned int ui;
sbit btn=P3^0;
uc num[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
ui i,j;
uc k,dd,q;
void delay(uc N) //延时函数
{
for(i=0;i<110;i++)
for(j=0;j<N;j++);
}
void mod_1() //模式1,闪烁
{
P1=0x00;
delay(1000);
P1=0xff;
delay(1000);
if(btn==0) return; //判断中断,返回函数
}
void mod_2() //模式2,摇摆
{
P1=0xfe;
delay(500);
for(k=1;k<8;k++)
{
P1=num[k];
delay(500);
if(btn==0) return;
}
for(k=6;k>0;k--)
{
P1=num[k];
delay(500);
if(btn==0) return;
}
}
void mod_3() //模式3,流水点亮
{
P1=0xff;
delay(10);
for(k