1、SEGMENTCODEDATA_SEGDATASTACK_SEGIDATAK1BITP1.4K2P1.5RSEGDATA_SEGKEY_S:DS1KEY_V:DIS_DIGIT:SEC:DIS_INDEX:HOUR:MIN:SEC100:DIS_BUF:8BUF_HOUR_HEQUDIS_BUF小时十位BUF_HOUR_LDIS_BUF+1小时个位BUF_MIN_HDIS_BUF+3分十位BUF_MIN_LDIS_BUF+4分个位BUF_SEC_HDIS_BUF+6秒十位BUF_SEC_LDIS_BUF+7秒个位STACK_SEGSTACK:20=CSEGAT0000HJMPMAIN0000B
2、HLJMPTIMER00001BHTIMER1CODE_SEGMAIN:USINGMOVSP,#(STACK-1)P0,#0FFHP2,#0FFHTMOD,#011H定时器0,1工作模式1,16位定时方式TH0,#0FCHTL0,#017HTH1,#0DCHCLRATL1,AHOUR,#12AMIN,ASEC,ASEC100,AA,HOURB,#10DIVABDPTR,#DIS_CODEMOVCA,A+DPTRBUF_HOUR_H,A时十位A,BBUF_HOUR_L,A时个位A,MINBUF_MIN_H,ABUF_MIN_L,AA,SECBUF_SEC_H,ABUF_SEC_L,ABUF_HO
3、UR_H+02H,#0BFHBUF_HOUR_H+05H,#0BFHDIS_DIGIT,#0FEHDIS_INDEX,AIE,#08AH使能timer0,1中断SETBTR0TR1KEY_V,#03HMAIN_LP:LCALLSCAN_KEY键扫描JZMAIN_LP无键返回R7,#10延时10msDELAYMS延时去抖动再次扫描KEY_V,KEY_S保存键值PROC_KEY键处理SJMP调回主循环SCAN_KEY:扫键扫描子程序保存按键状态到key_s返回:-按键是否按下(BOOL)C,K1读按键K1ACC.0,CC,K2读按键K2ACC.1,CKEY_S,AXRLA,KEY_VRETPROC
4、_KEY:键处理子程序传入参数:KEY_V按键值返回值:无EAJNBACC.0,PROC_K1ACC.1,PROC_K2END_PROC_KEYPROC_K1:按键k1处理INC_HOUR小时加1PROC_K2:按键K2处理INCMIN分钟加1A,MINCSUBBA,#59JCK2_UPDATE_MIN如果分钟等于60,则分清0,小时加1K2_UPDATE_MIN:更新分显示缓冲区AB=/10更新分十位A,B%10更新分个位END_PROC_KEY:TIMER0:定时器0中断服程序,用于数码管的动态扫描DIS_INDEX显示索引,用于标识当前显示的数码管和缓冲区的偏移量DIS_DIGIT位选通
5、值,传送到P2口用于选通当前数码管的数值,如等于0xfe时,选通P2.0口数码管显于缓冲区基地址PUSHACCPSWAR0P2,#0FFH先关闭所有数码管A,#DIS_BUF获得显示缓冲区基地址ADDA,DIS_INDEX获得偏移量R0,AR0基地址+偏移量A,R0获得显示代码P0,A显示代码传送到P0口P2,DIS_DIGITA,DIS_DIGIT位选通值左移,下次中断时选通下一位数码管RLDIS_DIGIT,ADIS_INDEX加1,下次中断时显示下一位ANLDIS_INDEX,#0x07当DIS_INDEX等于8(00001000)时,清0POPRETITIMER1:定时器1中断服务程序
6、,产生时基信号10msBDPHDPLSEC100A,SEC100A,#100是否中断100次(达到1s)END_TIMER11SSEC100,#00H达到1sINC_SEC秒加1END_TIMER1:INC_SEC:SECUPDATE_SECINC_MINUPDATE_SEC:SECA,A+DPTRBUF_SEC_L,AINC_MIN:UPDATE_MINUPDATE_MIN:更新分个位INC_HOUR:HOUR小时加1A,#24UPDATE_HOUR如果小时等于24,则小时清0HOUR,A小时清0UPDATE_HOUR:A,#9UPDATE_HOUR1如果小时小于10,则十位0不显示BUF_HOUR_H,AUPDATE_HOUR2UPDATE_HOUR1:BUF_HOUR_H,#0FFHUPDATE_HOUR2:BUF_HOUR_L,ADELAYMS:延时子程序传入参数:R7延时值(MS)返回值:A,R7END_DLYMSDLY_LP1:R6,#185DLY_LP2:NOPDJNZR6,DLY_LP2R7,DLY_LP1END_DLYMS:ENDOFDIS_CODE:DB0C0H0F9H0A4H0B0H099H092H082H0F8H080H090H0FFHEND=源程序(C语言)/*wl010.C简易电子时钟,LED数码管显示上电时初始化显示:12-00-00*
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2