標題: 4X4鍵盤設計的計算器匯編語言 [打印本頁]
作者: LEKI 時間: 2018-5-30 11:10
標題: 4X4鍵盤設計的計算器匯編語言
ORG 0000H;
JMP MAIN;
ORG 0003H;
JMP INP0;
ORG 0030H;
/*鍵盤所輸入數(shù)字依次存入70H-77H*/
MAIN: MOV R6, #70H;
MOV SP, #60H;
CLR 80H;
CLR 81H;
SETB EA;
SETB EX0;
SETB IT0;
DISP1: MOV R0, #70H;//從第一位地址存數(shù)
MOV R2, #01H;//位選第一位
DISP2: MOV A, @R0;
LCALL SEG7; //跳轉段碼
MOV P0, A; //P0輸出字形
MOV P2, R2; //位選輸出
LCALL D1MS; //跳轉延時
MOV P2, #0; //位選關閉,段碼不輸出
INC R0; //選擇下一位;
MOV A, R2;
CLR C; //進位標志清零
RLC A; //掃描字右移
MOV R2, A; //保存掃描字
JNC DISP2; //C=0時, 循環(huán)一次未結束,跳轉到DISP2
PASS: LJMP DISP1;
D1MS: MOV R7, #50H;//延時程序
DMS: DJNZ R7, DMS;
RET;
SEG7: MOV DPTR, #TABLE;//查表程序
MOVC A, @A+DPTR;
RET;
TABLE: DB 0C0H, 0F9H, 0A4H, 0B0H;
DB 99H, 92H, 82H, 0F8H;
DB 80H, 90H, 88H, 83H;
DB 0C6H, 0A1H, 86H, 8EH;
/*P3.6-3.7,行線; P1.0-1.7,列線;*/
/*P0,輸出字形; P2,輸出位選*/
INP0:
PUSH ACC;
PUSH B;
PUSH PSW;
START: MOV R4, #00H;
L1: MOV R3, #0F7H;//設掃描初值,11110111,P3.3=0
MOV R1, #00H; //取碼指針;
/*首先行掃描*/
L2: MOV A, R3; //行掃描開始
MOV P1, A; //掃描值輸出至p1
MOV A, P1; //讀入P1的值
MOV R4, A; //P3口中P3.4-3.7的狀態(tài)通過A,傳送到R4
SETB C; //進位標志置1
MOV R5, #04H; //
l3: RLC A; //按鍵左移,通過C是否為0,判斷此列是否有0;無0則r1進行累加;有0跳轉到延時,
JNC KEY; //C=0,跳轉到延時
INC R1;
DJNZ R5, L3;
MOV A, R3;
SETB C;
RRC A; //換行掃描
MOV R3,A;
JC L2; //C=1,跳轉到L2
KEY: ACALL DELAY;
D1: MOV A,P1;
XRL A,R4;
JNZ D1;
MOV A, R6; //指定存入地址
MOV R0, A;
MOV A, R1; //存入數(shù)字
MOV @R0, A;
/*判斷運算法*/
MOV A, R1;
XRL A, #0AH;//判斷是否為加法符
JZ ADD1;
MOV A, R1;
XRL A, #0BH;//判斷是否為減法符
JZ SUBB1;
MOV A, R1;
XRL A, #0CH;//判斷是否為乘法符
JZ MUL1;
MOV A, R1;
XRL A, #0DH;//判斷是否為除法符
JZ DIV1;
MOV A, R1;
XRL A, #0EH;//判斷是否為等于號
JZ EQUAL1;
MOV A, R1;
XRL A, #0FH;//判斷是否為清零鍵
JZ ON1;
INC R0; //選擇下一個地址
MOV A, R0; //存入r0的新數(shù)值
MOV R6, A;
POP PSW;
POP B;
pop ACC;
RET;
DELAY: MOV R7, #60;//消除抖動延時程序
DLY1: DJNZ R7, DLY1;
RET;
ADD1: MOV A, 80H; //加法程序
MOV 81H, A;
LJMP D1;
MOV A, 81H;
ADD A, 80H;
MOV 80H, A;
RET;
SUBB1: MOV A, 80H;//減法程序
MOV 81H, A;
LJMP DD1;
MOV A, 80H;
SUBB A, 81H;
MOV 80H, A;
RET;
MUL1: MOV A, 80H;//乘法程序
MOV 81H, A;
LJMP DD1;
MOV A, 80H;
MUL AB;
MOV 80H, A;
RET;
DIV1: MOV A, 80H;//除法程序
MOV 81H, A;
LJMP DD1;
MOV A, 80H;
DIV AB;
MOV 80H, A;
RET;
EQUAL1: MOV A, 80H;//等于程序
MOV B, #64H;//算百位數(shù)
DIV AB;
MOV 72H, A; //將此數(shù)除100,商數(shù)放72h,余數(shù)放71h。
MOV 71H, B;
MOV A, 71H;
MOV B, 0AH;//算十位數(shù)
DIV AB;
MOV 71H, A; //將此數(shù)除10,商數(shù)放71h,余數(shù)放70h。
MOV 70H, B;
RET;
ON1: CLR 70H; //清零程序
CLR 71H;
CLR 72H;
CLR 73H;
CLR 78H;
CLR 79H;
CLR 7AH;
CLR 80H;
CLR 81H;
CLR 82H;
CLR 88H;
CLR 89H;
CLR 8AH;
MOV R0, 00H;
MOV R1, 00H;
MOV R2, 00H;
MOV R3, 00H;
MOV R4, 00H;
MOV R5, 00H;
MOV R6, 70H;
MOV R7, 00H;
RET;
DD1: MOV B, #0AH;//將所輸入兩位數(shù)轉換為十進制,并存入80h中
MOV A, 78H;
MUL AB;
ADD A, 70H;
MOV 80H, A;
RET;
END;
作者: hhf123 時間: 2019-6-8 17:53
你好,我是初學者。有附帶電路原理圖嗎?多謝你的幫助
作者: 金七仁 時間: 2019-12-14 19:48
有硬件連接圖嗎 51單片機直接連接數(shù)碼管和矩陣鍵盤嗎
歡迎光臨 (http://www.zg4o1577.cn/bbs/) |
Powered by Discuz! X3.1 |
主站蜘蛛池模板:
精品欧美一区二区在线观看视频
|
自拍 亚洲 欧美 老师 丝袜
|
黄色片av
|
成人精品系列
|
精品久久香蕉国产线看观看亚洲
|
欧美1区2区
|
久久精品国产一区
|
亚洲精品中文字幕在线观看
|
中文字幕免费
|
黄频免费
|
能看的av
|
成人精品在线观看
|
国产伦精品一区二区三区照片91
|
a视频在线观看
|
日日骚视频|
亚洲一区二区三区在线视频
|
久久国产精品视频观看
|
av免费网址
|
国产精品成人国产乱一区
|
国精日本亚洲欧州国产中文久久
|
天天综合操
|
草久久久
|
亚州精品天堂中文字幕
|
亚洲一区免费
|
91精品国产91久久久久久不卞
|
国产高清一二三区
|
亚洲精品一二三区
|
欧美激情综合
|
福利网址
|
日韩淫片免费看
|
亚洲精品一区二区
|
久久久久久久久99
|
亚洲色图婷婷
|
岛国av免费在线观看
|
亚洲二区视频
|
亚洲最大福利网
|
天天插天天操
|
久久久久一区
|
亚洲精品久久久久久久不卡四虎
|
日韩在线小视频
|
国产91在线精品
|