源程序:
;********************************************************************************
;* 標(biāo)題: 偉納電子ME300B 單片機(jī) 開發(fā)系統(tǒng)演示程序 - 12864LCD顯示遙控鍵值讀取器 *
; *
;********************************************************************************
;* 描述: *
;* 12864LCD(帶漢字庫)顯示遙控鍵值讀取器 *
;* LCD型號:TS12864A-3(帶漢字庫)或兼容型號 控制器ST7920 *
;* MCU:AT89S52 ,晶體頻率:11.0592MHz *
;* P0口為128*64LCD的數(shù)據(jù) D0-D7 *
;* K17鍵按下,繼電器吸合。K19鍵按下,繼電器關(guān)閉 *
;* 顯示程序在中斷服務(wù)程序之中 * *
;********************************************************************************
;* 【版權(quán)】 Copyright(C)偉納電子 www.willar.com All Rights Reserved *
;* 【聲明】 此程序僅用于學(xué)習(xí)與參考,引用請注明版權(quán)和作者信息! *
;********************************************************************************
IRCOM EQU 20H ;20H-23H IR使用
X EQU 26H ;LCD 地址變量
IRIN EQU P3.2
BEEP EQU P3.7
RELAY EQU P1.3
RS EQU P2.0
RW EQU P2.1
EN EQU P2.2
PSB EQU P2.3
RST EQU P2.5
;------------------------------------------------
ORG 0000H
JMP MAIN
ORG 0003H ;外部中斷INT0入口地址
JMP IR_IN ;中斷服務(wù)程序
;------------------------------------------------
MAIN:
MOV SP,#40H
MOV A,#00H
MOV R0,#20H
LOOP0: MOV @R0,A ;20H-26H清零
INC R0
CJNE R0,#27H,LOOP0
MOV IE,#81H ;允許總中斷中斷,使能 INT0 外部中斷
MOV TCON,#01H ;觸發(fā)方式為脈沖負(fù)邊沿觸發(fā)
SETB IRIN
SETB RST
NOP
SETB PSB ;8位數(shù)據(jù),并口
CALL SET_LCD ;初始化TS12864A-3
CALL MENU1
CALL MENU2
CALL MENU3
CALL MENU4
LOOP1:
MOV A,22H
CJNE A,#40H,LOOP2 ;K17鍵按下
CLR RELAY ;繼電器吸合
LOOP2: CJNE A,#04H,LOOP3 ;K19鍵按下
SETB RELAY ;繼電器關(guān)閉
LOOP3: JMP LOOP1
;=============================================
; LCD 初始化設(shè)置
;=============================================-
SET_LCD:
CLR EN
MOV A,#34H ;34H--擴(kuò)充指令操作
CALL WCOM
CALL DELAY1
MOV A,#30H ;30H--基本指令操作
CALL WCOM
CALL DELAY1
MOV A,#0CH ;開顯示,關(guān)光標(biāo),
CALL WCOM
CALL DELAY1
MOV A,#01H ;清除 LCM 顯示屏
CALL WCOM
CALL DELAY1
RET
;===================================================
;在 LCM 各行顯示信息字符
;===================================================
LCD_SHOW:
CJNE A,#1,LINE2 ;判斷是否為第一行
LINE1: MOV A,#80H ;設(shè)置 LCD 的第一行地址
CALL WCOM ;寫入命令
CALL CLR_LINE ;清除該行字符數(shù)據(jù)
MOV A,#80H ;設(shè)置 LCD 的第一行地址
CALL WCOM ;寫入命令
JMP FILL
LINE2: CJNE A,#2,LINE3 ;判斷是否為第三行
MOV A,#090H ;設(shè)置 LCD 的第三行地址
CALL WCOM ;寫入命令
CALL CLR_LINE ;清除該行字符數(shù)據(jù)
MOV A,#090H ;設(shè)置 LCD 的第三行地址
CALL WCOM
JMP FILL
LINE3: CJNE A,#3,LINE4 ;判斷是否為第三行
MOV A,#088H ;設(shè)置 LCD 的第三行地址
CALL WCOM ;寫入命令
CALL CLR_LINE ;清除該行字符數(shù)據(jù)
MOV A,#088H ;設(shè)置 LCD 的第三行地址
CALL WCOM
JMP FILL
LINE4: CJNE A,#4,LINE5 ;判斷是否為第三行
MOV A,#098H ;設(shè)置 LCD 的第三行地址
CALL WCOM ;寫入命令
CALL CLR_LINE ;清除該行字符數(shù)據(jù)
MOV A,#098H ;設(shè)置 LCD 的第三行地址
CALL WCOM
FILL: CLR A ;填入字符
MOVC A,@A+DPTR ;由消息區(qū)取出字符
CJNE A,#0,LC1 ;判斷是否為結(jié)束碼
LINE5: RET
LC1: CALL WDATA ;寫入數(shù)據(jù)
INC DPTR ;指針加1
JMP FILL ;繼續(xù)填入字符
RET
;=================================================
;清除該行 LCM 的字符
;=================================================
CLR_LINE:
MOV R0,#16 ;
CL1: MOV A,#' '
CALL WDATA
DJNZ R0,CL1
RET
;==================================================
;LCM 顯示工作菜單信息
;==================================================
MENU1:
MOV DPTR,#MENU1A
MOV A,#1 ;在第一行顯示信息
CALL LCD_SHOW
RET
MENU1A: DB "紅外遙控碼讀取器",0
MENU2:
MOV DPTR,#MENU2A
MOV A,#2 ;在第二行顯示信息
CALL LCD_SHOW
RET
MENU2A: DB "--www.willar.com",0
MENU3:
MOV DPTR,#MENU3A
MOV A,#3 ;在第三行顯示信息
CALL LCD_SHOW
RET
MENU3A: DB "鍵值編碼:- - H",0
MENU4:
MOV DPTR,#MENU4A
MOV A,#4 ;在第四行顯示信息
CALL LCD_SHOW
RET
MENU4A: DB "鍵值反碼:- - H",0
;==============================================
; 寫指令使能子程序
;RS=L,RW=L,D0-D7=指令碼,E=高脈沖
;==============================================
WCOM:
MOV P0,A
CLR RS
CLR RW
SETB EN
CALL DELAY0
CLR EN
RET
;=============================================
;寫數(shù)據(jù)使能子程序
;RS=H,RW=L,D0-D7=數(shù)據(jù),E=高脈沖
;=============================================
WDATA:
MOV P0,A
SETB RS
CLR RW
SETB EN
CALL DELAY0
CLR EN
RET
DELAY0: MOV R7,#250 ;延時500微秒
DJNZ R7,$
RET
;===============================================
;在 LCM 第三行、第四行顯示字符
;A=ASC DATA, B=LINE X POS
;===============================================
LCDP3: ;在LCD的第三行顯示字符
PUSH ACC ;
MOV A,B ;設(shè)置顯示地址
ADD A,#088H ;設(shè)置LCD的第三行地址
CALL WCOM ;寫入命令
POP ACC ;由堆棧取出A
CALL WDATA ;寫入數(shù)據(jù)
RET
LCDP4: ;在LCD的第四行顯示字符
PUSH ACC ;
MOV A,B ;設(shè)置顯示地址
ADD A,#098H ;設(shè)置LCD的第四行地址
CALL WCOM ;寫入命令
POP ACC ;由堆棧取出A
CALL WDATA ;寫入數(shù)據(jù)
RET
;=================================================
; IR 譯碼子程序
;中斷服務(wù)程序
;=================================================
IR_IN:
CLR EA ;暫時關(guān)閉CPU的所有中斷請求
PUSH ACC
PUSH PSW
SETB PSW.3 ;選擇工作寄存器組1
CLR PSW.4
MOV R0,#IRCOM
MOV R1,#04H
I1: JNB IRIN,I2 ;等待 IR 信號出現(xiàn)
LCALL CONV
DJNZ R1,I1
JMP IR_OUT
I2: MOV R4,#20
I20: CALL DEL
DJNZ R4,I20
JB IRIN,I1 ;確認(rèn)IR信號出現(xiàn)
I21: JB IRIN,I3 ;等 IR 變?yōu)?a href="http://m.weightgang.cn/zhuanti/qbnP0C" style="color:#4595e6;" target="_blank">高電平
CALL DEL
JMP I21
I3: MOV R3,#0 ;8位數(shù)清為0
LL: JNB IRIN,I4 ;等 IR 變?yōu)?a href="http://m.weightgang.cn/zhuanti/qXzvTS" style="color:#4595e6;" target="_blank">低電平
CALL DEL
JMP LL
I4: JB IRIN,I5 ;等 IR 變?yōu)楦唠娖?br/> CALL DEL
JMP I4
I5: MOV R2,#0 ;0.14ms 計數(shù)
L1: CALL DEL
JB IRIN, N1 ;等 IR 變?yōu)楦唠娖?br/> ;IR=0,檢查R2中的計數(shù)值
MOV A,#8
CLR C
SUBB A,R2 ;判斷高低位
;IF C=0 BIT=0
MOV A,@R0
RRC A
MOV @R0,A ;處理完一位
INC R3
CJNE R3,#8,LL ;需處理完8位
MOV R3,#0
INC R0
CJNE R0,#24H,LL ;收集到4字節(jié)了
JMP IR_SHOW
N1: INC R2
CJNE R2,#30,L1 ;0.14ms 計數(shù)過長則時間到自動離開
IR_OUT: POP PSW
POP ACC
SETB EA
RETI
;------------------------------------------------------------------
IR_SHOW:
MOV A,22H
CPL A ;將22H取反后和23H比較
CJNE A,23H,IR_SHOW1 ;如果不等表示接收數(shù)據(jù)發(fā)生錯誤,放棄。
CALL CONV
CALL BEEP_BL ;蜂鳴器鳴響表示解碼成功
IR_SHOW1:
JMP IR_OUT
;===============================================
;編碼轉(zhuǎn)換為 ASCII 碼并顯示
;===============================================
CONV:
MOV X,#5 ;設(shè)置顯示起始位置
MOV A,22H
ANL A,#0F0H ;取出高四位二進(jìn)制數(shù)
SWAP A ;高四位與低四位互換
PUSH ACC ;壓入堆棧
CLR C ;C=0
SUBB A,#0AH ;減10
POP ACC ;彈出堆棧
JC ASCII0 ;該數(shù)小于10,轉(zhuǎn)ASCII0
ADD A,#07H ;大于10的數(shù)加上37H
ASCII0: ADD A,#30H ;小于10的數(shù)加上30H
MOV B,X
CALL LCDP3
MOV A,22H
ANL A,#0FH ;取出低四位二進(jìn)制數(shù)
PUSH ACC
CLR C
SUBB A,#0AH ;減10
POP ACC
JC ASCII1 ;該數(shù)小于10,轉(zhuǎn)ASCII0
ADD A,#07H ;大于10的數(shù)加上37H
ASCII1: ADD A,#30H ;小于10的數(shù)加上30H
INC X
MOV B,X
CALL LCDP3
MOV X,#5 ;設(shè)置顯示起始位置
MOV A,23H ;反碼
ANL A,#0F0H ;取出高四位二進(jìn)制數(shù)
SWAP A ;高四位與低四位互換
PUSH ACC ;壓入堆棧
CLR C ;C=0
SUBB A,#0AH ;減10
POP ACC ;彈出堆棧
JC ASCII2 ;該數(shù)小于10,轉(zhuǎn)ASCII0
ADD A,#07H ;大于10的數(shù)加上37H
ASCII2: ADD A,#30H ;小于10的數(shù)加上30H
MOV B,X
CALL LCDP4
MOV A,23H
ANL A,#0FH ;取出低四位二進(jìn)制數(shù)
PUSH ACC
CLR C
SUBB A,#0AH ;減10
POP ACC
JC ASCII3 ;該數(shù)小于10,轉(zhuǎn)ASCII0
ADD A,#07H ;大于10的數(shù)加上37H
ASCII3: ADD A,#30H ;小于10的數(shù)加上30H
INC X
MOV B,X
CALL LCDP4
RET
;===================================================
;蜂鳴器響一聲子程序
;===================================================
BEEP_BL:
MOV R6,#100
BL1: CALL DEX1
CPL BEEP
DJNZ R6,BL1
MOV R5,#25
CALL DELAY
RET
DEX1: MOV R7,#180
DEX2: NOP
DJNZ R7,DEX2
RET
DELAY: ;延時R5×10MS
MOV R6,#50
D1: MOV R7,#100
DJNZ R7,$
DJNZ R6,D1
DJNZ R5,DELAY
RET
;===============================================
; DELAY R5*0.14MS
DEL:
MOV R5,#1 ;IR解碼使用
DEL0: MOV R6,#2
DEL1: MOV R7,#32
DEL2: DJNZ R7,DEL2
DJNZ R6,DEL1
DJNZ R5,DEL0
RET
DELAY1: ;延時5MS
MOV R6,#25
DL2: MOV R7,#100
DJNZ R7,$
DJNZ R6,DL2
RET
;================================================
END
上一篇:89S51看門狗功能的使用方法如下
下一篇:4×4矩陣鍵盤C語言程序參考
推薦閱讀
史海拾趣
Ercona Corp在電子行業(yè)中的發(fā)展故事之一:技術(shù)突破與市場布局
Ercona Corp是一家在電子行業(yè)中迅速崛起的公司,其發(fā)展歷程中不乏技術(shù)突破與市場布局的故事。在成立初期,Ercona就致力于半導(dǎo)體技術(shù)的研發(fā),成功開發(fā)出一種高性能、低功耗的芯片,這一技術(shù)突破為公司在市場上贏得了良好的聲譽(yù)。隨后,Ercona利用這一技術(shù)優(yōu)勢,積極拓展市場,與多家知名電子產(chǎn)品制造商建立了合作關(guān)系,其芯片產(chǎn)品被廣泛應(yīng)用于智能手機(jī)、平板電腦等消費(fèi)電子產(chǎn)品中。
Ercona Corp在電子行業(yè)中的發(fā)展故事之二:國際合作與品牌提升
在全球化的大背景下,Ercona積極尋求國際合作,與國際知名半導(dǎo)體公司達(dá)成戰(zhàn)略合作,共同研發(fā)新產(chǎn)品。這一舉措不僅提升了Ercona的技術(shù)實力,也擴(kuò)大了其品牌影響力。通過與合作伙伴的共同努力,Ercona成功推出了一系列具有國際競爭力的電子產(chǎn)品,進(jìn)一步鞏固了其在市場中的地位。
Ercona Corp在電子行業(yè)中的發(fā)展故事之三:創(chuàng)新驅(qū)動與產(chǎn)品多元化
創(chuàng)新是Ercona持續(xù)發(fā)展的核心動力。公司不斷投入研發(fā)資金,推動產(chǎn)品創(chuàng)新,逐步實現(xiàn)產(chǎn)品多元化。除了傳統(tǒng)的半導(dǎo)體芯片外,Ercona還涉足了物聯(lián)網(wǎng)、智能家居等新興領(lǐng)域,推出了一系列具有創(chuàng)新性的電子產(chǎn)品。這些新產(chǎn)品的推出不僅豐富了公司的產(chǎn)品線,也為公司帶來了新的增長點(diǎn)。
Ercona Corp在電子行業(yè)中的發(fā)展故事之四:人才戰(zhàn)略與團(tuán)隊建設(shè)
人才是企業(yè)發(fā)展的重要保障。Ercona深知這一點(diǎn),因此在發(fā)展過程中始終重視人才戰(zhàn)略和團(tuán)隊建設(shè)。公司積極引進(jìn)優(yōu)秀人才,建立了一支高素質(zhì)的研發(fā)團(tuán)隊。同時,Ercona還注重員工的培養(yǎng)和發(fā)展,為員工提供廣闊的成長空間和發(fā)展機(jī)會。這些措施為公司的持續(xù)發(fā)展提供了堅實的人才保障。
Ercona Corp在電子行業(yè)中的發(fā)展故事之五:社會責(zé)任與可持續(xù)發(fā)展
作為一家有社會責(zé)任感的企業(yè),Ercona在發(fā)展過程中始終關(guān)注環(huán)境保護(hù)和社會公益。公司積極推行綠色生產(chǎn),采用環(huán)保材料和節(jié)能技術(shù),減少生產(chǎn)過程中的污染排放。同時,Ercona還積極參與社會公益活動,關(guān)注弱勢群體,為構(gòu)建和諧社會貢獻(xiàn)自己的力量。這些舉措展現(xiàn)了公司的良好形象和社會責(zé)任感,也為公司的可持續(xù)發(fā)展奠定了基礎(chǔ)。
為了進(jìn)一步提升競爭力,C&H Technology積極尋求與其他企業(yè)的戰(zhàn)略合作。公司與一家知名的手機(jī)制造商簽訂了長期合作協(xié)議,共同開發(fā)定制化芯片解決方案。同時,C&H Technology還與一家領(lǐng)先的半導(dǎo)體生產(chǎn)企業(yè)建立了戰(zhàn)略聯(lián)盟,共同研發(fā)新型半導(dǎo)體材料和生產(chǎn)工藝。這些戰(zhàn)略合作不僅為公司帶來了更多的商業(yè)機(jī)會,也提升了公司的技術(shù)水平和品牌影響力。
為了進(jìn)一步提升網(wǎng)絡(luò)性能和用戶體驗,Helium團(tuán)隊自主編譯并開源了LongFi協(xié)議。這一協(xié)議能夠?qū)⑽锫?lián)網(wǎng)主流LoRaWAN無線協(xié)議應(yīng)用到Helium區(qū)塊鏈應(yīng)用層,實現(xiàn)了物聯(lián)網(wǎng)與區(qū)塊鏈的深度融合。LongFi協(xié)議的推出不僅提高了數(shù)據(jù)傳輸?shù)男屎头€(wěn)定性,還降低了物聯(lián)網(wǎng)設(shè)備的能耗和成本。這一技術(shù)創(chuàng)新為Helium贏得了更多用戶和合作伙伴的信任和支持,推動了其業(yè)務(wù)的持續(xù)發(fā)展。
Electroswitch Electronics Products(以下簡稱“Electroswitch”)成立于1986年,是Electro Switch Corp的一個子公司,后者早在1946年就已創(chuàng)立。在創(chuàng)立之初,Electroswitch就致力于設(shè)計和制造高品質(zhì)的開關(guān)產(chǎn)品,以滿足電子應(yīng)用領(lǐng)域的各種需求。通過不斷的技術(shù)創(chuàng)新和產(chǎn)品優(yōu)化,Electroswitch逐漸在電子行業(yè)中樹立了良好的聲譽(yù)。
隨著國內(nèi)市場的飽和,Cressall開始將目光投向國際市場。公司積極參與國際電子行業(yè)的展會和交流活動,與國際同行建立了廣泛的聯(lián)系。通過與國外企業(yè)的合作,Cressall不僅引進(jìn)了先進(jìn)的技術(shù)和管理經(jīng)驗,還成功打開了多個海外市場。同時,公司還加強(qiáng)了與國際知名企業(yè)的戰(zhàn)略合作,共同開發(fā)新產(chǎn)品,進(jìn)一步提升了公司的國際競爭力。
ABCircuits公司始終堅信人才是企業(yè)發(fā)展的核心動力。因此,公司在人才招聘和培養(yǎng)方面投入了大量資源。通過與高校和研究機(jī)構(gòu)的合作,ABCircuits吸引了一批批優(yōu)秀的科研人才加入公司。同時,公司還建立了完善的培訓(xùn)體系,為員工提供持續(xù)的學(xué)習(xí)和成長機(jī)會。這些人才為公司帶來了源源不斷的創(chuàng)新動力,推動了公司的快速發(fā)展。
EEWORLD每月社區(qū)人物評選標(biāo)準(zhǔn) 為了感謝常年活躍于壇子,孜孜不倦,默默分享的老牛們(論壇牛人):D ,以及鼓勵新加入壇子的小牛們,每月EEWORLD都會對一個月來網(wǎng)友們的發(fā)帖數(shù)及發(fā)帖質(zhì)量等做一個統(tǒng)計,評選出每月的社區(qū)人物。同時還有“博客之星”的評選,所以經(jīng)營好自己的博客也 ...… 查看全部問答∨ |
|
我現(xiàn)在有個新茂的SM5964C40P 0909C N11952CMN 型單片機(jī),由于不想編程,想直接把里面的程序燒出來,那位大俠能告訴我這個型號的能燒出來嗎,… 查看全部問答∨ |
我的程序也能編譯鏈接都沒有問題,就是在運(yùn)行時總是無法進(jìn)入中斷函數(shù)中。我覺得應(yīng)該是中斷向量表的問題,導(dǎo)致程序始終無法進(jìn)入中斷。一般程序都是燒到0x30000000地址下,而中斷一般都是跳到0x0處,它怎么進(jìn)入中斷處理函數(shù)呢? 哪位能幫幫我,不勝 ...… 查看全部問答∨ |
【散分】:昨天、今天跑通了51+12864液晶字符、圖形顯示程序! 液晶型號CA12864A(帶字庫,7920控制器),C51單片機(jī)。程序C、ASM的都有。兩個早上,所有問題迎刃而解,高興中!… 查看全部問答∨ |
實現(xiàn)第二步: 自己DIY一個廉價的C8051編程器并成功讀寫濕度計開發(fā)板 昨天用洞洞板按照我前面帖子提供的圖紙焊接出一個并口C8051編程器。 今天一早插到PC機(jī)上,運(yùn)行編程器文件(前面帖子附件可下載), 點(diǎn)連接馬上識別出MCU的型號: 試著操作一下,十分順利,反應(yīng)速度快 ...… 查看全部問答∨ |
本帖最后由 dontium 于 2015-1-23 11:38 編輯 德州儀器針對現(xiàn)今的LED設(shè)計需求提供了最廣闊的高性能產(chǎn)品組合??匆幌耇I不同型號LED驅(qū)動器的特點(diǎn)、應(yīng)用和設(shè)計方案吧。 … 查看全部問答∨ |
運(yùn)用EPWM1-3輸出六路三項晶閘管觸發(fā)脈沖的問題 本人不知道如何設(shè)置PWM模塊的值,跪求給出設(shè)置程序?以下是我完成的部分程序,請高手指點(diǎn)迷津 void InitEPwm1Example() { // Setup TBCLK EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; // Count up &nbs ...… 查看全部問答∨ |
盡管現(xiàn)在的EDA工具很強(qiáng)大,但隨著PCB尺寸要求越來越小,器件密度越來越高,PCB設(shè)計的難度并不小。如何實現(xiàn)PCB高的布通率以及縮短PCB設(shè)計時間呢?本文介紹PCB規(guī)劃、布局和布線的PCB設(shè)計技巧和要點(diǎn)。 現(xiàn)在PCB設(shè)計的時間越來越短,越來越小的電路 ...… 查看全部問答∨ |
設(shè)計資源 培訓(xùn) 開發(fā)板 精華推薦
- 如何對電機(jī)進(jìn)行高效分析
- CAN總線到底要不要加共模電感?
- Elastic擴(kuò)大與阿里云的合作伙伴關(guān)系
- 恩智浦中國汽車電子應(yīng)用開發(fā)中心在重慶舉辦開業(yè)典禮
- Strategy Analytics:全球聯(lián)網(wǎng)電視設(shè)備使用量突破十億臺
- 智能音箱呈現(xiàn)哪四大趨勢?
- 國產(chǎn)工業(yè)機(jī)器人為何趕不上“四大家族”?
- 【盤點(diǎn)】工業(yè)機(jī)器人與數(shù)控機(jī)床集成四大應(yīng)用
- 為什么大疆在美國的技術(shù)封鎖下 還能做到消費(fèi)級無人機(jī)領(lǐng)域的第一?
- “得AI者得天下”,巨頭們都準(zhǔn)備好了嗎?