单片机课程设计代码

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

陈新2014/7/2117:32:03QQ可以找到历史记录的陈新17:33:15无痕的回忆17:01:52LED_LOOP:MOVR1,#251;1s的显示延时(好奇怪,居然不准)LED_LOOP_1:MOVR4,#14;使用了寄存器R1,R4(估计可以使用堆栈临时释放)LED_LOOP_2:LCALLDISPLAY_MOVEDJNZR4,LED_LOOP_2DJNZR1,LED_LOOP_1RET无痕的回忆23:10:36ORG0000HAJMPMAINORG0030HHC595_SCKBITP0.4HC595_RCKBITP0.5HC595_RSTBITP0.6HC595_DATBITP0.7MAIN:MOVA,#00HMOVP0,ACLRHC595_RSTLOOP0:MOVR0,#0LOOP1:MOVR1,#100LOOP2:MOVR4,#10LOOP3:LCALLDISPLAYDJNZR4,LOOP3DJNZR1,LOOP2INCR0LJMPLOOP1DELEY0:MOVR6,#4;1ms延时的子程序DELEY1:MOVR7,#123DELEY2:DJNZR7,DELEY2DJNZR6,DELEY1NOPRETDISPLAY:MOVA,R0MOVB,#100DIVABMOVB,#10DIVAB;MOVA,#0LCALLSHOW_NUMMOVA,P0ANLA,#0F0HORLA,#1MOVP0,A;延时LCALLDELEY0;延时LCALLDELEY0MOVA,R0;有问题MOVB,#100DIVAB;MOVA,#7LCALLSHOW_NUMMOVA,P0ANLA,#0F0HORLA,#2MOVP0,A;延时LCALLDELEY0;延时LCALLDELEY0MOVA,R0MOVB,#100DIVABXCHA,BMOVB,#10DIVAB;MOVA,#7LCALLSHOW_NUMMOVA,P0ANLA,#0F0HORLA,#4MOVP0,ALCALLDELEY0;延时LCALLDELEY0;延时MOVA,R0MOVB,#10DIVABXCHA,B;MOVA,#7LCALLSHOW_NUMMOVA,P0ANLA,#0F0HORLA,#8MOVP0,ALCALLDELEY0;延时LCALLDELEY0RETSHOW_NUM:MOVDPTR,#SEGMOVCA,@A+DPTRLCALLSEND_BYTERETSEND_BYTE:MOVR2,#8;注意这个循环次数控制,有误差则会影响数码管显示MOVR6,#01HSEND_LOOP:MOVR3,AANLA,R6JZZEROJNZNZEROZERO:CLRHC595_DATAJMPNEXTNZERO:SETBHC595_DATNEXT:SETBHC595_SCKCLRHC595_SCKMOVA,R6RLAMOVR6,AMOVA,R3DJNZR2,SEND_LOOPCLRHC595_RCKSETBHC595_RCKRETSEG:DB0FCHDB60HDB0DAHDB0F2HDB66HDB0B6HDB0BEHDB0E0HDB0FEHDB0F6HEND无痕的回忆23:10:04int8utab_abc[]={0xee,0x3e,0x9c,0x7a,0x9e,0x8e};罐头17:36:46还有那个循环的呢陈新18:18:36已经发给你了啊DISPLAY:MOVA,KEY;将KEY转移给ALCALLSHOW_NUMMOVP0,#0FFH;打开所有的数码管即设置为静态显示MOVP0,ALCALLDELAY_1MS;延时注意到在动态显示中,点亮每位数码管都需要2秒钟LCALLDELAY_1MS;延时。LCALLDELAY_1MS;延时。RETDISPLAY:MOVA,KEYMOVB,#100DIVABMOVB,#10DIVAB;MOVA,#0LCALLSHOW_NUMMOVA,P0ANLA,#0F0HORLA,#1MOVP0,A;延时LCALLDELAY_1MS;延时LCALLDELAY_1MSMOVA,KEY;有问题MOVB,#100DIVAB;MOVA,#7LCALLSHOW_NUMMOVA,P0ANLA,#0F0HORLA,#2MOVP0,A;延时LCALLDELAY_1MS;延时LCALLDELAY_1MSMOVA,KEYMOVB,#100DIVABXCHA,BMOVB,#10DIVAB;MOVA,#7LCALLSHOW_NUMMOVA,P0ANLA,#0F0HORLA,#4MOVP0,ALCALLDELAY_1MS;延时LCALLDELAY_1MS;延时MOVA,KEYMOVB,#10DIVABXCHA,B;MOVA,#7LCALLSHOW_NUMMOVA,P0ANLA,#0F0HORLA,#8MOVP0,ALCALLDELAY_1MS;延时LCALLDELAY_1MSRETDISPLAY:MOVA,KEY;将KEY转移给ALCALLSHOW_NUMMOVA,P0;打开所有的数码管即设置为静态显示ANLA,#0F0H;ORLA,#15;MOVP0,ALCALLDELAY_1MS;延时注意到在动态显示中,点亮每位数码管都需要2秒钟LCALLDELAY_1MS;延时。RETDISPLAY:MOVA,KEY;将KEY转移给A;LCALLSHOW_NUMMOVDPTR,#SEGMOVCA,@A+DPTRMOVP0,ALCALLDELAY_1MS;延时注意到在动态显示中,点亮每位数码管都需要2秒钟LCALLDELAY_1MS;延时。RETSEG:DB0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,7FH7.26课程设计最终版代码;---------------------------------------------------------------------;---------------------------------------------------------------------;************华南理工大学电子与信息学院信息工程2班**************;**************************;************第二组**************;**************************;************高文冠刘翠玲王志健**************;**************************;************单片机课程设计**************;---------------------------------------------------------------------;---------------------------------------------------------------------;--------------------------------------------------------------------;分配各地址;---------------------------------------------------------------------KEYEQU40HAJMPSTARTORG0003H;入口地址AJMPJINT0;外部中断0入口ORG0013H;AJMPJINT1;外部中断1入口地址ORG0030H;;--------------------------------------------------------------------;定义这个实验中所需要的管脚,其中HCHC595是八位移位寄存器,BEEP是蜂鸣器;---------------------------------------------------------------------HC595_SCKBITP0.4HC595_RCKBITP0.5HC595_RSTBITP0.6HC595_DATBITP0.7BEEPBITP1.3;定义蜂鸣器的管脚;--------------------------------------------------------------------;程序以及初始化硬件代码,主要是对中断以及一些端口进行初始化;---------------------------------------------------------------------START:MOVA,#00H;先将数码管的所有段均置0,即都不选;SETBBEEP;关闭蜂鸣器MOVP0,ACLRHC595_RSTMOVSP,#60H;堆栈地址为60HSETBEA;允许全局中断SETBEX0;允许外部中断0SETBEX1;允许外部中断1SETBPX1;设外部中断1为高优先级SETBIT1;设外部中断1边沿触发CLRIT0;设外部中断0低电平触发;--------------------------------------------------------------------;判断是否按键按下,并且赋予键值的键盘扫描代码;---------------------------------------------------------------------GWG0:NOPMOVP2,#0FFH;判第0行是否有键按下CLRP2.0;将P2.0清零MOVA,P2ANLA,#0F0H;屏蔽低4位,即消除行线的影响XRLA,#0F0HJZNOKEY0;A为0,转向NOKEY0LCALLDELAY_10MS;延时,去抖动MOVA,P2;再确认一次ANLA,#0F0HXRLA,#0F0HJZNOKEY0;A为0,转向NOKEY0,表示第一行没有按键按下MOVA,P2;判哪一个键按下ANLA,#0F0HCJNEA,#0E0H,NEXT1MOVKEY,#0;按下的键值是0LCALLDISPLAY;根据按键在数码管上和LED上显示键值LJMPGWG0;继续检测NEXT1:CJNEA,#0D0H,NEXT2MOVKEY,#1;按下的键值是1LCALLDISPLAYLJMPGWG0;继续检测NEXT2:CJNEA,#0B0H,NEXT3MOVKEY,#2;按下的键值是2LCALLDISPLAYLJMPGWG0;继续检测NEXT3:CJNEA,#70H,NOKEY0MOVKEY,#3;按下的键值是3LCALLDISPLAYLJMPGWG0;继续检测NOKEY0:MOVP2,#0FFH;判第1行是否有键按下CLRP2.1;将P2.1清零MOVA,P2ANLA,#0F0H;屏蔽低4位,即行线的影响XRLA,#0F0HJZNOKEY1;A为0,转向NOKEY1LCALLDELAY_10MS;延时,去抖动MOVA,P2;再确认一次ANLA,#0F0HXRLA,#0F0HJZNOKEY1;A为0,转向NOKEY1MOVA,P2;判断哪个按键按下ANLA,#0F0HCJNEA,#0E0H,NEXT5MOVKEY,#4;按下的键值是4LCALLDISPLAY;根据按键在数码管上和LED上显示键值LJMPGWG0;继续检测NEXT5:CJNEA,#0D0H,NEXT6MOVKEY,#5;按下的键值是5LCALLDISPLAYLJMPGWG0;继续检测NEXT6:CJNEA,#0B0H,NEXT7MOVKEY,#6;按下的键值是6LCALLDISPLAYLJMPGWG0;继续检测NEXT7:CJNEA,#70H,NOKEY1MOVKEY,#7;按下的键值是7LCALLDISPLAYLJMPGWG0;继续检测NOKEY1:MOVP2,#0FFH;判第2行是否有键按下CLRP2.2;将P2.2清零MOVA,P2ANLA,#0F0H;屏蔽掉低四位,即消除行线的影响XRLA,#0F0HJZNOKEY2;A为0,转向NOKEY2LCALLDELAY_10MS;延

1 / 16
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功