文档详情

实验三 流水灯控制实验

汽***
实名认证
店铺
DOCX
71.01KB
约6页
文档ID:532324849
实验三 流水灯控制实验_第1页
1/6

流水灯控制实验一、 实验目的:1、 掌握Keil C51软件与proteus软件联合仿真调试的方法2、 掌握如何用程序与查表等方法实现流水效果3、 掌握按键去抖原理及处理方法二、 实验内容:1、用Pioteus设计一流水灯控制电路利用P1 口控制8个发光二极管LI—L8o P3.3 口接一按键K1参考电路如下图所示其中74LS240为8反相三态缓冲器2、用中断或查询方式编写程序,每按动一次K1键,演示不同的流水效果若 用KEY表示按键的次数,则其对应的流水效果如下:然后自右向左单管点亮, 然后自右向左依次点亮, 然后自左向右依次熄灭,① KEY=0: L1-L8 全亮;如此循环如此循环如此循环②③④⑤⑥KEY=1: L1-L8 先全灭,KEY=2: L1-L8 先全灭,然后整体闪烁,如此循环;KEY=3: L1-L8 先全亮,KEY=4: L1-L8 先全灭,KEY=5:自行设计效果以上移位及闪烁时间间隔均设置为0.3秒按动5次按键后,再按键时,流水效果从头开始循环实验[理及步骤:1•实验步骤:(1) 用Proteus设计流水灯控制电路2) 在Keil C51中编写流水灯控制程序,编译通过后,与Pioteiis联合调试。

3) 按动K1键,观察是否达到演示效果4) 试用中断和查询两种方式编写程序,比较二者的区别四、程序设计与调试:1. 实验电路图如图1所示2. 实验源程序见附录U1*5v • •22pF : : _L_ ..沖 p ・ |—| X1. . LuC2 - —I— g/STAL •H I广卜 佃.^-DF-47CLF*5V •C3f至iroowo^1AL1FOIfADIFO.2fAD2 FO3M3川FOdfADaFO5 佢D5FOBfADGP2QIA8P2.1AJX9ALEP22;A10P2^11P2.W2P25/A13CAP26JA14P2.7JA15Pl 0P3QRKDP1.1ps.inxopl 2P3 2LEIXGF• LEMfiEfM •「• • • vTEXTn ・• •D5YDY1Y2Y312AAD第Astt-.TEXT.*D6i rvi.町旳.・.LEO-CRI. . .LED-G6E£M; ex> .S. R..・讥畑 9. n• 478图1五、 实验总结:1. 实验设计时注意按键电平抖动问题,可在检测到按键按下后延时5—10ms, 待前沿抖动消失后,再检测按键状态,若发现仍保持闭合状态,则确真正有键按 下。

2. 74LS240的使用方法:74LS240是八反相三态缓冲器/线驱动器实验时G引 脚接地,输出电平与输入反相3. 用中断方式时,电路效率高,按下按键后,程序立即响应对应的中断程序;用 查询方式编程时,按下按键时会有检测不到按键按下的情况,且效率较低六、 思考题1.按键若不加去抖处理即不加延时检测程序时,按下一次按键后会有多次响应, 会跳过一个或儿个流水效果,因此遇到按键检测问题时,一定要注意延时消抖后 再次检测附录1•査询方式程序#include chai codetab[l 0]={0x00.0x01,0x02,0x04,0x08,0x10 ,0x20,0x40,0x80,Oxff};char code tab unsigned char num=0;sbit kev=P3A3;void kevscan(){ if(key=0)delay_ins(10); if(key=O)num++;} if(num==6) num=O;}Jvoid allon(){wlule(num==0){Pl=tab[9];keyscan();}Jvoid r21ondQ unsigned char t=0; foi(t=0;t<9&&(num= 1); t++)iPl=tab[t]; delay_ins(200); keyscan();}Jvoid r21on()P 1=0x00; delay_nis(200);{for(t=l;t<9&&(num==2);t++){ Pl=tab[t]|Pl; delav_ms(200); kevscanQ;j}}void 12roff(){ unsigned char m、t;{Pl=0xff; delay_nis(200); keyscan();for(t=8;t> 0&&(num==3);t—){ m=(~tab[t])&(Pl);Pl=m; delav_ms(200); keyscanQ; }}}void allbluik(){while(num==4){Pl=tab[O]; delay_nis(200);keyscan();Pl=tab[9];delay_nis(200); keyscan();}}void ownQ{char k;char t;for(k=l;k<5&&(num==5);k++) {Pl=tab[k]|tab[9-k];d 亡 lay_ms(200); keyscan();}Jvoid delav_ms(t){mt i;foi(;t>0;t—)foi(i=0;i<124;i++);jvoid niain()/ikeyscanQ; while(l){switch(num){case 0:allon();break;case l:r21ond();break;case 2:r21on();break;case 3:12roff();break;case 4:allbliiik();break;case 5:own();break;j}}附录2冲断方式程序#mclude unsigned char num:char code tab[10] = {0x00,0x01, 0x02,0x04,0x08, Ox10,0x20,0x40,0x80,Oxff};void exti_initQ{EX1=1;IT 1=0;EA=1;}void allon(){wliile(num==0){Pl=tab[9];}}void r21ondQ{unsigned char t=0;for(t=0;t<9&&(num= 1 );t++)delay_ms(200);}}void r21on()fichai t;Pl=0x00; delav_nis(200);{ for(t= 1 ;t<9&&(num=2);t++){Pl=tab[t]|Pl; delay_ms(200);}}void 12ioff()fi unsigned char mJ;{Pl=Oxff: delav_nis(300);for(t=8;t>0&&(num==3);t~)Pl=tab[t];for(i=0;i<124;i++);}ma ui0/iexti_init();while(l){switch(num){case O:allon();break;case l:r21ond();break:case 2:r21on();break;case 3:12ioff();break;case 4: allblinkO; break;case 5:own();break;}}void EXTE1() mtenupt 2/iEX1=O; delav_nis(10);EX1=1; while(!INTl);num+-r;if(num=6) num=0;}Pl=m; delay_ms(300);}}}void allblink(){ wliile(num==4){Pl=tab[O];delay_ms(300);Pl=tab[9];delay_ms(300);}}void 0W110{char k;for(k=l;k<5&&(num==5);k++) {Pl=tab[k]|tab[9-k];delay_ms(600);}}void delay_ms(t){Ult i;。

下载提示
相似文档
正为您匹配相似的精品文档