实验三_流水灯控制实验

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
for(t=8;t>0&&(num==3);t--)
{
m=(~tab[t])&(P1);
P1=m;delay_ms(300);
}
}
}
void allblink()
{
while(num==4)
{
P1=tab[0];
delay_ms(300);
P1=tab[9];
delay_ms(300);
}
}
void own()
2、用中断方式编写程序,每按动一次K1键,演示不同的流水效果。若用KEY表示按键的次数,则其对应的流水效果如下:
①KEY=0:L1-L8全亮;
②KEY=1:L1-L8先全灭,然后自右向左单管点亮,如此循环;
③KEY=2:L1-L8先全灭,然后自右向左依次点亮,如此循环;
④KEY=3:L1-L8先全亮,然后自左向右依次熄灭,如此循环;
{
unsigned char m,t;
{
P1=0xff;
delay_ms(200);
keyscan();for(t=8;t>0&&(num==3);t--)
{m=(~tab[t])&(P1);
P1=m; delay_ms(200); keyscan();}
}
}
void allblink()
{
while(num==4)
{
char k;
for(k=1;k<5&&(num==5);k++)
{
P1=tab[k]|tab[9-k];
delay_ms(600);
}
}
void delay_ms(t)
{
int i;
for(;t>0;t--)
for(i=0;i<124;i++);
}
main()
{
exti_init();
while(1)
{
P1=tab[t];
delay_ms(200);
keyscan();
}
}
void r2lon()
{பைடு நூலகம்
char t;
P1=0x00;
delay_ms(200);
{
for(t=1;t<9&&(num==2);t++)
{
P1=tab[t]|P1;
delay_ms(200);
keyscan();
}
}
}
void l2roff()
附录1.查询方式程序
#include <REG52.H>
char code tab[10]={0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0xff};
char code tabunsigned char num=0;
sbit key=P3^3;
void keyscan()
}
}
void delay_ms(t)
{
int i;
for(;t>0;t--)
for(i=0;i<124;i++);
}
void main()
{
keyscan();
while(1)
{
switch(num)
{
case 0:allon();break;
case 1:r2lond();break;
case 2:r2lon();break;
(3)按动K1键,观察是否达到演示效果。
(4)试用中断和查询两种方式编写程序,比较二者的区别。
四、程序设计与调试:
1.实验电路图如图所示。
2.实验源程序见附录。
五、实验总结:
1.实验设计时注意按键电平抖动问题,可在检测到按键按下后延时5—10ms,待前沿抖动消失后,再检测按键状态,若发现仍保持闭合状态,则确真正有键按下。
}
}
void r2lon()
{
char t;
P1=0x00;
delay_ms(200);
{for(t=1;t<9&&(num==2);t++)
{
P1=tab[t]|P1;
delay_ms(200);
}
}
}
void l2roff()
{
unsigned char m,t;
{
P1=0xff;
delay_ms(300);
2.74LS240的使用方法:74LS240是八反相三态缓冲器/线驱动器。实验时G引脚接地,输出电平与输入反相。
3.用中断方式时,电路效率高,按下按键后,程序立即响应对应的中断程序;用查询方式编程时,按下按键时会有检测不到按键按下的情况,且效率较低。
六、思考题
1.按键若不加去抖处理即不加延时检测程序时,按下一次按键后会有多次响应,会跳过一个或几个流水效果,因此遇到按键检测问题时,一定要注意延时消抖后再次检测。
void exti_init()
{
EX1=1;
IT1=0;
EA=1;
}
void allon()
{
while(num==0)
{
P1=tab[9];
}
}
void r2lond()
{
unsigned char t=0;
for(t=0;t<9&&(num==1);t++)
{
P1=tab[t];
delay_ms(200);
{
P1=tab[0];
delay_ms(200);
keyscan();
P1=tab[9];
delay_ms(200);
keyscan();
}
}
void own()
{
char k;
for(k=1;k<5&&(num==5);k++)
{
P1=tab[k]|tab[9-k];
delay_ms(200);
keyscan();
⑤KEY=4:L1-L8先全灭,然后整体闪烁,如此循环;
⑥KEY=5:自行设计效果。
以上移位及闪烁时间间隔均设置为0.3秒。按动5次按键后,再按键时,流水效果从头开始循环。
三、实验原理及步骤:
1.实验步骤:
(1)用Proteus设计流水灯控制电路。
(2)在Keil C51中编写流水灯控制程序,编译通过后,与Proteus联合调试。
{if(key==0)
{
delay_ms(10);
if(key==0)
{
num++;
}
if(num==6)
num=0;
}
}
void allon()
{
while(num==0)
{
P1=tab[9];
keyscan();
}
}
void r2lond()
{
unsignedchart=0;
for(t=0;t<9&&(num==1);t ++)
{
switch(num)
{
case 0:allon();break;
case 1:r2lond();break;
case 2:r2lon();break;
case 3:l2roff();break;
case 4:allblink();break;
case 5:own();break;
}
}
}
void EXTE1() interrupt 2
流水灯控制实验
一、实验目的:
1、掌握Keil C51软件与proteus软件联合仿真调试的方法。
2、掌握如何用程序与查表等方法实现流水效果。
3、掌握按键去抖原理及处理方法。
二、实验内容:
1、用Proteus设计一流水灯控制电路。利用P1口控制8个发光二极管L1—L8。P3.3口接一按键K1。参考电路如下图所示。其中74LS240为8反相三态缓冲器。
case 3:l2roff();break;
case 4:allblink();break;
case 5:own();break;
}
}
}
附录2.中断方式程序
#include <REG52.H>
unsigned char num;
char codetab[10]={0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0xff};
{
EX1=0;
delay_ms(10);
EX1=1;
while(!INT1);
num++;
if(num==6)num=0;
}
相关文档
最新文档