導航:首頁 > 操作系統 > k20單片機

k20單片機

發布時間:2022-11-13 13:01:00

⑴ 用8051單片機和DAC0832製作信號發生器

這要費些時間的,不會有人專門給寫的,除非有人正好做過。我現在發一個類似的,是別人的,正好被我看到了,你可以參考一下。

ORG0000H

LJMPMAIN

ORG0100H

MAIN:JNBP1.0,P10

JNBP1.1,P11

JNBP1.2,P12

JNBP1.3,P13

LJMPMAIN

P10:MOVR7,#00H

LCALLSQU

LJMPMAIN

P11:MOVR7,#01H

LCALLSAW

LJMPMAIN

P12:MOVR7,#02H

LCALLTRI

LJMPMAIN

P13:MOVR7,#03H

LCALLSIN

LJMPMAIN

SQU:JNBP1.1,N1

JNBP1.2,N2

JNBP1.3,N3

LJMPSSQU

N1:MOVR7,#01H

LJMPTC0

N2:MOVR7,#02H

LJMPTC0

N3:MOVR7,#03H

LJMPTC0

SSQU:CJNER7,#00H,TC0

MOVR0,#00H

MOVDPTR,#7FFFH

K00:MOVA,#0FFH

MOVX@DPTR,A

MOVP0,#0FFH

MOVP2,#0FFH

MOVA,P2

CPLA

MOVR3,A

L00:DECR3

CJNER3,#255,L00

INCR0

INCR0

CJNER0,#254,K00

MOVR0,#00H

K01:MOVA,#00H

MOVX@DPTR,A

MOVP0,#00H

MOVP2,#0FFH

MOVA,P2

CPLA

MOVR3,A

L01:DECR3

CJNER3,#255,L01

INCR0

INCR0

CJNER0,#254,K01

LJMPSQU

TC0:RET

SAW:JNBP1.0,N4

JNBP1.2,N5

JNBP1.3,N6

LJMPSSAW

N4:MOVR7,#00H

LJMPTC1

N5:MOVR7,#02H

LJMPTC1

N6:MOVR7,#03H

LJMPTC1

SSAW:CJNER7,#01H,TC1

MOVR0,#0FFH

MOVDPTR,#7FFFH

K10:MOVA,R0

MOVX@DPTR,A

MOVP0,R0

MOVP2,#0FFH

MOVA,P2

CPLA

MOVR3,A

L10:DECR3

CJNER3,#255,L10

INCR0

CJNER0,#255,K10

LJMPSAW

TC1:RET

TRI:JNBP1.0,N7

JNBP1.1,N8

JNBP1.3,N9

LJMPTTRI

N7:MOVR7,#00H

LJMPTC2

N8:MOVR7,#01H

LJMPTC2

N9:MOVR7,#03H

LJMPTC2

TTRI:CJNER7,#02H,TC2

MOVR0,#00H

MOVDPTR,#7FFFH

K20:MOVA,R0

MOVX@DPTR,A

MOVP0,R0

MOVP2,#0FFH

MOVA,P2

CPLA

MOVR3,A

L20:DECR3

CJNER3,#255,L20

INCR0

INCR0

CJNER0,#254,K20

K21:MOVA,R0

MOVX@DPTR,A

MOVP0,R0

MOVP2,#0FFH

MOVA,P2

CPLA

MOVR3,A

L21:DECR3

CJNER3,#255,L21

DECR0

DECR0

CJNER0,#0,K21

LJMPTRI

TC2:RET

SIN:JNBP1.0,N10

JNBP1.1,N11

JNBP1.2,N12

LJMPSSIN

N10:MOVR7,#00H

LJMPTC3

N11:MOVR7,#01H

LJMPTC3

N12:MOVR7,#02H

LJMPTC3

SSIN:CJNER7,#03H,TC3

MOVR0,#00H

MOVDPTR,#7FFFH

K30:MOVA,R0

MOVDPTR,#TAB

MOVCA,@A+DPTR

MOVDPTR,#7FFFH

MOVX@DPTR,A

MOVP0,A

INCR0

MOVP2,#0FFH

MOVA,P2

CPLA

MOVR3,A

L30:DECR3

CJNER3,#255,L30

CJNER0,#255,K30

LJMPSIN

TC3:RET

TAB:DB

⑵ 哪種類型的8位pic單片機用來做可變速的循跡小車實驗比較好!要求有pwm輸出的

這個很多,目前有PWM的8位PIC單片機有289種型號!!!最好你還得有其他要求。
289種型號如下:
PIC12F1501
PIC12F1822
PIC12F1840
PIC12F615
PIC12F617
PIC12F683
PIC12F752
PIC12HV615
PIC12LF1840T48A
PIC16F1503
PIC16F1507
PIC16F1508
PIC16F1509
PIC16F1516
PIC16F1517
PIC16F1518
PIC16F1519
PIC16F1526
PIC16F1527
PIC16F1782
PIC16F1783
PIC16F1784
PIC16F1786
PIC16F1787
PIC16F1823
PIC16F1824
PIC16F1825
PIC16F1826
PIC16F1827
PIC16F1828
PIC16F1829
PIC16F1847
PIC16F1933
PIC16F1934
PIC16F1936
PIC16F1937
PIC16F1938
PIC16F1939
PIC16F1946
PIC16F1947
PIC16F616
PIC16F627A
PIC16F628A
PIC16F648A
PIC16F684
PIC16F685
PIC16F690
PIC16F707
PIC16F716
PIC16F72
PIC16F720
PIC16F721
PIC16F722
PIC16F722A
PIC16F723
PIC16F723A
PIC16F724
PIC16F726
PIC16F727
PIC16F73
PIC16F737
PIC16F74
PIC16F747
PIC16F76
PIC16F767
PIC16F77
PIC16F777
PIC16F785
PIC16F818
PIC16F819
PIC16F87
PIC16F88
PIC16F882
PIC16F883
PIC16F884
PIC16F886
PIC16F887
PIC16F913
PIC16F914
PIC16F916
PIC16F917
PIC16F946
PIC16HV616
PIC16HV785
PIC16LF722
PIC16LF723
PIC16LF724
PIC16LF726
PIC16LF727
PIC18F1220
PIC18F1320
PIC18F13K22
PIC18F13K50
PIC18F14K22
PIC18F14K50
PIC18F2220
PIC18F2221
PIC18F2320
PIC18F2321
PIC18F2331
PIC18F23K20
PIC18F23K22
PIC18F2410
PIC18F2420
PIC18F2423
PIC18F2431
PIC18F2450
PIC18F2455
PIC18F2458
PIC18F2480
PIC18F24J10
PIC18F24J11
PIC18F24J50
PIC18F24K20
PIC18F24K22
PIC18F2510
PIC18F2515
PIC18F2520
PIC18F2523
PIC18F2525
PIC18F2550
PIC18F2553
PIC18F2580
PIC18F2585
PIC18F25J10
PIC18F25J11
PIC18F25J50
PIC18F25K20
PIC18F25K22
PIC18F25K80
PIC18F2610
PIC18F2620
PIC18F2680
PIC18F2682
PIC18F2685
PIC18F26J11
PIC18F26J13
PIC18F26J50
PIC18F26J53
PIC18F26K20
PIC18F26K22
PIC18F26K80
PIC18F27J13
PIC18F27J53
PIC18F4220
PIC18F4221
PIC18F4320
PIC18F4321
PIC18F4331
PIC18F43K20
PIC18F43K22
PIC18F4410
PIC18F4420
PIC18F4423
PIC18F4431
PIC18F4450
PIC18F4455
PIC18F4458
PIC18F4480
PIC18F44J10
PIC18F44J11
PIC18F44J50
PIC18F44K20
PIC18F44K22
PIC18F4510
PIC18F4515
PIC18F4520
PIC18F4523
PIC18F4525
PIC18F4550
PIC18F4553
PIC18F4580
PIC18F4585
PIC18F45J10
PIC18F45J11
PIC18F45J50
PIC18F45K20
PIC18F45K22
PIC18F45K80
PIC18F4610
PIC18F4620
PIC18F4680
PIC18F4682
PIC18F4685
PIC18F46J11
PIC18F46J13
PIC18F46J50
PIC18F46J53
PIC18F46K20
PIC18F46K22
PIC18F46K80
PIC18F47J13
PIC18F47J53
PIC18F6310
PIC18F6390
PIC18F6393
PIC18F63J11
PIC18F63J90
PIC18F6410
PIC18F6490
PIC18F6493
PIC18F64J11
PIC18F64J90
PIC18F6520
PIC18F6527
PIC18F65J10
PIC18F65J11
PIC18F65J15
PIC18F65J50
PIC18F65J90
PIC18F65K22
PIC18F65K80
PIC18F65K90
PIC18F6622
PIC18F6627
PIC18F6628
PIC18F66J10
PIC18F66J11
PIC18F66J15
PIC18F66J16
PIC18F66J50
PIC18F66J55
PIC18F66J60
PIC18F66J65
PIC18F66J90
PIC18F66J93
PIC18F66K22
PIC18F66K80
PIC18F66K90
PIC18F6722
PIC18F6723
PIC18F67J10
PIC18F67J11
PIC18F67J50
PIC18F67J60
PIC18F67J90
PIC18F67J93
PIC18F67K22
PIC18F67K90
PIC18F8310
PIC18F8390
PIC18F8393
PIC18F83J11
PIC18F83J90
PIC18F8410
PIC18F8490
PIC18F8493
PIC18F84J11
PIC18F84J90
PIC18F8520
PIC18F8527
PIC18F85J10
PIC18F85J11
PIC18F85J15
PIC18F85J50
PIC18F85J90
PIC18F85K22
PIC18F85K90
PIC18F8622
PIC18F8627
PIC18F8628
PIC18F86J10
PIC18F86J11
PIC18F86J15
PIC18F86J16
PIC18F86J50
PIC18F86J55
PIC18F86J60
PIC18F86J65
PIC18F86J72
PIC18F86J90
PIC18F86J93
PIC18F86K22
PIC18F86K22
PIC18F86K90
PIC18F8722
PIC18F8723
PIC18F87J10
PIC18F87J11
PIC18F87J50
PIC18F87J60
PIC18F87J72
PIC18F87J90
PIC18F87J93
PIC18F87K22
PIC18F87K90
PIC18F96J60
PIC18F96J65
PIC18F97J60

⑶ pic18f46k20打開防寫燒寫後單片機還能再燒寫么

當然可以了,保護只是防止晶元內部的數據用模擬器讀出來而已,不代表不能燒晶元。燒晶元是先把Flash內部的東西擦掉(有點像U盤格式化)然後寫入新的數據。

⑷ 通過串口調試助手,可以給K20系列單片機發送can通信信息嗎

可以通過232轉can進行工作,這樣就可以接串口助手了,協議測試類的,如格西烽火串口助手,比較方便,可以按照自己的要求自定義。

⑸ micrchip公司28腳單片機有哪些

Microchip公司的8位28pin單片機有:
晶元內有「F」的全部支持ISP,有"C"的僅僅是OTP(一次性編程)的晶元。比如:PIC16C72A僅僅是OTP的晶元。下面僅列出幾款"F"的晶元。
PIC16F57 PIC16F722 PIC16F723 PIC16F882 PIC16F726 PIC16F1993 PIC16F883 PIC18F23K20 PIC18F24J10 PIC16F886 PIC18F25J10 PIC18F24K20 PIC16F913 PIC18F25J11 PIC18F24J50 PIC16F916 PIC18F26K20 PIC18F25J50 PIC18F26J11 PIC18F2450 PIC18F2550 PIC18F2480 PIC18F2553 PIC18F2580 PIC18F2680
請參見這里:
http://www.microchip.com/ParamChartSearch/chart.aspx?branchID=1035&mid=10&lang=en&pageId=74

Microchip公司的16位28pin單片機有:
DSPIC30F1010 DSPIC33J06GS102 DSPIC33J06GS202 DSPIC30F2020 PIC24F16K12等多種晶元(沒有全部列出的)DSPIC系列單片機支持DSP功能(數字信號處理功能)具體的請參考這里:
http://www.microchip.com/ParamChartSearch/chart.aspx?branchID=8171&mid=14&lang=en&pageId=75

Microchip公司的32位單片機沒有28PIN的。最少是64pin
如有興趣可以參考這里:
http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=2870

⑹ 誰能給我解釋一下以下的單片機程序

ORG 0000H
LJMP MAIN
ORG 0100H ;主程序地址
MAIN: JNB P1.0,P10 ;哪個鍵按下,顯示哪個波形
JNB P1.1,P11
JNB P1.2,P12
JNB P1.3,P13
LJMP MAIN ;沒有鍵按下返回主程序循環

P10: MOV R7,#00H ;方波波形,R7為特徵碼,放00,表示方波
LCALL SQU ;調用方波波形函數
LJMP MAIN ;調用完返回主程序循環
P11: MOV R7,#01H ;01表示SAW波
LCALL SAW
LJMP MAIN
P12: MOV R7,#02H
LCALL TRI
LJMP MAIN
P13: MOV R7,#03H
LCALL SIN
LJMP MAIN

SQU: JNB P1.1,N1 ;方波函數,如果有其他鍵按下
JNB P1.2,N2 ;退出程序
JNB P1.3,N3
LJMP SSQU ;沒有鍵按下,到SSQU函數產生方波
N1: MOV R7,#01H ;哪個鍵按下就在R7中記下特徵碼
LJMP TC0
N2: MOV R7,#02H
LJMP TC0
N3: MOV R7,#03H
LJMP TC0
SSQU: CJNE R7,#00H,TC0 ;R7不為0退出

MOV R0,#00H ;R0中放00
MOV DPTR,#7FFFH ;這個應該是DAC0832的地址
K00: MOV A,#0FFH ;A中放FF,高電平
MOVX @DPTR,A ;A到0832轉換
MOV P0,#0FFH ;這一句不怎麼懂,感覺可以去掉
MOV P2,#0FFH ;值P2輸入方式,P2是通過撥碼按鈕改
MOV A,P2 ;變數值,P2越大,波形周期越小
CPL A
MOV R3,A
L00: DEC R3
CJNE R3,#255,L00 ;這個循環改變周期
INC R0
INC R0
CJNE R0,#254,K00 ;高電平波循環127次
MOV R0,#00H
K01: MOV A,#00H ;低電平,跟高電平差不多
MOVX @DPTR,A
MOV P0,#00H
MOV P2,#0FFH
MOV A,P2
CPL A
MOV R3,A

L01: DEC R3
CJNE R3,#255,L01
INC R0
INC R0
CJNE R0,#254,K01
LJMP SQU ;顯示完一個波形,回到方波函數開始,判斷有無其他按鍵
TC0: RET ;返回主函數

SAW: JNB P1.0,N4 ;判斷有無其他按鍵,同方波
JNB P1.2,N5
JNB P1.3,N6
LJMP SSAW
N4: MOV R7,#00H
LJMP TC1
N5: MOV R7,#02H
LJMP TC1
N6: MOV R7,#03H
LJMP TC1
SSAW: CJNE R7,#01H,TC1 ;特徵碼不是01 退出
MOV R0,#0FFH ;RO中放即將輸出的值
MOV DPTR,#7FFFH
K10: MOV A,R0 ;鋸齒波的每個值
MOVX @DPTR,A ;輸出
MOV P0,R0
MOV P2,#0FFH ;通過P2改變周期
MOV A,P2
CPL A
MOV R3,A
L10: DEC R3
CJNE R3,#255,L10
INC R0 ;通過R0加1 來顯示鋸齒波的斜坡
CJNE R0,#255,K10 ;RO不等於255,循環鋸齒波的每個值
LJMP SAW ;等於255,完成一個鋸齒波周期,回鋸齒波開始
TC1: RET ;退出

TRI: JNB P1.0,N7 ;三角波,類似於兩個相反的鋸齒波
JNB P1.1,N8
JNB P1.3,N9
LJMP TTRI
N7: MOV R7,#00H
LJMP TC2
N8: MOV R7,#01H
LJMP TC2
N9: MOV R7,#03H
LJMP TC2
TTRI: CJNE R7,#02H,TC2

MOV R0,#00H
MOV DPTR,#7FFFH
K20: MOV A,R0
MOVX @DPTR,A
MOV P0,R0
MOV P2,#0FFH
MOV A,P2
CPL A
MOV R3,A
L20: DEC R3
CJNE R3,#255,L20
INC R0
INC R0
CJNE R0,#254,K20
K21: MOV A,R0
MOVX @DPTR,A
MOV P0,R0
MOV P2,#0FFH
MOV A,P2
CPL A
MOV R3,A
L21: DEC R3
CJNE R3,#255,L21
DEC R0
DEC R0
CJNE R0,#0,K21
LJMP TRI
TC2: RET

SIN: JNB P1.0,N10 ;正弦波,是通過存儲在代碼區的一個數
JNB P1.1,N11 ;組來顯示值的
JNB P1.2,N12
LJMP SSIN
N10: MOV R7,#00H
LJMP TC3
N11: MOV R7,#01H
LJMP TC3
N12: MOV R7,#02H
LJMP TC3
SSIN: CJNE R7,#03H,TC3

MOV R0,#00H
MOV DPTR,#7FFFH
K30: MOV A,R0
MOV DPTR,#TAB ;數組的地址
MOVC A,@A+DPTR ;把第R0個數放到A中
MOV DPTR,#7FFFH
MOVX @DPTR,A ;輸出A
MOV P0,A
INC R0 ;RO加1
MOV P2,#0FFH ;周期
MOV A,P2
CPL A
MOV R3,A
L30: DEC R3
CJNE R3,#255,L30
CJNE R0,#255,K30 ;不等於255表示一個周期內,跳到K30
LJMP SIN ;等於表示顯示完一個周期,到SIN開始
TC3: RET ;退出

TAB: DB ;定義正弦函數的各個值

看了你的圖和你的程序,感覺你的圖畫得簡單了一點,特別是0832地址,控制信號都沒接,看起來還在調試,建議P2口做地址匯流排,這樣,編程比較方便,你可以把P3口做周期.或者把P1口的其他口做控制匯流排,這樣要對0832時序比較熟悉才行.
我平時是用C開發的,很少用匯編,如果有什麼錯誤,可以共同探討.

⑺ 大功率led調光

你可以參考開關電源形式的製作。這樣可以用PWM調節亮度,如圖所示~

⑻ 單片機PIC18f46k20, c語言程序求助

你while(1){}裡面的程序執行是需要時間的,所以導致會閃,因為我不知道你幾個子程序都是怎麼寫的所以無法詳細說,不過基本是在顯示子程序【oled_fixeds_2x("\nScore");是這個吧】之後加個延時就可以實現保持,不過如果你要完全不閃的那就在後面加個while(1);

⑼ 飛思卡爾單片機怎麼命名的

8位:MC9S08,MC9RS08
16位:MC9S12
32位:MCF51,MCF52,一直到MCF54
DSP:MC56
ARM:K10,K20,一直到K70
PowPC:MPC5xx,MPC5xxx
等等

⑽ 51單片機網站

這是我根據自己的單片機設計的程序。請根據自己的需要修改各個參數。
org 0000H
ajmp begin
org 000BH;時鍾中斷0入口
mov tl0,#00000B;每次中斷設初值
mov th0,#110B
ajmp time0;轉跳到定時器0子程序
org 0040H
begin:;初始化部分
;設置變數RAM位置
x equ 50H
y equ 51H
z equ 52H
times equ 53H;此變數是中斷次數,只有中斷250次,才能積累2M個機器周期,即1秒鍾,
rtimes equ 54H
wtimes1 equ 55H
wtimes2 equ 56H
;設置字型碼
mov 60H,#005H;0
mov 61H,#0DDH;1
mov 62H,#046H;2
mov 63H,#054H;3
mov 64H,#09CH;4
mov 65H,#034H;5
mov 66H,#024H;6
mov 67H,#05DH;7
mov 68H,#004H;8
mov 69H,#014H;9
mov 5FH,#0FEH;-
;設置各LED位數字的RAM單元
n8 equ 71H
n7 equ 72H
n6 equ 73H
n5 equ 74H
n4 equ 75H
n3 equ 76H
n2 equ 77H
n1 equ 78H
;設置數位選線的位置
l8 bit p3.0
l7 bit p3.6
l6 bit p3.5
l5 bit p3.7
l4 bit p3.1
l3 bit p3.2
l2 bit p3.3
l1 bit p3.4
;設置定時器
setb ea
setb et0
mov th0,#11111111B
mov tl0,#11111B
clr tr0
mov p3,#00H
start:;r2-小時/r3-分鍾/r4-秒/r1是按鍵的值,無按鍵時為10H
mov r2,#00
mov r3,#00
mov r4,#00
;第3、6位顯示橫線「-」
mov n6,5FH
mov n3,5FH
main:;主程序
mov r1,#10H;r1賦10H,沒按鍵
acall chcut;調用r2-r4值轉換為字型碼並存入n1-n8的子程序
acall show;掃描一遍LED
acall key;調用鍵盤掃描子程序(此程序在51dz提供的程序上略加修改,保留注釋)
jb tr0,walkstop;若在走時,不允許調時,跳到walkstop
cjne r1,#4,s2;若r1不是4則跳到下一個計時部分s2(下同)
acall hinc;調用小時加1子程序
acall chcut
acall longdelay;調用長延時子程序
ajmp main;此次設置完成,跳到主程序
s2:
cjne r1,#5,s3
acall minc;調用分鍾加1子程序
acall chcut
acall longdelay
ajmp main;此次設置完成,跳到主程序
s3:
cjne r1,#6,s4
acall sinc;調用秒加1子程序
acall chcut
acall longdelay
ajmp main;此次設置完成,跳到主程序
s4:
cjne r1,#7,s5
acall hdec;調用小時減1子程序
acall chcut
acall longdelay
ajmp main;此次設置完成,跳到主程序
s5:
cjne r1,#8,s6
acall mdec;調用分鍾減1子程序
acall chcut
acall longdelay
ajmp main;此次設置完成,跳到主程序
s6:
cjne r1,#9,s7
acall sdec;調用秒減1子程序
acall chcut
acall longdelay
ajmp main;此次設置完成,跳到主程序
s7:
cjne r1,#0,walkstop
mov r2,#0;時分秒清0
mov r3,#0H
mov r4,#0H
acall chcut
acall longdelay
ajmp main;此次設置完成,跳到主程序
walkstop:
cjne r1,#11,s0
acall stop;調用停止走時子程序
ajmp main;此次設置完成,跳到主程序
s0:
cjne r1,#12,main
acall walk;調用開始走時子程序
ajmp main;此次設置完成,跳到主程序

;以下是子程序
show:;掃描子程序
mov p1,n8;將第8位數字型碼送上P1(下同)
setb l8;使第8位LED亮
acall delay;調用掃描延時子程序
clr l8;使第8位LED滅
mov p1,n7
setb l7
acall delay
clr l7
mov p1,n6
setb l6
acall delay
clr l6
mov p1,n5
setb l5
acall delay
clr l5
mov p1,n4
setb l4
acall delay
clr l4
mov p1,n3
setb l3
acall delay
clr l3
mov p1,n2
setb l2
acall delay
clr l2
mov p1,n1
setb l1
acall delay
clr l1
ret

hdec:
cjne r2,#0,hdnext;如果小時不是0就到hdnext
jnb tr0,hskip;小時是0且tr0是0即不在計時,到hskip
acall warning;小時是0且tr0是1即在計時,就調用報警子程序
clr tr0;停止計時
ret;返回
hskip:mov r2,#100;小時是0又不在計時,就讓r2賦100,到下一些條減1後就是59
hdnext:dec r2;如果小時不是0就到這里減1
ret

mdec:;分鍾減1子程序
cjne r3,#00,mdnext;如果分鍾不是0就到minext
mov r3,#60;如果分鍾是0就到變為60,到下一些條減1後就是59
acall hdec;從小時退位
mdnext:dec r3;如果分鍾不是0就到這里減1
ret

sdec:;秒減1子程序
cjne r4,#00,sdnext;如果秒不是0就到sdnext
mov r4,#60;如果秒是0就到變為60,到下一些條減1後就是59
acall mdec;從分鍾退位
sdnext:dec r4;如果秒不是0就到這里減1
ret

hinc:;小時加1子程序
cjne r2,#99,hinext;如果小時不是99就到hinext
mov r2,#255;如果小時是23就到變為255,到下一些條加1後就是0
hinext:inc r2;如果小時不是99就到這里加1
ret

minc:
cjne r3,#59,minext;如果分鍾不是23就到minext
mov r3,#255;如果分鍾是59就到變為255,到下一些條加1後就是0
acall hinc;分鍾滿,向小時進位
minext:inc r3;如果分鍾不是59就到這里加1
ret

sinc:
cjne r4,#59,sinext;如果秒不是23就到sinext
mov r4,#255;如果是秒是59就到變為255,到下一些條加1後就是0
acall minc;秒滿,向分鍾進位
sinext:inc r4;如果秒不是59就到這里加1
ret

chcut:;將r2-r4值轉換為字型碼並存入n1-n8的子程序
mov a,r2;小時值送Acc(下同)
mov b,#10;B賦10
div ab;AB相除,此時A是小時的十位,B是小時的個位
mov n7,b;小時的個位B送第七位數
mov n8,a;小時的十位A送第八位數
mov a,r3;分解分鍾到第四、五位數
mov b,#10
div ab
mov n4,b
mov n5,a
mov a,r4;分解秒到第一、二位數
mov b,#10
div ab
mov n1,b
mov n2,a
;以下開始轉換各數位的二進制數到字型碼(第6、3位是橫線,由定時器控制有無)
mov a,n8;第8位數送Acc(下同)
add a,#60H;Acc加60H,此時Acc中值所指的RAM地址中為第8位數的字型碼
mov r0,a;Acc送r0
mov n8,@r0;r0間接地址送回n8
mov a,n7;轉換第7位數
add a,#60H
mov r0,a
mov n7,@r0
mov a,n5;轉換第5位數
add a,#60H
mov r0,a
mov n5,@r0
mov a,n4;轉換第4位數
add a,#60H
mov r0,a
mov n4,@r0
mov a,n2;轉換第2位數
add a,#60H
mov r0,a
mov n2,@r0
mov a,n1;轉換第1位數
add a,#60H
mov r0,a
mov n1,@r0
ret

longdelay:;長延時子程序
mov r6,#0FFH
reshow1:acall show
djnz r6,reshow1
mov r6,#0FFH
reshow2:acall show
djnz r6,reshow2
ret

delay:;掃描延時子程序
mov r5,#40H
djnz r5,$
ret
ringdelay:mov r5,#0FFH
djnz r5,$
ret

time0:;定時器0子程序
push Acc;Acc壓棧
mov a,times;已中斷次數送Acc
inc a;次數加1
mov times,a;加1後送回次數變數
cjne a,#250,gotoend;如果Acc不是250說明不到1秒,跳過加秒操作
mov times,#0;是250說明到1秒了,次數變數清0
mov n6,#0FFH;第3、6位清除橫線「-」
mov n3,#0FFH
acall sdec;調用秒減1子程序
ajmp next;退出
gotoend:cjne a,#125,next;若Acc不是125就退出
mov n6,5FH;若是125就給第3、6位顯示5FH中的字型碼橫線「-」
mov n3,5FH
next:pop Acc;退出時,從棧中彈出Acc
reti;此程序中次數在0-124就不顯示橫線,在125-250就顯示橫線

walk:;開始走時子程序
setb tr0
ret
stop:;停止走時子程序
clr tr0
ret

warning:;報警子程序
;放入-FINISH-字型碼
mov n8,#0FEH;-
mov n7,#02EH;F
mov n6,#0DDH;I
mov n5,#00DH;N
mov n4,#0DDH;I
mov n3,#034H;S
mov n2,#08CH;H
mov n1,#0FEH;-
mov wtimes1,#50;設置蜂鳴次數50次
res1:mov wtimes2,#08FH;一次蜂鳴開始
res2:clr p2.0;從此句開始蜂鳴器發聲
mov p3,#0H;LED熄滅
mov r6,#5;掃描延時子程序延時太短,要重復5次
redelay:acall delay;此2句重復5次
djnz r6,redelay
setb p2.0
djnz wtimes2,res2;轉到RES2讓蜂鳴器發聲,轉wtimes2次,即8FH次
mov p3,#0H;從此句開始蜂鳴器不發聲
mov r7,#08FH;LED掃描次數
reshow:acall show
djnz r7,reshow;LED掃描08FH次,即不發聲延時
djnz wtimes1,res1;到RES1開始一次蜂鳴
finish:acall show;這兩句使LED顯示,並進入死循環
ajmp finish
key:mov p0,#00001111b;上四位和下四位分別為行和列,所以送出高低電壓檢查有沒有按鍵按下
jmp k10;跳到K10處開始掃描,這里可以改成其它條件轉移指令來決定本次掃描是否要繼續,例如減1為0轉移或者位為1或0才轉移,這主要用來增加功能,確認上一按鍵功能是否完成?是否相當於經過了延時?是否要封鎖鍵盤?
goend:jmp kend;如果上面判斷本次不執行鍵盤掃描程序,則立即轉到程序尾部,不要浪費CPU的時間
k10:jb p0.0,k20;掃描正式開始,先檢查列1四個鍵是否有鍵按下,如果沒有,則跳到K20檢查列2
k11:mov p0,#11101111b;列1有鍵按下時,P0.0變低,到底是那一個鍵按下?現在分別輸出各行低電平
jb p0.0,k12;該行的鍵不按下時,p0.0為高電平,跳到到K12,檢查其它的行
mov r1,#13;如果正好是這行的鍵按下,將寄存器R0寫下1,表示1號鍵按下了
k12:mov p0,#11011111b
jb p0.0,k13
mov r1,#15;如果正好是這行的鍵按下,將寄存器R0寫下2,表示2號鍵按下了
k13:mov p0,#10111111b
jb p0.0,k14
mov r1,#0;如果正好是這行的鍵按下,將寄存器R0寫下3,表示3號鍵按下了
k14:mov p0,#01111111b
jb p0.0,kend;如果現在四個鍵都沒有按下,可能按鍵松開或干擾,退出掃描(以後相同)
mov r1,#14;如果正好是這行的鍵按下,將寄存器R0寫下4,表示4號鍵按下了
jmp kend;已經找到按下的鍵,跳到結尾吧

k20:jb p0.1,k30;列2檢查為高電平再檢查列3、4
k21:mov p0,#11101111b;列2有健按下時,P0.0會變低,到底是那一行的鍵按下呢?分別輸出行的低電平
jb p0.1,k22;該行的鍵不按下時p0.0為高電平,跳到到K22,檢查另外三行
mov r1,#12;如果正好是這行的鍵按下,將寄存器R0寫下5,表示5號鍵按下了(以後相同,不再重復了)
k22:mov p0,#11011111b
jb p0.1,k23
mov r1,#9
k23:mov p0,#10111111b
jb p0.1,k24
mov r1,#8
k24:mov p0,#01111111b
jb p0.1,kend
mov r1,#7
jmp kend;已經找到按下的鍵,跳到結尾吧(以後相同,不要重復了)

k30:jb p0.2,k40
k31:mov p0,#11101111b
jb p0.2,k32
mov r1,#11
k32:mov p0,#11011111b
jb p0.2,k33
mov r1,#6
k33:mov p0,#10111111b
jb p0.2,k34
mov r1,#5
k34:mov p0,#01111111b
jb p0.2,kend
mov r1,#4
jmp kend

k40:jb p0.3,kend
k41:mov p0,#11101111b
jb p0.3,k42
mov r1,#10
k42:mov p0,#11011111b
jb p0.3,k43
mov r1,#3
k43:mov p0,#10111111b
jb p0.3,k44
mov r1,#2
k44:mov p0,#01111111b
jb p0.3,kend
mov r1,#1
kend: ret
end

閱讀全文

與k20單片機相關的資料

熱點內容
dvd光碟存儲漢子演算法 瀏覽:758
蘋果郵件無法連接伺服器地址 瀏覽:963
phpffmpeg轉碼 瀏覽:672
長沙好玩的解壓項目 瀏覽:145
專屬學情分析報告是什麼app 瀏覽:564
php工程部署 瀏覽:833
android全屏透明 瀏覽:737
阿里雲伺服器已開通怎麼辦 瀏覽:803
光遇為什麼登錄時伺服器已滿 瀏覽:302
PDF分析 瀏覽:486
h3c光纖全工半全工設置命令 瀏覽:143
公司法pdf下載 瀏覽:383
linuxmarkdown 瀏覽:350
華為手機怎麼多選文件夾 瀏覽:683
如何取消命令方塊指令 瀏覽:350
風翼app為什麼進不去了 瀏覽:779
im4java壓縮圖片 瀏覽:362
數據查詢網站源碼 瀏覽:151
伊克塞爾文檔怎麼進行加密 瀏覽:893
app轉賬是什麼 瀏覽:163