亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? pcf8574key20.asm

?? c8051f020源代碼39個 使用Silicon Labs IDE 調試器
?? ASM
字號:
;PCF8574KEY20.ASM        20鍵掃描加6位數碼顯示的實驗程序B:
;R1,存放掃描行的鍵值:各行首鍵的值分別為  #0,#4,#8,#12 (共有四行)
;R2,存放PB口送掃描的數。
;R5,存放掃描列的鍵值:     #0,#1,#2,#3 (共有四列)
 $include(c8051f020.inc)
SLA1W          EQU   70H      ;PCF8574 A片寫的節點地址(可選地址開關:000H)
 SLA1R          EQU   71H      ;PCF8574 A片讀的節點地址 
 SLA2W          EQU   72H      ;PCF8574 B片寫的節點地址 (可選地址開關:001H )    
 SLA2R          EQU   73H      ;PCF8574 B片讀的節點地址 
 SLA3W          EQU   76H      ;PCF8574 C片寫的節點地址 (可選地址開關:011H)
 SLA3R          EQU   77H      ;PCF8574 C片讀的節點地址 
 SLA            EQU   60H
 SLAW           EQU   62H
 SLAR           EQU   63H 
 NUMBYT         EQU   61H     ;被傳送的字節數存放單元
 MTD            EQU   20H     ;發送數據緩沖區首地址
 MRD            EQU   30H     ;接收字節緩沖區首地址          
 VSCL           EQU   P0.1    ;模擬I2C總線時鐘線
 VSDA           EQU   P0.0    ;模擬I2C總線數據線
          ORG   0
          AJMP   BEGIN
          ORG   30H
BEGIN:    ACALL  INIT         ;初始化,將顯示緩沖區(71H~76H)全置#0FFH(非數據)
          ACALL  INITA        ;作為輸入用的芯片PCF8574A(U1)應先將口鎖存器置為高電平
MAIN:      MOV    WDTCN,#0DEH  ;禁止看門狗定時器
           MOV    WDTCN,#0ADH;
	      MOV     XBR2,#40H  ;C8051F交叉開關使能
          ACALL    INITA     ;作為輸入用的芯片應先初始化
 LCALL    KEY0      ;查詢功能鍵F1(PA4),F2(PA5),F3(PA6),F4(PA7)是否按下?
          ACALL    KEY20     ;調用判鍵子程序(針對小鍵盤上的20個鍵),查詢是否有鍵按下?
          ACALL    DISP       ;調用顯示子程序,動態顯示71H~76H中的值
          MOV     A,6CH       ;處理四個功能鍵(F1,F2,F3,F4)的子程序。功能鍵值在6CH中
          CJNE    A,#10H,PP1 
          ACALL   BELL1         ;按下F0鍵,蜂鳴器響一聲(模擬F1功能)
 PP1:     CJNE    A,#20H,PP2
          ACALL   BELL2         ;按下F1鍵,蜂鳴器響二聲(模擬F2功能)
 PP2:     CJNE    A,#40H,PP3    ;
          ACALL   BELL3         ;按下F2鍵,蜂鳴器響三聲(模擬F3功能)
 PP3:     CJNE    A,#80H,MAIN
          ACALL   BELL4         ;按下F3鍵,蜂鳴器響四聲(模擬F4功能)
          AJMP      MAIN
;查詢鍵按的子程序( 針對小鍵盤上的16個數字鍵,共有四行、四列)
KEY20:    MOV 	R5,#0               ;(R5) = 列號,其值為#0,#1,#2,#3
	  MOV 	R2,#0FEH
KEY20S:   MOV	 A,R2                ;往PB口送掃描數據:#0FEH
     	   ACALL  WRITEB
     	   ACALL  READA          ;讀A口
     	   MOV    A,MRD         ;讀PA口,判斷按鍵在那一行?             
           MOV	 R1,#0	          ;(R1)=行值:#0,#4,#8,#12
   	      JNB 	 ACC.0,REL0   ;第0行有鍵按下,行首鍵值R1為#0。轉REL0處理
	       MOV   R1  ,#04H
           JNB	 ACC.1,REL0        ; 第1行有鍵按下,行首鍵值R1為#4。轉REL0處理
    	       MOV   R1,#08H
     	   JNB 	 ACC.2, REL0   ; 第2行有鍵按下,行首鍵值R1為#8。轉REL0處理
	       MOV 	 R1, #0CH
	       JNB   ACC.3 , REL0    ; 第3行有鍵按下,行首鍵值R1為#12。轉REL0處理
	        MOV	 R1,#0
             MOV   A, R2         
    	        RL	 A
             MOV   R2,A         ;準備掃描下一列(PB口),共有四列:#0,#1,#2,#3
             INC	 R5           ;列的鍵值加1
              CJNE   R2, #0EFH,  KEY20S  ;第三列未掃描完,返回繼續檢測有無按鍵 
	         RET            ;第三列已掃描完,返回主程序
      ;有鍵按下,重設顯示區
REL0:	LCALL   BELL        ;有鍵按下,鳴笛
     	ACALL	 KEY20A    ;消除按鍵抖動
      	MOV 	A,  R5     ;取按鍵數值:行首值(#0,#4,#8,#12)加列值(#0,#1,#2,#3)
     	ADD	A,  R1     ;(R5)+(R1)=按鍵位置對應的數值(#0,#1,….#E,#F)
	     PUSH	  ACC          ;保存鍵值(行值加列值)
 	      MOV 	A , 71H         ;將按鍵數值存入71H~76H中
	  CJNE 	A , #0FFH, RE1   ;71H中有數(非#0FFH),說明四位地址有效,轉RE1,
                                 ;應將新數存入75H,76H中去
	   MOV     71H, 72H ;71H中無數((71H)=# 0FFH),數據從后位移向前位
	   MOV	A, 71H           ;鍵入的是四位地地址,應存入71H~74H中
	   CJNE	A , #0FFH , KY4
	   SJMP	KY5    
KY4:    CJNE    A, #8, KY2  ;在71H中的數據應小于8。因為四位地址不能大于7FFFH
	   SJMP	KY3	    
KY2:  	JNC  	KY3     ;即是說71H中的數不能出現#8,#9,#0A,#0B,#0C,#0D,#0E,#0F
KY5:      MOV  	72H,73H   ;按一鍵,地址往前移動一位
	      MOV 	73H,74H
	      POP 	ACC
           MOV 	74H,A    ;將最新鍵入的數存入74H中,看作地址用
	      RET
KY3:  	MOV  	71H,#0  ; 若四位地址值大于7FFFH,地址非法,應將四位地址改寫為0000H
          MOV  	72H,#0
          MOV  	73H,#0
	     MOV	    74H,#0
	     POP	   ACC
	     RET
RE1:     POP	    ACC
	     MOV	75H,76H    ;75H,76H中存放兩位數值。76H向75H移動
MOV	76H , A              ;將最新鍵入的數存入76H
	      RET
	    ;消除抖動子程序  
KEY20A: ACALL READA     ;讀A口
        MOV   A,MRD
        CJNE  A,   #0FFH,  KEY20A     ;KEY20是否有鍵按下,有返回KEY20A
        ACALL DEL0                     ;延時消除誤判
        MOVX  A, @DPTR
        CJNE  A,#0FFH,KEY20A          ;再判是否有鍵按下,有則返回KEY20A等待
        RET
INIT:  	MOV	71H,#6                  ;在RAM 71H~76H 中充入#0FFH     
         MOV	A,#0FFH         
INDP:	MOV	@R0,A
	      INC 	R0
	      DJNZ	R4,INDP
	      RET
READA:        MOV    SLAW,#SLA1W      ;從A口輸入的數據
              MOV    SLAR,#SLA1R
WRA:          MOV   SLA,SLAR
              MOV   NUMBYT,#1
              LCALL RDNBYT
              RET                                 
INITA:   MOV    SLAW,#SLA1W      ;初始化:置輸入口鎖存器為高電平
         MOV    SLAR,#SLA1R
         MOV    MTD,#0FFH
         MOV    SLA,SLAW
         MOV    NUMBYT,#1
         LCALL  WRNBYT 
         RET
 WRITEB:  MOV    SLAW,#SLA2W      ;將數據送器件B
         MOV    SLAR,#SLA2R
        ACALL   WRBC   
         RET
WRITEC:  MOV    SLAW,#SLA3W     ;將數據送器件C
         MOV    SLAR,#SLA3R
 ACALL   WRBC   
         RET             
WRBC:    MOV    MTD,A
         MOV    SLA,SLAW
         MOV    NUMBYT,#1
         LCALL  WRNBYT
         RET           
         ;查看F1,F2,F3,F4(PA4~PA7)是否有鍵按下?如有,則存入6CH中
 KEY0:  ACALL    READA ;讀A口
        MOV      A,MRD
        ANL      A,#0F0H          ;只取高四位(F1,F2,F3,F4對應的位在高四位中)
        CJNE     A,#0F0H,K1
        RET
 K1:    CPL      A
        MOV      6CH,A      ;將功能鍵值存入6CH中
        RET
BELL:   CLR     P3.4
        ACALL   DELY
        SETB     P3.4
        RET
DELY:   MOV  	R6,#20H            ;延時子程序
TM:     MOV	R5,#0                  
        DJNZ 	R5,$
        DJNZ 	R6,TM
        RET
DELYL:  MOV     R4,#4       ;長延時子程序
TT1:    MOV    	R5,#0H           
TT2:    MOV     R6,#0                  
        DJNZ 	R6,$
        DJNZ 	R5,TT2
        DJNZ    R4,TT1
	   RET
BELL1:  ACALL   BELL      ;鳴笛一聲,模擬功能鍵F1的功能
        RET
BELL2:  MOV     R7,#2     ; 鳴笛二聲,模擬功能鍵F2的功能
DF2:    ACALL   BELL
        ACALL   DELYL
        DJNZ   R7,DF2
        RET
BELL3:  MOV   R7,#3      ; 鳴笛三聲,模擬功能鍵F3的功能
DF3:    ACALL   BELL
        ACALL   DELYL
        DJNZ   R7,DF3
        RET
BELL4:  MOV   R7,#4       ; 鳴笛四聲,模擬功能鍵F4的功能
DF4:    ACALL   BELL
        ACALL   DELYL
        DJNZ   R7,DF4
        RET
        ;顯示六位數碼管的子程序
DISP:  MOV	   R2,#01H       ; 字位碼在R2中,(R2)= #1,#2,#4,#8
       MOV	   R5,#6         ;顯示6個數
       MOV         R0,#71H       ;71H為要顯示的數據區的首地址
DSP1:  MOV         A,R2
       ACALL       WRITEB        ;B口輸出作為六位數碼管的位選
       MOV	    A,@R0        ;將要顯示的數值送入A中
DSP2:  MOV	    DPTR,#BCD    ;查表
       MOVC	    A,@A+DPTR    ;查表,查出要顯示的數值的字形碼           
       ACALL      WRITEC        ;C口輸出字形碼              
       ACALL 	    DEL0         ;延時
       MOV          A,R2
       RL	          A
       MOV           R2,A         ; 字位碼指向下一位
       INC	     R0           ;準備顯示下一位
       DJNZ  	     R5, DSP1
       RET
BCD:   DB	3FH,06H,5BH,4FH  			  ;顯示數值0,1,2,3
       DB	66H,6DH,7DH,07H       	              ;4,5,6,7
       DB	7FH,6FH,77H,7CH                       ;8,9,A,B
       DB	39H,5EH,79H,71H                       ;C,D,E,F
       DB	73H,3EH,31H,6EH                       ;P,U,Z,Y
       DB	40H,00H	                             ;- ,滅
DEL0:   MOV  		R6,#00H              ;延時子程序
TMA:    MOV		R7,#01                   
        DJNZ 		R7,$
        DJNZ 		R6,TMA
	      RET
	WRNBYT:  MOV        R3,NUMBYT

          LCALL       ST           ;啟動I2C總線
          MOV         A,SLA            ;發送SLAW字節
          LCALL       WRBYT
          LCALL       CACK             ;檢查應答位
          JB          F0,WRNBYT        ;非應答位則重發
          MOV         R1,#MTD
  WRDA:  MOV         A,@R1
          LCALL       WRBYT
          LCALL       CACK
          JB          F0,WRNBYT
          INC         R1
          DJNZ        R3,WRDA
          LCALL       STOP
        RET
WRBYT:   MOV	     R0,#08H    ;8為數據長度送R0中
   WLP:  RLC         A           ;發送數據左移,使發送位入C
         JC          WR1         ;判斷發送"1"還是"0",發送"1"轉WR1
         AJMP        WR0         ;發送"0"轉WR0
  WLP1: DJNZ         R0,WLP     ;8位是否發送完,未完轉WLP
         RET                     ;8位發送完結束
   WR1: SETB         VSDA        ;發送"1"程序段
         SETB        VSCL  
         NOP
        NOP
        CLR        VSCL
         CLR        VSDA
         AJMP       WLP1
  WR0:  CLR        VSDA         ;發送"0"程序段
         SETB       VSCL
         NOP
         NOP
         CLR        VSCL
         AJMP       WLP1


RDNBYT:  MOV         R3,NUMBYT
         LCALL       ST                 ;發送啟動位
          MOV         A,SLA              ;發送尋址字節(讀)
          LCALL       WRBYT
          LCALL       CACK                ;檢查應答位
          JB          F0,RDNBYT          ;非正常應答時重新開始
RDN:     MOV         R1,#MRD            ;接收數據緩沖區首址MDR入R1
RDN1:     LCALL       RDBYT               ;讀入一個字節到接收數據緩沖中
          MOV         @R1,A
          DJNZ        R3,ACK              ;N節讀完否?未完轉ACK
          LCALL       MNACK               ;N個字節讀完發送非應答位A
          LCALL       STOP                ;發送停止信號
          RET                              ;子程序結束
 ACK:     LCALL       MACK                ;發送應答位
          INC         R1                  ;指向下一個接收數據緩沖單元
          SJMP        RDN1                ;轉讀入下一個字節數據
RDBYT:   MOV	R0,#08H           ;8位數據長度如R0
   RLP:  SETB         VSDA               ;置VSDA為輸入方式
         SETB         VSCL              ;使VSDA上數據有效
         MOV          C,VSDA            ;讀入VSDA引腳狀態
         MOV          A,R2              ;讀入"0"程序段,由C拼裝入R2中
         RLC          A 
         MOV          R2,A
         CLR          VSCL              ;使VSCL=0可繼續接收數據位
         DJNZ         R0,RLP            ;8位讀完否?未讀完轉RLP
         RET

 STOP: CLR		VSDA               ;停止I2C總線數據傳送
        SETB		 VSCL
        NOP  
        NOP
        SETB		 VSDA
        NOP
        NOP
        CLR            VSDA
        CLR            VSCL
        RET
MACK:   CLR            VSDA               ;發送應答位
        SETB           VSCL
        NOP
        NOP
        CLR            VSCL
        SETB           VSDA
        RET
MNACK: SETB           VSDA             ;發送非應答位
       SETB           VSCL
       NOP
        NOP
        CLR         VSCL
       CLR         VSDA
       RET
CACK:    SETB        VSDA            ;應答位檢查
        SETB        VSCL              
        CLR         F0                
        MOV         C,VSDA          
        JNC         CEND             
        SETB        F0                
CEND:   CLR         VSCL             
        RET
ST:    SETB		 VSDA                 ;啟動I2C總線
        SETB		 VSCL
        NOP  
        NOP
        CLR			 VSDA
        NOP
        NOP
        CLR           VSCL
        RET
 END

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品国产综合久久精品图片 | 在线播放/欧美激情| 不卡一卡二卡三乱码免费网站| 久久电影网站中文字幕| 蜜桃精品视频在线观看| 天天影视涩香欲综合网| 丝袜脚交一区二区| 五月天亚洲精品| 日韩黄色片在线观看| 日本怡春院一区二区| 麻豆精品一区二区| 国产制服丝袜一区| 成人激情黄色小说| 色视频欧美一区二区三区| 99久久99久久免费精品蜜臀| 91麻豆成人久久精品二区三区| 91福利社在线观看| 91精品国产一区二区人妖| 欧美变态tickle挠乳网站| 久久综合色天天久久综合图片| 国产亚洲精品资源在线26u| 中国色在线观看另类| 国产精品久久久久久久午夜片 | 国产一区二区精品在线观看| 国产精品中文字幕一区二区三区| 国产98色在线|日韩| 色婷婷亚洲一区二区三区| 欧美性xxxxxxxx| 欧美成人福利视频| 国产精品麻豆一区二区| 一区二区欧美国产| 久久国产生活片100| 国产一区二区三区综合| 91在线无精精品入口| 精品婷婷伊人一区三区三| 精品国产一区二区三区忘忧草| 国产精品福利电影一区二区三区四区| 亚洲一级二级在线| 韩国精品主播一区二区在线观看| www.亚洲色图.com| 7777精品伊人久久久大香线蕉经典版下载| 精品黑人一区二区三区久久| 亚洲日本青草视频在线怡红院| 午夜精品123| 成人午夜私人影院| 欧美剧在线免费观看网站| 久久久精品免费观看| 亚洲成av人综合在线观看| 国产高清不卡二三区| 欧美三区在线观看| 国产亚洲成av人在线观看导航| 亚洲精品视频一区| 精品在线你懂的| 91豆麻精品91久久久久久| 337p日本欧洲亚洲大胆精品| 亚洲一线二线三线视频| 丁香亚洲综合激情啪啪综合| 欧美日韩极品在线观看一区| 国产日产欧美一区| 免费在线观看视频一区| 91小视频免费看| 国产亚洲精品bt天堂精选| 日本成人在线视频网站| 日本韩国视频一区二区| 国产免费观看久久| 奇米精品一区二区三区在线观看一| av动漫一区二区| 国产亚洲午夜高清国产拍精品 | 岛国一区二区在线观看| 在线不卡a资源高清| 亚洲激情五月婷婷| 国产99久久久国产精品潘金网站| 欧美一区二区三区喷汁尤物| 一区二区三区中文在线观看| 国产成人在线看| 欧美精品一区二区三区蜜桃| 亚洲成在线观看| 色中色一区二区| 国产精品久久久久影院色老大 | 久久精品日韩一区二区三区| 亚洲午夜影视影院在线观看| 不卡的av网站| 日本一区二区三区免费乱视频| 久久精品国产网站| 日韩午夜小视频| 水野朝阳av一区二区三区| 欧美日韩五月天| 亚洲综合久久久久| 色婷婷精品久久二区二区蜜臂av | 7799精品视频| 性做久久久久久免费观看| 日本电影欧美片| 一区二区三区 在线观看视频| 91丨九色丨蝌蚪丨老版| 国产精品无人区| 岛国精品在线观看| 国产精品蜜臀在线观看| 福利视频网站一区二区三区| 精品国产乱码久久久久久蜜臀| 免费观看91视频大全| 日韩精品专区在线影院观看 | 欧美精品在欧美一区二区少妇| 亚洲国产成人高清精品| 欧美日韩精品专区| 青青草原综合久久大伊人精品| 欧美一级夜夜爽| 麻豆国产欧美日韩综合精品二区 | 中文字幕亚洲一区二区av在线 | 久久精品一区八戒影视| 国产精品91xxx| 中文字幕一区二区三区蜜月| 成人美女在线观看| 亚洲精品少妇30p| 欧美亚洲综合色| 日韩av中文字幕一区二区| 日韩欧美亚洲一区二区| 韩国毛片一区二区三区| 国产亚洲一区字幕| 91视频一区二区三区| 亚洲男女一区二区三区| 欧美日韩国产另类不卡| 琪琪久久久久日韩精品| 久久嫩草精品久久久久| 成人一区二区视频| 一区二区三区不卡视频在线观看| 欧美日韩在线三区| 精品一区二区免费在线观看| 国产亚洲综合在线| 色一情一伦一子一伦一区| 亚洲午夜精品在线| 精品少妇一区二区三区日产乱码 | 国内精品不卡在线| 国产精品国产成人国产三级| 日本韩国欧美在线| 久久精品国产色蜜蜜麻豆| 中文字幕免费一区| 欧洲一区二区三区在线| 青青草一区二区三区| 国产精品嫩草影院com| 91福利视频在线| 精品亚洲欧美一区| 亚洲天堂免费看| 制服丝袜中文字幕一区| 福利一区在线观看| 婷婷中文字幕综合| 日本一二三不卡| 精品视频1区2区| 国产iv一区二区三区| 亚洲成人免费在线观看| 久久一区二区三区四区| 在线观看视频欧美| 国产乱子伦视频一区二区三区| 亚洲视频免费在线| 精品欧美一区二区三区精品久久 | 欧洲视频一区二区| 精品一区二区在线观看| 亚洲乱码精品一二三四区日韩在线| 51精品国自产在线| 白白色 亚洲乱淫| 亚洲大片免费看| 国产精品久久久久7777按摩| 91.xcao| 成人免费毛片嘿嘿连载视频| 日日摸夜夜添夜夜添精品视频| 国产精品久久久久久久久图文区| 欧美一区二视频| 欧美亚洲一区二区在线观看| 国产麻豆精品视频| 日韩精品免费视频人成| 亚洲免费资源在线播放| 久久久久国产精品免费免费搜索| 欧美伦理电影网| 91在线播放网址| 国产成人免费视频网站| 日韩av午夜在线观看| 亚洲精品一二三| 国产精品美女www爽爽爽| 欧美一区二区三区电影| 日本丶国产丶欧美色综合| 成人毛片在线观看| 国产成人综合亚洲91猫咪| 麻豆国产精品一区二区三区| 亚洲国产精品人人做人人爽| 综合中文字幕亚洲| 国产日韩综合av| 国产日韩一级二级三级| 欧美成人女星排名| 欧美一二三四区在线| 欧美老女人在线| 欧美日韩一区二区三区四区 | 中文字幕av不卡| 久久色成人在线| 欧美大片拔萝卜| 欧美一区二区精品在线| 欧美精品在线观看播放| 欧美日韩精品欧美日韩精品一 | 亚洲色图欧洲色图婷婷| 欧美激情自拍偷拍| 日本一区二区三区在线不卡| 精品电影一区二区三区|