;26H-29H放顯示小數位、個位、十位、百位BCD碼數,24H-25H放頻率控制數據(十六進制)
;
CONBITL EQU 21H ;頻率控制字節低8位
CONBITH EQU 22H ;頻率控制字節高8位
KEYWORD EQU 23H ;存放鍵掃描時P1口值
;
;
ORG 0000H ;程序開始地址
LJMP START ;轉START執行
ORG 0003H ;
RETI ;不用中斷程序
ORG 000BH ;
RETI ; 不用中斷程序
ORG 0013H ;
RETI ; 不用中斷程序
ORG 001BH ;
RETI ; 不用中斷程序
ORG 0023H ;
RETI ; 不用中斷程序
ORG 002BH ;
RETI ; 不用中斷程序
;
;初始化程序
CLEARMEN: MOV R0,#20H ;20H-29H循環清0
MOV R1,#0AH ;
CLEARLOOP: MOV @R0,#00H ;
INC R0 ;
DJNZ R1,CLEARLOOP ;
MOV P0,#0FFH ;四端口置1
MOV P1,#0FFH ;
MOV P2,#0FFH ;
MOV P3,#0FFH ;
CLR P3.0 ;BH1415禁止操作
CLR P3.1 ;
CLR P3.2 ;
LCALL KEYFUN15 ;置立體聲發射方式,開立體聲發射指示燈
CLEAR1: MOV PCON,#00H ;控制寄存器清0
MOV 29H,#00H ; 置初始值為88MHz(顯示為088.0)
MOV 28H,#08H ;
MOV 27H,#08H ;
MOV 26H,#00H ;
LCALL DISPUPDAT ;寫入BH1415芯片(修改發送頻率)
RET ;子程序返回
;
;主程序
START: LCALL CLEARMEN ;上電初始化
MAIN: LCALL KEYWORK ;調查鍵子程序
LCALL DISPLAY ;LED顯示一次
AJMP MAIN ;轉MAIN循環
NOP ;PC出錯處理
NOP ;
AJMP START ;重新初始化
;
; 4*4行列掃描查鍵子程序
KEYWORK: MOV P1,#0FFH ; 置P1口為輸入狀態
CLR P1.0 ;掃描第一行(第一行為0)
MOV A,P1 ;讀入P1口值
ANL A,#0F0H ;低四位為0
CJNE A,#0F0H,KEYCON ;高四位不為全1(有鍵按下)轉KEYCOON
SETB P1.0 ; 掃描第二行(第二行為0)
CLR P1.1 ;
MOV A,P1 ; 讀入P1口值
ANL A,#0F0H ; 低四位為0
CJNE A,#0F0H,KEYCON ; 高四位不為全1(有鍵按下)轉KEYCOON
SETB P1.1 ; 掃描第三行(第三行為0)
CLR P1.2 ;
MOV A,P1 ; 讀入P1口值
ANL A,#0F0H ; 低四位為0
CJNE A,#0F0H,KEYCON ; 高四位不為全1(有鍵按下)轉KEYCOON
SETB P1.2 ; 掃描第四行(第四行為0)
CLR P1.3 ;
MOV A,P1 ; 讀入P1口值
ANL A,#0F0H ; 低四位為0
CJNE A,#0F0H,KEYCON ; 高四位不為全1(有鍵按下)轉KEYCOON
SETB P1.3 ;結束行掃描
RET ;子程序返回
KEYCON: LCALL DL10MS ;消抖處理
MOV A,P1 ;再讀入P1口值
ANL A,#0F0H ; 低四位為0
CJNE A,#0F0H,KEYCHE ; 高四位不為全1,確有鍵按下,轉KEYCHE
KEYOUT: RET ;干擾,子程序返回
KEYCHE: MOV A,P1 ;讀P1口值
MOV KEYWORD,A ;放入23H暫存
CJLOOP: LCALL DISPLAY ;調顯示子程序
MOV A,P1 ;讀P1口值
ANL A,#0F0H ;低四位為0
CJNE A,#0F0H,CJLOOP ;高四位為全1(鍵還按著),轉CJLOOP等待釋放
MOV R7,#00H ;鍵釋放,置R7初值為#00H(查表次數)
MOV DPTR,#KEYTAB ;取鍵值表首址
CHEKEYLOOP: MOV A,R7 ;查表次數入A
MOVC A,@A+DPTR ;查表
XRL A,KEYWORD ;查表值與P1口讀入值比較
JZ KEYOK ;為0(相等)轉KEYOK
INC R7 ;不等,查表次數加1
CJNE R7,#10H,CHEKEYLOOP ;查表次數不超過16次轉CHEKEYLOOP再查
RET ;16次到,退出
;
KEYOK: MOV A,R7 ;查表次數入A(即鍵號值)
MOV B,A ;放入B
RL A ;左移
ADD A,B ;相加(鍵號乘3處理JMP 3字節指令)
MOV DPTR,#KEYFUNTAB ;取鍵功能散轉表首址
JMP @A+DPTR ;查表
KEYFUNTAB: LJMP KEYFUN00 ; 鍵功能散轉表。跳至0號鍵功能程序
LJMP KEYFUN01 ; 跳至01號鍵功能程序
LJMP KEYFUN02 ; 跳至02號鍵功能程序
LJMP KEYFUN03
LJMP KEYFUN04
LJMP KEYFUN05
LJMP KEYFUN06
LJMP KEYFUN07
LJMP KEYFUN08
LJMP KEYFUN09
LJMP KEYFUN10
LJMP KEYFUN11
LJMP KEYFUN12
LJMP KEYFUN13
LJMP KEYFUN14
LJMP KEYFUN15 ; 跳至15號鍵功能程序
RET ;散轉出錯返回
;
;鍵號對應P1口數值表(同時按下兩鍵為無效操作)
KEYTAB: DB 0EEH,0DEH,0BEH,7EH,0EDH,0DDH,0BDH,7DH
DB 0EBH,0DBH,0BBH,7BH,0E7H,0D7H,0B7H,77H,0FFH,0FFH
;
;0號鍵功能程序
KEYFUN00: INC 29H ;百位數加1
MOV A,29H ;入A
CLR C ;清進位標志
CJNE A,#02H,FUN00 ;
FUN00: JC FUN00OUT ;百位小于2轉FUNOO0UT
MOV 29H,#00H ;大于等于2清為0(百位只能是0或1)
FUN00OUT: MOV A,29H ; 判斷百位是0還是1
XRL A,#01H ;
JNZ F00OUT1 ;若百位為0轉FOOOUT1
MOV 28H,#00H ;若百位為1,十位為0
AJMP F00OUT ;
F00OUT1: MOV 28H,#08H ;若百位為0,十位數改為8
F00OUT: LCALL DISPUPDAT ;寫入控制芯片(修改發射頻率)
RET ;返回
;
;01號鍵功能程序
KEYFUN01: INC 28H ;十位數加1
MOV A,28H ;入A
CLR C ;清進位標志
CJNE A,#0AH,FUN01 ;判斷是否小于10
FUN01: JC FUN01OUT ;十位數小于10轉FUN01OUT
MOV 28H,#00H ;十位數大于或等于10清為0
FUN01OUT: MOV A,29H ;判斷百位數是0不是1
XRL A,#01H ;
JNZ F01OUT ;
MOV 28H,#00H ;百位數為1時,十位數為0
AJMP F001OUT ;
F01OUT: MOV A,28H ;百 位為0時,十位數只能是8或9
XRL A,#08H ;判斷是不是8
JZ F001OUT ;十位數是8轉F001OUT
MOV A,28H ;
XRL A,#09H ;判斷是不是9
JZ F001OUT ;十位數是9轉F001OUT
MOV 28H,#08H ;不是8也不是9,十位賦值為8
F001OUT: LCALL DISPUPDAT ;寫入控制芯片(修改發射頻率)
RET ;返回
;
;02號鍵功能程序
KEYFUN02: INC 27H ;個位數加1
MOV A,27H ;
CLR C ;
CJNE A,#0AH,FUN02 ;判斷是否小于10
FUN02: JC FUN02OUT ;小于10轉FUN02OUT
MOV 27H,#00H ;大于或等于10清為0
FUN02OUT: LCALL DISPUPDAT ;寫入控制芯片(修改發射頻率)
RET ;
;
;03號鍵功能程序
KEYFUN03: INC 26H ;個位數加1
MOV A,26H ;
CLR C ;
CJNE A,#0AH,FUN03 ;判斷是不小于10
FUN03: JC FUN03OUT ;小于10轉FUN03OUT
MOV 26H,#00H ;大于或等于10清為0
FUN03OUT: LCALL DISPUPDAT ;寫入控制芯片(修改發射頻率)
RET ;返回
;
;04號鍵功能程序(頻率預置鍵)
KEYFUN04: MOV 29H,#01H ; 預置109.0MHZ發射頻率
MOV 28H,#00H
MOV 27H,#09H
MOV 26H,#00H
LCALL DISPUPDAT ;寫入控制芯片(修改發射頻率)
RET
;
;05號鍵功能程序(頻率預置鍵)
KEYFUN05: MOV 29H,#01H ; 預置108.0MHZ發射頻率
MOV 28H,#00H
MOV 27H,#08H
MOV 26H,#00H
LCALL DISPUPDAT ;寫入控制芯片(修改發射頻率)
RET
;
;06號鍵功能程序(頻率預置鍵)
KEYFUN06: MOV 29H,#01H ; 預置105.0MHZ發射頻率
MOV 28H,#00H
MOV 27H,#05H
MOV 26H,#00H
LCALL DISPUPDAT ;寫入控制芯片(修改發射頻率)
RET
;
;07號鍵功能程序(頻率預置鍵)
KEYFUN07: MOV 29H,#01H ; 預置100.0MHZ發射頻率
MOV 28H,#00H
MOV 27H,#00H
MOV 26H,#00H
LCALL DISPUPDAT ;寫入控制芯片(修改發射頻率)
RET
;
;08號鍵功能程序(頻率預置鍵)
KEYFUN08: MOV 29H,#00H ; 預置98.0MHZ發射頻率
MOV 28H,#09H
MOV 27H,#08H
MOV 26H,#00H
LCALL DISPUPDAT ;寫入控制芯片(修改發射頻率)
RET
;
;09號鍵功能程序(頻率預置鍵)
KEYFUN09: MOV 29H,#00H ; 預置96.0MHZ發射頻率
MOV 28H,#09H
MOV 27H,#06H
MOV 26H,#00H
LCALL DISPUPDAT ;寫入控制芯片(修改發射頻率)
RET
;
;10號鍵功能程序(頻率預置鍵)
KEYFUN10: MOV 29H,#00H ; 預置94.0MHZ發射頻率
MOV 28H,#09H
MOV 27H,#04H
MOV 26H,#00H
LCALL DISPUPDAT ;寫入控制芯片(修改發射頻率)
RET
;
;11號鍵功能程序(頻率預置鍵)
KEYFUN11: MOV 29H,#00H ; 預置92.0MHZ發射頻率
MOV 28H,#09H
MOV 27H,#02H
MOV 26H,#00H
LCALL DISPUPDAT ;寫入控制芯片(修改發射頻率)
RET
;
;12號鍵功能程序(頻率預置鍵)
KEYFUN12: MOV 29H,#00H ; 預置90.0MHZ發射頻率
MOV 28H,#09H
MOV 27H,#00H
MOV 26H,#00H
LCALL DISPUPDAT ;寫入控制芯片(修改發射頻率)
RET
;
;13號鍵功能程序(頻率預置鍵)
KEYFUN13: MOV 29H,#00H ; 預置88.0MHZ發射頻率
MOV 28H,#08H
MOV 27H,#08H
MOV 26H,#00H
LCALL DISPUPDAT ;寫入控制芯片(修改發射頻率)
RET
;
;14號鍵功能程序(頻率預置鍵) ; 預置87.0MHZ發射頻率
KEYFUN14: MOV 29H,#00H
MOV 28H,#08H
MOV 27H,#07H
MOV 26H,#08H
LCALL DISPUPDAT ;寫入控制芯片(修改發射頻率)
RET
;
;15號鍵功能程序(立體聲/單聲道設置鍵)
KEYFUN15: CPL 03H ;立體/單聲標志取反
JNB 03H,MONO ;為0轉單聲道MONO
CLR P3.3 ;為1開立體聲指示燈
LCALL PUTBIT ;發送控制字至BH1415
RET ;返回
MONO: SETB P3.3 ;關立體聲指示燈
LCALL PUTBIT ;發控制字至BH1415
RET ;返回
;
; 將BCD碼轉為十六進制數,與5位控制碼合成操作碼,寫入控制芯片
DISPUPDAT: LCALL BCDB ; 調BCD碼轉為十六進制數程序
LCALL CONCOMMAND ; 調與5位控制碼合成操作碼程序
LCALL PUTBIT ; 發控制字至BH1415
RET ;返回
;
; 將BCD碼轉為十六進制數程序
BCDB: MOV CONBITL,#00H ; 控制字清0
MOV CONBITH,#00H ; 控制字清0
MOV CONBITL,26H ;小數位數放入控制字低8位
MOV A,27H ;個位數乘10操作
MOV B,#10 ;
LCALL MULLOOP ;調乘法子程序
MOV A,28H ;十位數乘100操作
MOV B,#100 ;
LCALL MULLOOP ; 調乘法子程序
MOV A,29H ;
JNZ ADD3E8 ;百位數為1轉ADD3E8(加1000操作)
RET ; 百位數為0退出
ADD3E8: CLR C ;清進位檔標志
MOV A,#0E8H ;低8位加法
ADD A,CONBITL ;累加
MOV CONBITL,A ;放回CONBITL
MOV A,#03H ; 高8位加法
ADDC A,CONBITH ;控制字高8位處理
MOV CONBITH,A ;放回CONBITH
RET ;返回
;
;乘法及累加處理程序(將四位顯示的十進制BCD碼轉為1個二進制數)
MULLOOP: MUL AB ;乘法
CLR C ;清進位標志
ADD A,CONBITL ;積低8位與CONBITL相加
MOV CONBITL,A ;放回CONBITL
MOV A,CONBITH ;
ADDC A,B ;積高8位與CONBITH帶進位累加
MOV CONBITH,A ;放回CONBITH
RET ;返回
;
;頻率控制數據與5位控制碼合成BH1415控制字
CONCOMMAND: ANL CONBITH,#07H ;高四位為0
MOV A,20H ;控制字放入A
ORL A,CONBITH ;合成控制字
MOV CONBITH,A ;放回CONBITH
RET ;返回
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 顯示程序 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;共陽LED顯示,P0口輸出段碼,P2口輸出掃描字
DISPLAY: MOV R1,#26H ;顯示首址
MOV R5,#0FEH ;設掃描字
PLAY: MOV A,R5 ;放入A
MOV P2,A ;P2口輸出
MOV A,@R1 ;取顯示數據
MOV DPTR,#TAB ;取段碼表首址
MOVC A,@A+DPTR ;查段碼
MOV P0,A ;從P0輸出
MOV A,R5 ;讀入掃描字
JB ACC.1,PLAY1 ; 不是十位(LED),不顯示小數點
CLR P0.7 ;是十位,顯示小數點
PLAY1: LCALL DL1MS ;點亮1毫秒
INC R1 ;指向下一顯示數據
JNB ACC.3,ENDOUT ;是第四位LED,退出
RL A ;不是,左移一位
MOV R5,A ;放回R5
SETB P0.7 ;關小數點
AJMP PLAY ;轉PLAY循環
ENDOUT: MOV P2,#0FFH ;顯示結束,關顯示輸出口
MOV P0,#0FFH ;
RET ;返回
;
;0-9共陽段碼表
TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH,0FFH
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 發送控制字節子程序 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
PUTBIT: MOV A,CONBITL ;低8位控制字入A
SETB P3.2 ;BH1415使能(允許寫)
LCALL PUT ;發送8位
MOV A,CONBITH ; 高8位控制字入A
LCALL PUT ; 發送8位
CLR P3.2 ; BH1415寫禁止
CLR P3.0 ;復位
CLR P3.1 ;復位
RET ;返回
;
;字節發送子程序
PUT: MOV R3,#8 ;發送8位控制
CLR C ;清C
PUT1: RRC A ;帶進位位右移(先發低位)
MOV P3.0,C ;低位送至P3.0口
NOP ;延時4微秒
NOP ;
NOP ;
NOP ;
SETB P3.1 ;鎖存數據(上升沿時鎖存數據)
NOP ;延時4微秒
NOP ;
NOP ;
NOP ;
CLR P3.1 ;
DJNZ R3,PUT1 ;8位未發完轉PUT1再發
RET ; 8位發完結束
;
;513微秒延時子程序
DL513: MOV R3,#0FFH
DL513LOOP: DJNZ R3,DL513LOOP
RET
;
;1毫秒延時子程序(LED點亮用)
DL1MS: MOV R4,#02H
DL1MSLOOP: LCALL DL513
DJNZ R4,DL1MSLOOP
RET
;
;10毫秒延時子程序(消抖動用)
DL10MS: MOV R6,#0AH
DL10MSLOOP: LCALL DL1MS
DJNZ R6,DL10MSLOOP
RET
;
;
END ;程序結束
上一篇:DDS技術的數控信號發生器51單片機控制程序
下一篇:四字16*16點陣顯示程序
推薦閱讀
史海拾趣
安路科技(Anlogic)的創立可以追溯到XXXX年,由一群具有深厚技術背景的工程師共同創立。起初,公司規模雖小,但懷揣著在國產FPGA(現場可編程門陣列)領域實現技術突破的夢想。早期,安路科技面臨著資金短缺、市場競爭激烈等挑戰,但團隊憑借著對技術的執著和不懈的努力,逐步研發出了具有競爭力的FPGA產品,并在市場上獲得了一定的認可。
Fascomp公司起源于一間小型的電子產品研發工作室。創始人李明和他的團隊在資金緊張、技術條件有限的情況下,堅持自主研發一款高性能的芯片。經過無數次的失敗和試驗,他們最終成功開發出了一款具有競爭力的芯片,贏得了市場的初步認可。這個過程中,團隊成員的堅持和對技術的執著追求成為了公司后續發展的基石。
隨著客戶需求的多樣化,Cal Test Electronics開始關注小批量定制型測試電纜組件的市場。公司利用自身的技術優勢和生產能力,為客戶提供個性化的定制服務。這些定制產品不僅滿足了客戶的特殊需求,也提高了公司的市場競爭力。通過這一策略,Cal Test Electronics成功打開了一個全新的市場領域,為公司的發展注入了新的動力。
1997年3月,德利威電子股份有限公司正式成立,標志著其進入電子行業的起點。憑借創辦人超過二十年的研發和生產經驗,德利威電子從創立之初就注重產品質量和技術創新。在創立初期,德利威電子即獲得了ISO 9002國際標準認證,顯示出其對品質管理的高度重視。同時,其各系列產品也迅速通過了美國UL及加拿大CSA產品安規認證,進一步證明了其產品的安全性和可靠性。
自創立以來,CAO Group一直致力于牙科材料和器械的研發。公司不斷投入研發資源,成功推出多款具有創新性的牙科產品,如Lumist美白貼、SPRAY BOTTLE HEAD噴霧瓶頭等,這些產品不僅在國內市場獲得了廣泛認可,還成功打入了國際市場。公司的研發實力和產品品質,使其在牙科行業中樹立了良好的口碑。
在ETC領域,速通科技積極尋求與行業內其他企業的合作。公司與多家銀行、保險公司等金融機構建立了合作關系,共同推廣ETC系統的應用。此外,速通科技還積極參與行業標準的制定和修訂工作,推動ETC行業的健康發展。通過與行業內其他企業的合作,速通科技實現了共贏發展,共同推動了ETC行業的進步。
有多篇論文可供參考,PDF格式文件,原文件比較大,9M多,我在10月份上傳時論壇限制附件的大小,分卷壓縮了5卷,下載很不方便。 現在網站調整了附件的大小,可以重新上傳一個完整的文件了,需要朋友一次性就能下載了。 11月28日重新上傳。 ------ ...… 查看全部問答∨ |
|
一、概念 交聯電纜通常是指電纜的絕緣層采用交聯材料。最常用的材料為交聯聚乙烯(XLPE)。交聯工藝過程是將線性分子結構的聚乙烯(PE)材料通過特定的加工方式,使其形成體型網狀分線結構的交聯聚乙烯。使得長期允許工作混充由700C提高到900C(或 ...… 查看全部問答∨ |
海加網絡積極推進物聯網產業化,應邀參加上海物聯網中心產學研合作座談會 文章來源:作者:higughard 發布時間:2010-05-18 2010年4月22日,海加網絡作為企業代表應邀參加在上海嘉定新城發展有限公司召開的上海物聯網中心產學研合作座談會。市經信委、市科委、發改委及各科技企業、高校、科研院所參加了此次會議,會議旨 ...… 查看全部問答∨ |
我發現在2410init.s中的“拷貝nand中內容到SDRAM”的這個代碼是有問題的。理由如下: 我們知道nand中存在壞塊的,但是第一個block肯定是好塊,這個可以確認。 如果我我燒錄的bin文件是低于steppingstone 4KB大小,那么 ...… 查看全部問答∨ |
|
各位大蝦, 我現在在做usb host端程序,處理的設備有兩種配置,1。U盤,2,hid+audio, 現在默認配置是u盤功能,現在我想要在設備插入時,枚舉過程中,選擇配置2,hid+audio, 該怎樣的命令流程,希望大蝦們能指點一下,謝謝! PS:現在固定的枚舉 ...… 查看全部問答∨ |
WinCE的對話框畫一張位圖作為背景,在畫背景的那會會導致子控件的位置變成白色的問題?? void CTestPmpButtonDlg::OnPaint() { CPaintDC dc(this); // device context for painting RedrawPmpDialog(dc.m_hDC); ...… 查看全部問答∨ |
不知道有沒有朋友在研究VirutalWiFi的,我有關于緩沖區部分的問題想請教。 // Send Buffer Data Structures, one for each SSID QUEUE_HEADER Send ...… 查看全部問答∨ |
有那位高手有Matlab中小波去噪在TI tms320f2808中C的代碼! wden(data,\'heursure\',\'s\',\'one\',2,\'sym8\')… 查看全部問答∨ |