微算機原理及應用(I)_林淵翔_單元三8051的組合語言程式設計_PART A_組合語言的格式、 ... 林淵翔_單元五8051的輸入與輸出埠控制_PART E_範例二:七段顯示器控制實驗. ... <看更多>
8051七段顯示器組合語言 在 微處理機系統實驗 - GitHub 的推薦與評價
這堂課使用的微處理機為8051,使用的語言主要為8051 的組合語言,但有些班也可能 ... 或者是LED 燈、七段顯示器、點矩陣顯示器的輸出,控制馬達、蜂鳴器,甚至是 ... ... <看更多>
8051七段顯示器組合語言 在 請問什麼是8051呀?? (第3頁) - Mobile01 的推薦與評價
現在要求機器效率的專案還是會用組語開發8051. ... 唯一的共通就是光用C是一定不夠的, 想用好51最終都還是要熟練組語. ... MOV P1,A ;ACC丟給PORT1七段顯示器顯示A ... <看更多>
8051七段顯示器組合語言 在 [問題] 8051組合語言語法- 看板ASM - 批踢踢實業坊 的推薦與評價
板上的高手們能幫小弟我看一下寫的東西
小弟我剛接觸8051,所以概念可能不太好,希望能不吝於指教
內容:利用指撥開關 四個單鍵與文字形LCD來設計簡單的計算機,其中乘法以連加表示,除
法已連減表示
指撥開關輸入a值與b值
模式鍵:乘除法轉換
出題鍵:在LCD上顯示出乘法或除法算式 ex:a*b或a/b
解答鍵:每計算一次顯示一次
清除鍵:全部清除
問題:跑的出東西但只能控制a值跟部分的單鍵功能
我想可能是我有邏輯的錯誤
但自己寫的東西不容易找出來,希望高手能給我一些指點
如果問題很大的話,那我在砍掉重練
感謝你們
板大如果這篇不允許的話,我在自D吧!
以下為程式碼
;模式鍵P1.3 出題鍵P1.4 解答鍵P1.5 清除鍵P1.6 指撥開關P2
E REG P1.2
RS REG P1.0
RW REG P1.1
;**********************************主程式********************************
;初始設定
SETTING:
MOV R0,#0 ;被乘數 被除數
MOV R1,#0 ;乘數 除數
MOV R2,#0 ;
MOV R3,#0 ;
MOV R4,#0 ;
MOV A,#0 ;
;出題鍵P1.4
START:
JB P1.4,$ ;判斷出題鍵是否按下
;指撥題目顯示於LCD
SHOWQUESTION:
MOV DPTR,#DATA
MOV A,P2
CPL A ;取A的補數=1
ANL A,#0F0H
SWAP A ;高低四位元互換
MOV R0,A
ANL A,#0OFH
MOV R1,A
ACALL LCDFIRST ;顯示於LCD第一行
MOV A,R0 ;顯示被乘數 被除數
ACALL LOOP
ACALL DIVMODE ;顯示乘 除
ACALL LOOP
MOV A,R1 ;顯示乘數 除數
ACALL LOOP
MOV A,#18 ;顯示 =
ACALL LOOP
MOV A,#19 ;顯示 ?
ACALL LOOP
ACALL LCDSECOND ;換至LCD第二行
ACALL ANSWER
;解答鍵P1.5
ANSWER:
JB P1.5,$
MOV A,R0
MOV B,R1
DIV AB
MOV R4,A
INC R4
JNB P1.3,DIV0
MUL0:
CLR A
ACALL LOOP
ACALL SDATA
MUL1:
MOV A,R0
JZ CLEAR
MOV A,R1
JZ CLEAR
MUL2:
ACALL LCDSECOND
MOV A,R3
ADD A,R0
MOV R3,A
ANL A,#11110000B
SWAP A
ACALL LOOP
MOV A,R3
ANL A,#00001111B
ACALL LOOP
DJNZ R1,MUL2
ACALL DELAY5MS
AJMP CLEAR
DIV0:
MOV A,R1
JZ ERROR
DIV1:
MOV A,R3
ACALL LOOP
ACALL DOT
MOV A,R0
ACALL LOOP
MOV A,R0
SUBB A,R1
MOV R0,A
ACALL LCDSECOND
INC R3
DJNZ R4,DIV1
ACALL DELAY5MS
AJMP CLEAR
ERROR:
ACALL LCDSECOND
MOV A,#14
ACALL LOOP
MOV A,#22
ACALL LOOP
MOV A,#22
ACALL LOOP
MOV A,#21
ACALL LOOP
MOV A,#22
ACALL LOOP
AJMP CLEAR
;清除鍵P1.6
CLEAR:
JB P1.6,$ ;判斷是否有按
MOV A,#1 ;清除全螢幕
ACALL COMMAND
AJMP SETTING
END
;***********************************以下為副程式******************************
;模式鍵P1.3
DIVMODE:
JB P1.3,MULMODE
MOV A,#16 ;除號
RET
MULMODE:
MOV A,#17 ;乘號
RET
DOT:
MOV A,#20
MOVC A,@A+DPTR
ACALL SDATA
ACALL SDATA
ACALL SDATA
RET
;顯示LCD第一行
LCDFIRST:
MOV A,#10000000B
ACALL COMMAND
RET
;顯示LCD第二行
LCDSECOND:
MOV A,#11000000B
ACALL COMMAND
RET
;從DATA讀取後寫入
LOOP:
MOVC A,@A+DPTR
ACALL SDATA
RET
;LCD顯示重複寫入
COMMAND:
MOV P0,A
SETB E
CLR RW
CLR RS
CLR E
ACALL DELAY2MS
RET
;LCD顯示不重複寫入
SDATA:
MOV P0,A
SETB E
CLR RW
SETB RS
CLR E
RET
;延遲副程式
DELAY5MS:
ACALL DELAY1MS
ACALL DELAY2MS
ACALL DELAY2MS
RET
DELAY2MS:
ACALL DELAY1MS
ACALL DELAY1MS
RET
include delay.inc
DATA:
DB "0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"
DB "/","*","=","?",".","O","R"
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.143.64.76
... <看更多>