包括溫度檢測/4線步進電機/鍵盤模擬音量/點陣顯示等
0.png (5.67 KB, 下載次數(shù): 49)
下載附件
2018-4-6 03:03 上傳
0.png (12.65 KB, 下載次數(shù): 55)
下載附件
2018-4-6 03:05 上傳
單片機源程序如下:
- ;*******************************************************************************
- ;*文件: 5key_volume_con.asm *
- ;*版本: ver1.0 *
- ;*功能描述: 混合鍵盤模擬音量數(shù)碼管顯示 *
- ;* 上兩鍵:左鍵音量-,右鍵音量+ *
- ;* 下三鍵:左鍵音量24級,中鍵音量32級,右鍵音量05級 *
- ;*備注: *
- ;*軟件仿真: PROTEUS 6 *
- ;*******************************************************************************
- KEY_OK BIT 00H
- VOLNUMB EQU 22H
- PHONE EQU 21H
- COUNTER EQU 23H ;用于顯示的計數(shù)器
- KEYVAL EQU 25H
- DISPBUF EQU 5EH
- FIRST BIT P2.7 ;第一位數(shù)碼管的位控制
- SECOND BIT P2.6 ;第二位數(shù)碼管的位控制
- TMRVAR EQU 60110 ;65536-5000*12/11.0592 定時器初值5毫秒
- ;===============================================================================
- ORG 0000H
- JMP START
- ORG 0*8+3 ;INT0中斷入口
- RETI
- ORG 1*8+3 ;TIMER0中斷入口
- JMP INT_T0 ;轉去定時器0中斷服務程序入口
- ORG 2*8+3 ;INT1中斷入口
- RETI
- ORG 3*8+3 ;TIMER1中斷入口
- RETI
- ORG 4*8+3 ;串行中斷入口
- RETI
- ;===============================================================================
- START:
- mov sp,#5fh
- mov p1,#0ffh
- mov p3,#0ffh
- mov volnumb,#40h
- call init_t0
- setb ea
- ;===============================================================================
- LOOP:;主程
- ACALL KEY
- JB KEY_OK,KEYPROC
- ACALL DISP_VOL
- AJMP LOOP
- ;===============================================================================
- disp_vol:;顯示處理
- mov a,volnumb
- swap a
- anl a,#0fh
- mov dispbuf,a;十位到DISPBUF
- mov a,volnumb
- anl a,#0fh
- mov dispbuf+1,a;個位到DISPBUF+1
- ret
- ;==============================================================================
- keyproc:;鍵處理散轉
- mov a,keyval
- mov keyval,#00h
- rl a
- mov dptr,#tab_key
- jmp @a+dptr
- tab_key:
- ajmp loop
- ajmp volup
- ajmp voldw
- ajmp volrsum
- ajmp vol24
- ajmp vol05
- ;===============================================================================
- KEY:;鍵盤程序
- clr key_ok;清鍵按下標志
- orl p3,#11000000b;下面三鍵判斷
- clr key_ok
- mov a,p3
- orl a,#00111111b
- cpl a
- jz key_1
- acall delay
- acall delay
- mov a,p3
- orl a,#00111111b
- jz key_1
- nop
- jnb acc.7,keydw1
- nop
- jb acc.6,key_ret
- setb key_ok
- mov keyval,#3
- key_ret1:mov a,p3
- orl a,#00111111b
- cpl a
- jnz key_ret1;鍵松開否
- ajmp key_ret
- key_ret:ret
- keydw1:
- nop
- jnb acc.6,keydw2
- setb key_ok
- mov keyval,#4
- jmp key_ret1
- keydw2: setb key_ok
- mov keyval,#5
- jmp key_ret1
- key_1:
- setb p3.6
- clr p3.7 ;vol+按下
- nop
- nop
- jnb p3.6,key01
-
- clr p3.6;vol-按下
- setb p3.7
- nop
- nop
- jnb p3.7,key02
-
- keyexit: ajmp key_ret
- key01:
- acall delay
- acall delay
- nop
- nop
- jb p3.6,key01_ret
- setb key_ok
- mov keyval,#1
- nop
- acall delay
- acall delay
- key01_ret:jnb p3.6,$
- ajmp keyexit
- key02:
- acall delay
- acall delay
- nop
- nop
- jb p3.7,key02_ret
- setb key_ok
- mov keyval,#2
- nop
- acall delay
- acall delay
- key02_ret:jnb p3.7,$
- ajmp keyexit
- delay:; 去鍵抖延時
- push psw
- setb rs0
- mov r7,#50
- d1: mov r6,#50
- d2: djnz r6,d2
- djnz r7,d1
- pop psw
- ret
- ;===============================================================================
- volup:;鍵盤音量+
- mov phone,volnumb
- mov a,phone
- xrl a,#70h
- jz volup1
- acall uaa
- mov volnumb,phone
- jmp loop
- volup1: mov volnumb,#70h
- jmp loop
- ;===============================================================================
- voldw:;鍵盤音量-
- mov phone,volnumb
- mov a,phone
- jz voldw1
- acall daa
- mov volnumb,phone
- jmp loop
- voldw1: mov volnumb,#00h
- jmp loop
- ;===============================================================================
- volrsum:;32級
- mov volnumb,#32h
- ajmp loop
- vol24:;24級
- mov volnumb,#24h
- ajmp loop
- vol05:;05級
- mov volnumb,#05h
- ajmp loop
- ;===============================================================================
- uaa:;遞增1
- mov a,phone
- swap a
- anl a,#0fh
- mov r5,a
- mov a,phone
- anl a,#0fh
- nop
- cjne a,#09h,uaa_1
- nop
- mov r4,#00h
- inc r5
- ajmp uaa_2
- uaa_1:
- inc a
- mov r4,a
- uaa_2:
- mov a,r5
- swap a
- add a,r4
- mov phone,a
- ret
- ;===============================================================================
- daa:;遞減1
- mov a,phone
- swap a
- anl a,#0fh
- mov r5,a
- mov a,phone;
- anl a,#0fh
- jnz daa_1
- mov r4,#09h
- dec r5
- nop
- sjmp daa_2
- daa_1:
- dec a
- mov r4,a
- daa_2:
- mov a,r5;
- swap a
- add a,r4
- mov phone,a
- ret
- ;===============================================================================
- INIT_T0: ;初始化T0為5毫秒的定時器
- MOV TMOD,#01H
- MOV TH0,#HIGH(TMRVAR)
- MOV TL0,#LOW(TMRVAR)
- SETB ET0 ;開T0中斷
- SETB TR0 ;定時器0開始運行
- RET ;返回
- ;===============================================================================
- ;以下是中斷程序,實現(xiàn)數(shù)碼管顯示
- INT_T0: ;定時器T0的中斷響應程序
- PUSH ACC ;ACC入棧
- PUSH PSW ;PSW入棧
- MOV TH0,#HIGH(TMRVAR)
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
Proteus單片機仿真實例大全[1].part001.rar
(500 KB, 下載次數(shù): 11)
2018-4-5 10:26 上傳
點擊文件名下載附件
仿真實例 下載積分: 黑幣 -5
|