资源描述:
《端口按键移位程序》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、实验报告电子班倪佳华222009315220022一.实验名称端口按键移位二.实验器材MCU模块,独立按键模块,八路跑马灯模块,导线若干三.实验原理MCU模块图和八路跑马灯模块:独立按键模块图:四.实验内容1.用8PIN线,JP32连接JP44,JP53(P3口)连接JP37,即P1口连发光二极管,P3口连按键,k6键管往上,k7键管往下2.新建工程3.设置工程参数4.新建汇编文件main.asm5.将main.asm添加至项目6.输入程序,编译,调试,运行程序内容如下:汇编程序:ORG0080hCODE_SEGSE
2、GMENTCODEDATA_SEGSEGMENTDATASTACK_SEGSEGMENTIDATARSEGDATA_SEGKEY_S:DS1KEY_V:DS1RSEGSTACK_SEGSTACK:DS20K1BITP3.6;K2BITP3.7;CSEGAT0000HJMPMAIN;==================================RSEGCODE_SEGMAIN:MOVSP,#(STACK-1);设置栈指针MOVP1,#0FEH;初始点亮LEDP00MOVKEY_V,#03H;初始键值KEY_CHK
3、SW:;循环检测按键是否按下;===============================SCAN_KEY:;扫描按键;传入参数:无;返回值:A---按键状态CLRAMOVC,K1MOVACC.0,CPROC_KEY:;按键处理子程序;传入参数:KEY_V---按键值;返回值:无MOVA,KEY_VJNBACC.0,PROC_K1JNBACC.1,PROC_K2RETPROC_K1:;按键K1处理程序MOVA,P1;右移RRAMOVP1,ARETPROC_K2:;按键K2处理程序MOVA,P1;左移RLAACALL
4、SCAN_KEY;输入按键状态MOVKEY_S,AXRLA,KEY_V;检查按键值是否改变JZKEY_CHKSW;若无键被按,则跳回KEY_CHKSWMOVR7,#10;延时10msACALLDELAYMS;延时去抖ACALLSCAN_KEY;再次检查按键值MOVKEY_S,AXRLA,KEY_VJZKEY_CHKSWMOVKEY_V,KEY_S;保存按键状态ACALLPROC_KEY;SJMPKEY_CHKSWMOVC,K2MOVACC.1,CRETMOVP1,ARET;======================
5、============DELAYMS:;延时子程序;传入参数:R7---延时值(MS);返回值:无MOVA,R7JZEND_DLYMSDLY_LP1:MOVR6,#185DLY_LP2:NOPNOPNOPDJNZR6,DLY_LP2DJNZR7,DLY_LP1END_DLYMS:RETENDC语言程序:#include#includeunsignedcharscan_key();voidproc_key(unsignedcharkey_v);voiddelayms(unsig
6、nedcharms);sbitK1=P3^6;sbitK2=P3^7;charcodeSST516[3]_at_0x003b;main(){unsignedcharkey_s,key_v;key_v=0x03;P1=0xfe;while(1){key_s=scan_key();if(key_s!=key_v){delayms(10);key_s=scan_key();if(key_s!=key_v)unsignedcharscan_key(){unsignedcharkey_s;key_s=0x00;key_s
7、=K
8、2;key_s<<=1;key_s
9、=K1;returnkey_s;}voidproc_key(unsignedcharkey_v){if((key_v&0x01)==0){P1=_cror_(P1,1);}elseif((key_v&0x02)==0){P1=_crol_(P1,1);}}voiddelayms(unsignedcharms){key_v=key_s;proc_key(key_v);}}}}//延时子程序{unsignedchari;while(ms--){for(i=0;i<120;i++);}}
10、五.实验现象与实验结果1.上电复位后,八路跑马灯第一个点亮2.按下K7键,放开,下一个灯点亮,上一个灯熄灭3.按下K6键,放开,上一个灯点亮,下一个灯熄灭4.循环,实现灯的移位六.实验总结(1)按键处理时要进行一定的延时来进行消抖,使按键读入稳定(2)汇编程序中对某一引脚的操作和C语言不同:汇编用点操作符,p1.1,p1.2;C语言中用^,P1