導航:首頁 > 編程語言 > 計算器單片機程序代碼

計算器單片機程序代碼

發布時間:2024-12-02 05:32:03

1. 單片機做計算器的程序

1、直接調用庫函數。

2. 單片機簡易計算器的設計要求用2*8矩陣鍵盤,程序如下,求大神把下面4*4鍵盤程序改成2*8的,可追加分數

下面這個 Keyscan(void) 程序,是我以前寫的。

uchar Keyscan(void)
{
uchar i, j, temp, Buffer[4] = {0xef, 0xdf, 0xbf, 0x7f};
for(j = 0; j < 4; j++) { //循環四次
P2 = Buffer[j]; //在P1高四位內分別輸出一個低電容平
temp = 0x01; //計劃先判斷P1.0位
for(i = 0; i < 4; i++) { //循環四次
if(!(P2 & temp)) //從P1低四位,截取1位
return (i + j * 4); //返回取得的按鍵值
temp <<= 1; //判斷的位,左移一位
} }
return 16; //判斷結束,沒有鍵按下,返回16
}

程序,用了一個 8 位的並口:P1,或 P2,都行。

改成2*8的,就要使用兩個介面了,用什麼?樓主應該指定出來。

3. 用89C51單片機設計4*4矩陣式鍵盤計算器程序 要匯編的

KEYBUF EQU 40H ;鍵號存放單元
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN: MOV KEYBUF,#0 ;初始鍵號設位0,也可以為任意值
MOV R0,#30H ;顯示首地址
MOV R2,#0CH ;計算數據存放單元個數
CLR A
QING: MOV @R0,A ;將數據存放單元清零
INC R0
DJNZ R2,QING
MOV P0,#8FH ;關閉顯示
MOV R1,#30H ;將顯示首地址存放R1里
;===============================================
;五位無符號顯示子程序
DIS1: MOV R0,#30H ;把顯示數據第一位放在R0里
MOV R2,#04H ;把顯示的位碼放在R2里
MOV R3,#05H ;把顯示的長度放在R3里
DIS2: MOV A,@R0
ANL A,#0FH ;屏蔽顯示數據的高四位
MOV B,A
MOV A,R2
ANL A,#0FH ;屏蔽位碼的高四位
SWAP A
ORL A,B
MOV P0,A ;送總顯示數據到P0顯示
LCALL DELY4ms ;調用延時4ms
INC R0 ;取下一個顯示數據
DEC R2
DJNZ R3,DIS2 ;四位顯示晚後重新開始顯示
;===================================================
;鍵盤掃描子程序
WAIT: MOV P1,#0FFH ;P1口送高電平
CLR P1.0 ;第一行清零
MOV A,P1 ;讀P1口
ANL A,#0F0H ;低位屏蔽
XRL A,#0F0H ;判斷低位是否有低電平 ,即判斷是否有按鍵按下
JZ NOKEY1 ;地位有低電平繼續掃描,否者跳到第而行去掃描
LCALL DELY10ms ;延時10ms去抖在進行判斷是否有按鍵按下
MOV A,P1 ;繼續讀P1口
ANL A,#0F0H ;判斷低位是否有低電平
CJNE A,#0E0H,NK1 ;如果掃描數據不為0E0H就轉到NK1
MOV KEYBUF,#0 ;否者判斷為0號鍵
AJMP DK ;轉DK1查表程序
NK1: CJNE A,#0D0H,NK2 ;如果掃描數據不為0D0H就轉到NK2
MOV KEYBUF,#1 ;否者判斷為1號鍵
AJMP DK ;轉DK2查表程序
NK2: CJNE A,#0B0H,NK3 ;如果掃描數據不為0B0H就轉到NK3
MOV KEYBUF,#2 ;否者判斷為2號鍵
AJMP DK ;轉DK3查表程序
NK3: CJNE A,#70H,NK4 ;如果掃描數據不為70H就轉到NK4
LJMP SAN_CHU
NK4: NOP
NOKEY1: MOV P1,#0FFH ;和上面相同
CLR P1.1
MOV A,P1
ANL A,#0F0H
XRL A,#0F0H
JZ NOKEY2
LCALL DELY10MS
MOV A,p1
ANL A,#0F0H
XRL A,#0F0H
JZ NOKEY2
MOV A,P1
ANL A,#0F0H
CJNE A,#0E0H,NK5
MOV KEYBUF,#3
AJMP DK
NK5: CJNE A,#0D0H,NK6
MOV KEYBUF,#4
AJMP DK
NK6: CJNE A,#0B0H,NK7
MOV KEYBUF,#5
AJMP DK
NK7: CJNE A,#70H,NK8
MOV KEYBUF,#10 ;否者判斷為3號鍵
AJMP DK ;轉DK4查表程序
NK8: NOP
NOKEY2: MOV P1,#0FFH
CLR P1.2
MOV A,P1
ANL A,#0F0H
XRL A,#0F0H
JZ NOKEY3
LCALL DELY10MS
MOV A,P1
ANL A,#0F0H
XRL A,#0F0H
JZ NOKEY3
MOV A,P1
ANL A,#0F0H
CJNE A,#0E0H,NK9
MOV KEYBUF,#6
AJMP DK
NK9: CJNE A,#0D0H,NK10
MOV KEYBUF,#7
AJMP DK
NK10: CJNE A,#0B0H,NK11
MOV KEYBUF,#8
AJMP DK
NK11: CJNE A,#70H,NK12
LJMP DENG_HAO
NK12: NOP
NOKEY3: MOV P1,#0FFH
CLR P1.3
MOV A,P1
ANL A,#0F0H
XRL A,#0F0H
JZ NOKEY4
LCALL DELY10MS
MOV A,P1
ANL A,#0F0H
XRL A,#0F0H
JZ NOKEY4
MOV A,P1
ANL A,#0F0H
CJNE A,#0E0H,NK13
LJMP CHU
NK13: CJNE A,#0D0H,NK14
LJMP CHENG
NK14: CJNE A,#0B0H,NK15
LJMP JIAN
NK15: CJNE A,#70H,NK16
LJMP JIA
NK16: NOP
;=======================================================
;查表求鍵值程序
DK: MOV B,#00H
MOV A,KEYBUF ;查表程序 查對應的鍵號數據
MOV DPTR,#TABLE ;把表頭地址放入DPTR
MOVC A,@A+DPTR ;A裡面存放的為鍵號,利用A和表頭地址找到對應的鍵號數據
MOV B,A ;把查到的數據送往顯示單元
INC R1 ;取下一個顯示單元
MOV A,R1
CJNE A,#36H,DKA1 ;判斷顯示單元是否已滿
MOV R1,#35H ;35H,36H單元用於更好的控制五位顯示
AJMP DKA
DKA1: MOV 34H,33H ;按鍵代碼按左移顯示,先按先顯示
MOV 33H,32H
MOV 32H,31H
MOV 31H,30H
MOV 30H,B
DKA: MOV A,P1 ;讀P1口
ANL A,#0F0H ;屏蔽高四位
XRL A,#0F0H ;地位是有低電平
JNZ DKA ;如果有低電平繼續讀P1口,否者向下執行,查找第二行
NOKEY4: LJMP DIS1
;===================================
;功能按鍵功能設定
DENG_HAO:MOV DPTR,#JI_SUAN ;等號鍵功能通過加、減、乘、除設定的偏移量來調用子程序
MOV A,3CH ;3CH存放的為功能程序入口地址偏移量
JMP @A+DPTR ;轉移到按鍵功能程序
JI_SUAN: AJMP JIA1 ;加計運算元程序
AJMP JIAN1 ;減計運算元程序
AJMP CHENG1 ;乘計運算元程序
AJMP CHU ;除計運算元程序
;=======刪除鍵功能
SAN_CHU: ACALL QING_DIS
AJMP DKA
;=======加鍵功能
JIA: MOV 3CH,#00H
ACALL CUN_SHU
ACALL QING_DIS
AJMP DKA
;=======減鍵功能
JIAN: MOV 3CH,#02H
ACALL CUN_SHU
ACALL QING_DIS
AJMP DKA
;=======乘鍵功能
CHENG: MOV 3CH,#04H
ACALL CUN_SHU
ACALL QING_DIS
AJMP DKA
;=======除鍵功能
CHU: MOV 3DH,#06H
ACALL CUN_SHU
ACALL QING_DIS
AJMP DKA

;=================================
;存被加(減、乘、除)數,存放在37H~3BH里
CUN_SHU: MOV 37H,30H ;36H存放的為最低位
MOV 38H,31H
MOV 39H,32H
MOV 3AH,33H
MOV 3BH,34H ;3AH存放的為最高位
RET
;================================
;清除顯示單元
QING_DIS: MOV R1,#30H
QING1: MOV @R1,#00H
INC R1
MOV A,R1
CJNE A,#36H,QING1
MOV R1,#30H
LOP1: RET
;================================
;十進制加法子程序
JIA1:
MOV A,37H ;個位被加數
ADD A,30H ;個位被加數+加數
MOV B,#10 ;十六進制除10轉換成BCD碼
DIV AB
MOV 30H,B ;余數即個位存放在30H
MOV 37H,A ;商存放在37H
MOV A,38H ;十位被加數
ADD A,31H ;十位被加數+加數
ADD A,37H ;加上個位之和的進位
MOV 37H,#00H ;清除37H
MOV B,#10 ;十六進制除10轉換成BCD碼
DIV AB
MOV 31H,B ;余數即十位存放在31H
MOV 38H,A ;商存放在38H
MOV A,39H ;百位計算同十位
ADD A,32H
ADD A,38H
MOV 38H,#00H
MOV B,#10
DIV AB
MOV 32H,B
MOV 39H,A
MOV A,3AH ;千位計算同十位
ADD A,33H
ADD A,39H
MOV 39H,#00H
MOV B,#10
DIV AB
MOV 33H,B
MOV 3AH,A
MOV A,3BH ;萬位計算同十位
ADD A,34H
ADD A,3AH
MOV 3AH,#00H
MOV B,#10
DIV AB
MOV 34H,B
MOV 3BH,#00H
AJMP DKA
;=====================
JIAN1: AJMP DKA
CHENG1: AJMP DKA
CHU1: AJMP DKA
;=============================================
;延時程序和查表表格
DELY4ms: MOV R6,#8 ;延時4毫秒
D1: MOV R7,#248
DJNZ R7,$
DJNZ R6,D1
RET
DELY10ms:MOV R6,#20 ;延時10毫秒
D2: MOV R7,#248
DJNZ R7,$
DJNZ R6,D2
RET
TABLE: DB 07H, 04H, 01H ; / 本表格是以鍵盤為參考 7 8 9 /
DB 08H, 05H, 02H ; * 4 5 6 *
DB 09H, 06H, 03H ; - 1 2 3 -
DB 00H, 00H ;= + 清除 0 = +
END

閱讀全文

與計算器單片機程序代碼相關的資料

熱點內容
狸窩照片製作視頻軟體賬號密碼 瀏覽:546
怎麼建立m文件 瀏覽:965
淘寶上買iphone5s可靠嗎 瀏覽:741
小米4網路助手 瀏覽:424
excel文件搜索不到人名 瀏覽:594
win7打不開網路和共享中心 瀏覽:378
電腦連接正在識別網路連接 瀏覽:97
電腦微信如何發文件 瀏覽:377
資料庫漏洞檢測 瀏覽:360
數據學習網站哪個最好 瀏覽:359
win1010240升級正式版 瀏覽:720
樂視網路電視mac 瀏覽:33
編程時如何顯示行數 瀏覽:224
java認證考試包名 瀏覽:834
linux文件系統有哪些 瀏覽:172
在英國怎麼翻回國內app 瀏覽:314
iphone6個人熱點不見了 瀏覽:863
本機jdk版本 瀏覽:878
手機卡無法連接網路是怎麼回事兒 瀏覽:603
wps怎樣調出工具欄 瀏覽:599

友情鏈接