freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

課程設(shè)計(jì)-單片機(jī)課程設(shè)計(jì)論文-4位數(shù)加法運(yùn)算器的設(shè)計(jì)-在線(xiàn)瀏覽

2025-08-07 16:47本頁(yè)面
  

【正文】 果 方案論證與設(shè)計(jì) 根據(jù)功能和指標(biāo)要求,本系統(tǒng)選用 MCS 51 單片機(jī)為主控機(jī) . 通過(guò)擴(kuò)展必要的外圍接 2 口電路,實(shí)現(xiàn)對(duì)計(jì)算器的設(shè)計(jì) . 具體設(shè)計(jì)考慮如下: 本系統(tǒng)選用 AT89C51 單片機(jī)為主控機(jī) . 通過(guò)擴(kuò)展必要的外圍接口電路,實(shí)現(xiàn)對(duì)計(jì)算器的設(shè)計(jì),具體設(shè)計(jì)如下: ( 1)由于設(shè)計(jì)的計(jì)算器要進(jìn)行四則運(yùn)算,為了得到較好的顯示效果,經(jīng)綜合分析后,最后采用 LCD 顯示數(shù)據(jù)和結(jié)果 . ( 2)采用鍵盤(pán)輸入方式,鍵盤(pán)包括數(shù)字鍵( 0~ 9)、符號(hào)鍵( +、 、247。 static data LONG rvalue。 static data CHAR lasttoken。 static xdata CHAR outputbuffer[MAX_DISPLAY_CHAR]。 rvalue = 0。=39。039。 // 初始化 LCD顯示器 calc_output(OK)。 } VOID calc_evaluate() { CHAR data key。 CHAR xdata number[MAX_DISPLAY_CHAR]。 // 程序開(kāi)始前先清除所有緩沖區(qū) . for (i = 0。 i++) { number[i] = 39。 } bufferptr = number。) { key = calc_getkey()。number[MAX_DISPLAY_CHAR 2]) { *bufferptr = key。 bufferptr++。039。} 13 else { rvalue = calc_asciidec (number)。 for (i = 0。 i++) { number[i] = 39。 } //處理運(yùn)算符 . currtoken = key。C39。 } else { calc_opfunctions(lasttoken)。i = MAX_DISPLAY_CHAR。 39。 // 處理等于號(hào),只需要保留以前的值 . if (currtoken != 0x3D) lasttoken = currtoken。 } } VOID calc_opfunctions (CHAR token) // 運(yùn)算符的處理操作,左值保存結(jié)果 . { CHAR data result。+39。=39。amp。 result = calc_chkerror(lvalue)。 } break。39。=39。amp。 14 result = calc_chkerror(lvalue)。} break。*39。=39。amp。 result = calc_chkerror(lvalue)。} break。/39。=39。amp。 result = calc_chkerror(lvalue)。} } else { result = SLEEP。 // 清零 . case 39。 : lvalue = 0。 currtoken = 39。 lasttoken = 39。 result = OK。 default : result = SLEEP。 } INT calc_chkerror (LONG num) // 檢查最低位數(shù)和最高位數(shù)從 9999到 +9999 { if ((num = 9999) amp。 (num = 9999)) return OK。 } VOID calc_output (INT status) // 根據(jù)操作狀態(tài)輸出 { switch (status) { case OK : calc_display(calc_decascii(lvalue))。 case SLEEP : break。 break。 break。 LONG data digit。 while (*buffer != 39。) { digit = *buffer 48。 buffer++。 } CHAR *calc_decascii (LONG num) // 將浮點(diǎn)數(shù)轉(zhuǎn)換成 ASCII碼 . { LONG data temp = num。outputbuffer[MAX_DISPLAY_CHAR]。 LONG data result。 INT data i。 goto done。39。 } for (i=0 。 i++) { remainder = temp % divisor。 // 運(yùn)行結(jié)束,將空格插入緩沖區(qū) if ((!remainder) amp。 (!result)) { *arrayptr = 39。} else { asciival = remainder + 48。 } temp /= 10。outputbuffer[1]) arrayptr。 } CHAR calc_testkey (CHAR key) // 測(cè)試按鍵是數(shù)字還是運(yùn)算符;返回 1代表數(shù)字, 0代表運(yùn)算符; { if ((key = 0x30) amp。 (key = 0x39)) { return 1。} } /************************************************************************ ***** 輸入輸出部分函數(shù) ***** ***********************/ CHAR calc_getkey (VOID) //使用 *Keypad_Read* 匯編文件函數(shù)掃描鍵和返回按下的鍵的 ASCII 值 { CHAR data mykey。 while (mykey == 0)。 } 17 VOID calc_display (CHAR buf[MAX_DISPLAY_CHAR]) // 使用輸出和 *LCD_Write* 的匯編文件輸出 LCD的值 { INT data i = 0。 for (i 。 i++) { if (buf[i] != 39。) { output(buf[i])。 從鍵盤(pán)讀出一個(gè)字符然后返回到 R7中 . 。 局部變量的輸出程序段 . KEY_ROW1 equ 0EFh KEY_ROW2 equ 0DFh KEY_ROW3 equ 0BFh KEY_ROW4 equ 07Fh keyflags: ds 16 RSEG ?PR?input?KEYPAD 。 R0 處理按鍵的切換字節(jié) mov R1,KEY_ROW1 。 R2 計(jì)數(shù)行 ksrow: mov P2,R1 。 從 P1口讀取列地址 mov R3,4 。 移動(dòng)到下一位 mov R4,A 。 如果沒(méi)有按鍵就跳到 ks1 mov A,R0 。 按下之后將 R0給 0,標(biāo)志按下 jz ksnew 。 沒(méi)有按鍵就標(biāo)記為 0 ks2: inc R0 。 將 R1循環(huán)移位去處理下一行 rl A mov R1,A djnz R2,ksrow clr A mov R7,A 。發(fā)現(xiàn)有新的按鍵按下 : mov A,R0 。 將按鍵給 R7. ksend: mov P2,0FFh pop DPL pop DPH ret 。739。839。939。/39。439。539。639。*39。139。239。339。39。C39。039。=39。+39。設(shè)置代碼段和輸出 : LCD SEGMENT CODE RSEG LCD PUBLIC _output PUBLIC initialise PUBLIC clearscreen 。LCD命令 LCD_CLS equ 1 LCD_HOME equ 2 LCD_SETMODE equ 4 LCD_SETVISIBLE equ 8 LCD_SHIFT equ 16 LCD_SETFUNCTION equ 32 LCD_SETCGADDR equ 64 LCD_SETDDADDR equ 128 20 。1 line, 8 bits call wrcmd mov A,LCD_SETVISIBLE + 4 call wrcmd mov A,LCD_SETDDADDR+15 。 自動(dòng)遞增,顯示左移 . call wrcmd ret 。清空 LCD顯示重新初始化; clearscreen: mov A,LCD_CLS call wrcmd mov A,LCD_SETDDADDR + 15 call wrcmd ret 。******** SUBROUTINES ******** 。寫(xiě)命令的子程序 : wrcmd: mov P2,LCD_PAGE mov R0,LCD_CMD_WR movx R0,A jmp wtbusy 。子程序等待繁忙的狀態(tài) . wtbusy: MOV R1,LCD_BUSY_RD MOVX A,R1 21 JB ,wtbusy ret END 、 頭文件 : typedef void VOID。 typedef unsigned short WORD。 typedef unsigned char BYTE。 typedef double DOUBLE。 //定義 ASCII字符在顯示屏上可以容納的最大數(shù)量 . define MAX_DISPLAY_CHAR 9 //錯(cuò)誤的處理狀態(tài) enum ERROR { OK = 0, SLEEP = 1, ERROR = 2}。 //Operator indirect function. VOID calc_opfunctions (CHAR token)。 LONG calc_asciidec (CHAR *buffer)。 INT calc_chkerror (LONG num)。 // I/O functions. CHAR calc_getkey (VOID)。 //Assembly Function prototypes. void initialise()。 char output(char ch)。 22 第五章 仿真及調(diào)試 在程序設(shè)計(jì)方法上,模塊化程序設(shè)計(jì)是單片機(jī)應(yīng)用中最常用的程序設(shè)計(jì)方法 . 設(shè)計(jì)的中心思想是把一個(gè)復(fù)雜應(yīng)用程序按整體功能劃分成若干相對(duì)獨(dú)立的程序模塊,各模塊可以單獨(dú)設(shè)計(jì)、編程和調(diào)試,然后組合起來(lái) . 這種方法便于設(shè)計(jì)和調(diào)試,容易實(shí)現(xiàn)多個(gè)程序共存,但各個(gè)模塊之間的連接有一定的難度 . 根據(jù)需要我們可以采用自上而下的程序設(shè)計(jì)方法,此方法先從主程序開(kāi)始設(shè)計(jì),然后再編制各從屬程序和子程序,層層細(xì)化逐步求精,最終完成一個(gè)復(fù)雜程序的設(shè) 計(jì) . 這種方法比較符合人們的日常思維,缺點(diǎn)是一級(jí)的程序錯(cuò)誤會(huì)對(duì)整個(gè)程序產(chǎn)生影響 . 功能和操作:加減乘除運(yùn)算和顯示 . ① 上電后,屏幕初始化 . ② 計(jì)算 . 按下數(shù)字鍵,屏幕顯示要運(yùn)算的第一個(gè)數(shù)字,再按下符號(hào)鍵,然后再按下數(shù)字鍵,屏幕顯示要運(yùn)算的第二個(gè)數(shù)字,最后
點(diǎn)擊復(fù)制文檔內(nèi)容
畢業(yè)設(shè)計(jì)相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1