单片机 音乐倒数计时器-_第1页
单片机 音乐倒数计时器-_第2页
单片机 音乐倒数计时器-_第3页
单片机 音乐倒数计时器-_第4页
单片机 音乐倒数计时器-_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、S_SET BIT P1.0M_SET BIT P1.1H_SET BIT P1.2OUTBIT equ 08002h ; 位控制口OUTSEG equ 08004h ; 段控制口IN equ 08001h ; 键盘读入口SECOND EQU 60HLED1 equ P1.3LED1_1 equ 0TCNT EQU 64Hledbuf equ 40hORG 0000HSJMP STARTORG 000BHLJMP INT_T0ORG 001bHLJMP TIM1org 0030hSTART:cpl led1MOV SECOND,#0MOV TCNT,#0MOV TMOD,#11HMOV TH0

2、,#9eHMOV TL0,#58Hmov LEDBuf+0, #0 ; 显示00-00mov LEDBuf+1, #0mov LEDBuf+2, #3fhmov LEDBuf+3, #3fhmov LEDBuf+4, #3fhmov LEDBuf+5, #3fhmov r5,#0mov second,#0aaa:call DisplayLED ; 显示call TestKey ; 有键入?jz aaa ; 无键入, 继续显示call GetKey ; 读入键码mov r4,acjne a,#07h,K2 ;判断是否按下K1sjmp bbbbbb: ;若是K1则进入SET2判断阶段call Di

3、splayled ; 显示call TestKey ; 有键入?jz bbb ; 无键入, 继续显示call GetKey ; 读入键码mov r4,amov a,r4cjne a,#08h,K3_2mov a,r5 ;显示的分钟数加一inc amov r5,amov b,#10div abmov dptr, #LEDMap ;显示个位movc a, a+dptrmov LEDBuf+2, amov a,b ;显示十位movc a, a+dptrmov LEDBuf+3, aljmp bbbK3_2: cjne a,#09h,K4_2mov a,r5 ;显示的分钟数减一dec amov r5,

4、amov b,#10div abmov dptr, #LEDMap ;显示个位movc a, a+dptrmov LEDBuf+2, amov a,b ;显示十位movc a, a+dptrmov LEDBuf+3, aljmp bbbK4_2: cjne a,#0ah,bbbljmp TIMERK2: ;若不是K1则进入SET1判断阶段mov a,r4cjne a,#08h,K3mov ledbuf+2,#3fh ; 显示05-00 mov LEDBuf+3, #6dhmov r5,#5 ;计数值对应5分钟ljmp aaaK3: mov a,r4cjne a,#09h,K4; 显示10-00

5、 mov LEDBuf+2, #06hmov ledbuf+3, #3fhmov r5,#10 ;计数值对应10分钟ljmp aaaK4: mov a,r4cjne a,#0ah,aaa; 显示20-00 mov LEDBuf+2, #5bhmov r5,#20 ;计数值对应20分钟ljmp aaatimer: MOV IE,#8aHSETB TR0cpl led1l1: call displaymov a,r5jnz l1l2: clr tr0cpl led1;=音乐播放= MAIN:MOV 30H,#00HNEXT: MOV A,30HMOV DPTR,#TABLEMOVC A,A+DPT

6、RMOV R2,AJZ END0ANL A,#0FHMOV R5,AMOV A,R2SW AP AANL A,#0FHJNZ SINGCLR TR1LJMP D1SING: DEC AMOV 22H,ARL AMOV DPTR,#TABLE1MOVC A,A+DPTRMOV TH1,AMOV 21H,AMOV A,22HRL aINC AMOVC A,A+DPTRMOV TL1,AMOV 20H,ASETB TR1D1: LCALL DELAY1INC 30HLJMP NEXTEND0: CLR TR1TIM1: PUSH ACCPUSH PSWMOV TL1,20HMOV TH1,21HCP

7、L P1.0POP PSWPOP ACCRETIDELAY1: MOV R7,#01HD2: MOV R4,#187D3: MOV R3,#248DJNZ R3,$DJNZ R4,D3DJNZ R7,D2DJNZ R5,DELAY1RETINT_T0:mov r4,secondmov a,secondcjne a,#0,l3mov second,#60sjmp l4L3: mov second,r4l4: MOV TH0,#9eHMOV TL0,#058HINC TCNTMOV A,TCNTCJNE A,#20,RETUNEcpl led1DEC SECONDMOV TCNT,#0MOV A,

8、SECONDCJNE A,#0,RETUNEDEC r5MOV SECOND,#60RETUNE:RETILEDMAP: ; 八段管显示码db 3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07hdb 7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71h TABLE1: DW 64260,64400,64521,64580DW 64684,64777,64820,64898DW 64968,65030,65058,65110DW 65157,65178,65217TABLE: DB DB DB DB DB DB DB DB DB DB DB DB

9、 82H,01H,81H,94H,84H 0B4H,0A4H,04H 82H,01H,81H,94H,84H 0C4H,0B4H,04H ;1 82H,01H,81H,0F4H,0D4H 0B4H,0A4H,94H 0E2H,01H,0E1H,0D4H,0B4H 0C4H,0B4H,04H ;2 82H,01H,81H,94H,84H 0B4H,0A4H,04H 82H,01H,81H,94H,84H 0C4H,0B4H,04H ;3 DB 82H,01H,81H,94H,84H DB 0B4H,0A4H,94H DB 0E2H,01H,0E1H,0D4H,0B4H DB 0C4H,0B4H,

10、04H DB 00H DISPLAY: MOV A,SECOND MOV B,#10 DIV AB cjne a,#6,l5 mov ledbuf+3,#3fh jmp l6 mov dptr,#ledmap MOVC A,A+DPTR MOV ledbuf+4,A mov a,b mov dptr,#ledmap movc a,a+dptr mov ledbuf+5,A mov a,r5 dec a MOV B,#10 DIV AB mov dptr,#ledmap l5: l6: MOVC A,A+DPTR MOV ledbuf+2,A mov a,b mov dptr,#ledmap m

11、ovc a,a+dptr mov ledbuf+3,A LCALL DELAY DisplayLED: mov r0, #LEDBuf mov r1, #6 mov r2, #00100000b Loop: mov dptr, #OUTBIT mov a, #0 movx dptr, a mov a, r0 mov dptr, #OUTSEG movx dptr,a mov dptr, #OUTBIT mov a, r2 movx dptr, a mov r6, #1 call Delay mov a, r2 rr a mov r2, a inc r0 djnz r1, Loop ret Te

12、stKey: mov mov movx mov movx cpl anl ; 共 6 个八段管 ; 从左边开始显示 ; 关所有八段管 ; 显示一位八段管 ; 显示下一位 dptr, #OUTBIT a, #0 dptr, a dptr, #IN a, dptr a a, #0fh ; 输出线置为 0 ; 读入键状态 ; 高四位不用 ret KeyTable: db db db db db db GetKey: mov mov mov mov mov KLoop: mov cpl movx cpl rr mov movx cpl anl jnz a, r1 a dptr, a a a r1, a

13、 a, r0 a a, #0fh Goon1 ; 下一列 ; 找出键所在列 dptr, #OUTBIT P2, dph r0, #Low(IN r1, #00100000b r2, #6 ; 键码定义 16h, 15h, 14h, 0ffh 13h, 12h, 11h, 10h 0dh, 0ch, 0bh, 0ah 0eh, 03h, 06h, 09h 0fh, 02h, 05h, 08h 00h, 01h, 04h, 07h ; 该列有键入 djnz r2, KLoop mov r2, #0ffh sjmp Exit Goon1: mov r1, a ; 键值 = 列 X 4 + 行 ; 没有键按下, 返回 0ffh mov a, r2 dec a rl a rl a mov r2, a mov mov a, r1 r1, #4 ; r2 = (r2-1*4 ; r1 中为读入的行值 LoopC: rrc jc inc djnz Exit: mov a, r2 ; 取出键码 mov dptr, #KeyTable movc a, a+dptr mov r2, a WaitRelease: m

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论