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

正文內(nèi)容

畢業(yè)設(shè)計-基于stc89c52rc單片機(jī)的簡易計算器設(shè)計-在線瀏覽

2025-03-06 00:58本頁面
  

【正文】 功能:設(shè)定每次定入 1 位數(shù)據(jù)后光標(biāo)的移位方向,并且設(shè)定每次寫入的一個字符是否移動。參數(shù)設(shè)定的情況如下: 位名 設(shè)置 D 0=顯示功能關(guān) 1=顯示功能開 C 0=無光標(biāo) 1=有光標(biāo) B 0=光標(biāo)閃爍 1=光標(biāo)不閃爍 功能:使光標(biāo)移位或使整個顯示屏幕移位。參數(shù)設(shè)定的情況如下: 位名 設(shè)置 DL 0=數(shù)據(jù)總線為 4 位 1=數(shù)據(jù)總線為 8 位 N 0=顯示 1 行 1=顯示 2 行 F 0=57 點陣 /每字符 1=510 點 陣 /每字符 CGRAM 地址指令 功能:設(shè)定下一個要存入數(shù)據(jù)的 CGRAM 的地址。 (注意這里我們送地址的時候應(yīng)該是 0x80+Address,這也是前面說到寫地址命令的時候要加上 0x80 的原因 ) AC 地址指令 10 功能: 1 讀取忙碌信號 BF 的內(nèi)容, BF=1 表示液晶顯示器忙,暫時無法接收單片機(jī)送來的數(shù)據(jù)或指令 。 2 讀取地址計數(shù)器 (AC)的內(nèi)容。 2 將使用者自己設(shè)計的圖形存入 CGRAM。 基本操作時序: 讀狀態(tài) 輸入: RS=L, RW=H, E=H 輸出: DB0~ DB7=狀態(tài)字 寫指令 輸入: RS=L, RW=L, E=下降沿脈沖, DB0~ DB7=指令碼 輸出:無 讀數(shù)據(jù) 輸入: RS=H, RW=H, E=H 輸出: DB0~ DB7=數(shù)據(jù) 寫數(shù)據(jù) 輸入: RS=H, RW=L, E=下降沿脈沖, DB0~ DB7=數(shù)據(jù) 輸出:無 、鍵盤設(shè)計方案與選擇 方案一:獨(dú)立鍵盤。這種鍵盤的硬件都很容易實現(xiàn),但每一個按鍵就要用一個 I/O 口,適合本次設(shè)計。其電路如圖所示。 1— 數(shù)據(jù)線( DATA); — 未用; 3— 電源地( GND); 4— 電源( +5 V); 5— 時鐘( CLK); 6— 未用。 方案三:自制編碼鍵盤。 12 方案四: 4*4 矩陣式鍵盤。本次設(shè)計也可以采用這種矩陣式鍵盤。 總體設(shè)計效果如下圖 : (二)、單片機(jī)接口電路說明: 手動上電復(fù)位電路: 當(dāng) VCC上電時, C充電,在 10K電阻上出現(xiàn)電壓,使得單片機(jī)復(fù)位;幾個毫秒后, C充滿, 10K 電阻上電流降為 0,電壓也為 0,使得單片機(jī)進(jìn)入工作狀態(tài)。 S松手, C又充電,在 10K電阻上出現(xiàn)電壓,使得單片機(jī)復(fù)位。 內(nèi)部時鐘模式電路: 17 當(dāng)單片機(jī)工作于內(nèi)部時鐘模式的時候,只需在 XTAL1和 XTAL2引腳連接一個晶體振蕩器或者陶瓷振蕩器,并接兩個電容后接地即可,在使用時對于電容的選擇有一定的 要求: 當(dāng)外接晶體振蕩器的時候,電容值一般選擇 C1=C2=30+10pF或 3010pF; 當(dāng)外接陶瓷振蕩器的時候,電容值一般選擇 C1=C2=40+10pF或 4010pF; STC89C52介紹: STC89C52是一種低功耗、高性能 CMOS8位微控制器, 具有 8K 在系統(tǒng)可編程 Flash 存儲器。 具有以下標(biāo)準(zhǔn)功能: 8k字節(jié) Flash, 512字節(jié) RAM, 32 位 I/O 口線, 看門狗電路 , 內(nèi)置 4KB EEPROM, MAX810復(fù)位電路, 三個 16 位 定時器 /計數(shù)器, 一個 6向量 2級中斷結(jié)構(gòu), 全雙工串行口??臻e模式下,CPU 停止工作,允許 RAM、定時器 /計數(shù)器、串口、中斷繼續(xù)工作。最高運(yùn)作頻率 35Mhz, 6T/12T可選。 可直接使用串口下載; AT89S52單片機(jī) : 8K字節(jié)程序存儲空間; 256字節(jié)數(shù)據(jù)存儲空間; 沒有內(nèi)帶 EEPROM存儲空間 。 第 4腳: RS 為寄存器選擇,高電平 1時選擇數(shù)據(jù)寄存器、低電平 0時選擇指令寄存器。 第 6腳: E(或 EN)端為使能 (enable)端。 第 15~ 16腳:空腳或背燈電源。 顯示模式設(shè)置: (初始化 ) 0011 0000 [0x38] 設(shè)置 162顯示, 57點陣, 8位數(shù)據(jù)接口; 顯示開關(guān)及光標(biāo)設(shè)置: (初始化 ) 0000 1DCB D 顯示 (1有效 )、 C 光標(biāo)顯示 (1有效 )、 B 光標(biāo)閃爍 (1有效 ) 0000 01NS N=1(讀或?qū)懸粋€字符后地址指針加 1 amp。光標(biāo)減 1), S=1 且 N=1 (當(dāng)寫一個字符后,整屏顯示左移 ) s=0 當(dāng)寫一個字符后,整屏顯示不移動 數(shù)據(jù)指針設(shè)置: 數(shù)據(jù)首地址為 80H,所以數(shù)據(jù)地址為 80H+地址碼 (027H, 4067H) 其他設(shè)置: 01H(顯示清屏,數(shù)據(jù)指針 =0,所有顯示 =0); 02H(顯示回車,數(shù)據(jù)指針 =0)。矩陣鍵盤采用四條 I/O 線作為行線,四條 I/O 線作為列線組成鍵盤,在行線和列線的每個交叉點上設(shè)置一個按鍵。這種行列式鍵盤結(jié)構(gòu)能有效地提高單片機(jī)系統(tǒng)中 I/O 口的利用率。 圖 1 矩陣鍵盤布局圖 矩陣鍵盤內(nèi)部電路圖如圖 2所示: (四)、 LCD 顯示模塊: 21 本設(shè)計采用 LCD 液晶顯示器來顯示輸出數(shù)據(jù)。 圖 5 LCD 模塊 (五)運(yùn)算模塊(單片機(jī)控制): MCS51 單片機(jī)是在一塊芯片中集成了 CPU、 RAM、 ROM、定時器 /計數(shù)器和多功能 I/O等一臺計算機(jī)所需要的基本功能部件。 單片機(jī)是靠程序運(yùn)行的,并且可以修改。 PCB設(shè)計: 22 實驗現(xiàn)象、數(shù)據(jù)記錄 數(shù)碼顯示及運(yùn)算 最多九位顯示及運(yùn)算 23 當(dāng)超出時溢出顯示 24 五、總結(jié) 在實驗中遇到了這 樣那樣的問題,軟件的編輯中使得 c 語言的應(yīng)用更加熟練; 在硬件的實現(xiàn)中又出現(xiàn)了軟件和硬件不統(tǒng)一的問題,本實驗我做了兩次,第一次的時候 STC89C52 單片機(jī)的 P2 口的 ~~ 分別對應(yīng)連接到 LCD1602的 D7~~D0 口,這就使得在寫程序的時候需要把所有讀寫的數(shù)據(jù)以及地址都按位取反,改寫程序比較復(fù)雜,最終調(diào)試失敗,又改變了硬件電路。硬件中我對單片機(jī)實驗板上的很多硬件不是很清楚,使得在下載程序后,又進(jìn)行了很長時間的調(diào)整。 uchar dis_buff。 for(i=0。i++) 25 for(j=0。j++) 。 key=0。 Delay1(1)。 temp=tempamp。 temp=~((temp4)|0xf0)。 else if(temp==2)key=1。 else if(temp==8)key=3。 KEYDATA=0x0f。 temp=KEYDATA。0x0f。 if(temp==1)key+=12。 else if(temp==4)key+=4。 else key=16。 return dis_buff。 26 uchar temp。 if(KEYDATA!=0xf0) { temp=KEYDATA。 if(temp==KEYDATA) keyFlag=1。 } else keyFlag=0。 } include include define uchar unsigned char define uint unsigned int sbit rs=P2^5。 sbit e=P2^7。 void delay1ms(void) { uchar i,j。i10。j33。 } void delay(uchar n) { uchar i。in。 } uchar BusyTest(void) { bit result1。 rw=1。 _nop_()。 _nop_()。 result1=bf。 return result1。 rs=0。 e=0。 _nop_()。 _nop_()。 _nop_()。 } void WriteAddress(uchar addr) { WriteCommand(addr|0x80)。 rs=1。 e=0。 P0=d。 _nop_()。 } void LcdInit(void) { delay(15)。 delay(5)。 delay(5)。 delay(5)。 delay(5)。 delay(5)。 delay(5)。 delay(5)。 uchar string[30]。 uchar code num[]={39。,39。,39。,39。,39。,39。,39。,39。,39。,39。,39。,39。,39。,39。,39。,39。}。 uchar opr[15]。 //操作數(shù) uchar iopt,iopr。 //標(biāo)記是否輸入“(”操作符 循環(huán)嵌套 long result=0。 //記錄表達(dá)式的字符位置 bit equal=0。//用來記錄合成的數(shù)值 bit normal=1。//用來標(biāo)記操作數(shù)和操作符的堆棧 bit equalFlag=0。 //shift 鍵 sbit m1=P3^7。 sbit m3=P3^5。//用來保存修改狀態(tài)下等號的位置 uchar WriteAddress(uchar addr)。 uchar WriteCommand(uchar mand)。 uchar KeyDown(void)。 void Init(void) { int i。 for(i=0。i++) string[i]=39。 flag=0。 30 equal=0。 shift=0。 iopt=0。 pzp=0。 } void DisplayNumble(long numble) //顯示結(jié)果,把結(jié)果轉(zhuǎn)換為字符串形式在輸出 { uchar numx[8]={39。,39。,39。,39。,39。,39。,39。,39。}。 LcdInit()。//關(guān)光標(biāo)顯示 WriteAddress(0x40)。=39。 if(numble0) { WriteAddress(0x41)。39。 numble=0numble。 WriteData(0+0x30)。 i++。 } i=i1。a39。 WriteData(numx[i]+0x30)。 } }} void DisplayError(void) //顯示錯誤 {uchar i。 normal=0。\039。 WriteData(warn[i])。} } void Calculate(void) //計算 {int m。break。opt[iopt++]=m。 case 2:m=opt[iopt2]opt[iopt1]。opt[iopt++]=m。 case 3:m=opt[iopt]*opt[iopt]。 break。 if(opt[iopt1]==0) DisplayError()。 opt[iopt++]=m。 32 }} void InsertOpr(uchar operate)reentrant {if
點擊復(fù)制文檔內(nèi)容
規(guī)章制度相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1