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

正文內(nèi)容

基于stc89c52單片機簡易計算器的設計(編輯修改稿)

2025-02-14 14:21 本頁面
 

【文章內(nèi)容簡介】 方法。P0口作為液晶顯示的數(shù)據(jù)端口,控制LCD液晶顯示屏顯示輸出數(shù)據(jù)。最終顯示電路如圖32所示。圖32 LCD液晶顯示屏顯示4. 計算器軟件設計 計算器的軟件規(guī)劃簡易計算器的程序主要包括以下功能模塊: 讀鍵程序、判鍵程序段、運算操作子程序等部分; 基于LCD液晶顯示屏的顯示模塊; 主模塊,為系統(tǒng)的初始化 主模塊的程序設計主程序主要用來對LCD液晶顯示屏進行初始化的。在考慮主程序編寫之前,先應對計算器的運作流程有一個大致的了解,之后依次為依據(jù)畫出大致的流程圖如圖41所示,以便于編寫其主模塊的程序,這樣看來,會比較清晰、更加方便。圖 41 主程序框圖本來在考慮主模塊流程時,曾考慮到在初始化LCD顯示后應該進入中斷服務的,當然也這么畫上去了;可經(jīng)過老師的提點,之后又反復推敲了好幾遍,再將流程好好地走了幾遍,發(fā)現(xiàn)的確存在著問題。在主程序中的確不用中斷服務,它其實也屬于一個子程序,是與鍵盤程序有關,之后會加以說明。既然是計算器,只要反復地進行四則運算,其過程與結果并在液晶顯示屏上顯示出來。通過這個詳細的主模塊程序框圖,即能夠很快地編寫出其程序:void main(){ uchar i,j。 init()。 write_cmd(0x80)。 //將液晶指針定位在第一行第一個單元 key=15。 i=flag1=0。 while(1) { ………… write_cmd(0x80+0x40)。 //將液晶指針定位在第二行第一個單元 jscl()。 } flag1=0。 } }在以上的程序中“write_cmd(0x80)?!?,被賦值為“0x80”,則是根據(jù)圖 226 DDRAM單元地址與顯示屏字符位的對應關系中便能找到,第一行第一個單元的值為80H,則第二行第一個單元的值就為80H+40H,即得出“write_cmd(0x80+0x40)。”。 顯示模塊的程序設計圖42 顯示程序框圖顯示模塊程序首先要對顯示模塊進行初始化;然后控制光標的位置;定義液晶顯示的控制端口,用SBIT指令完成;然后設置清屏、關閉顯示、歸位、開顯示、顯示位置的首地址等等。顯示模塊的流程圖如圖42所示。根據(jù)以上的顯示程序的流程框圖,便能編寫出其顯示子程序:void jscl() //計算并顯示函數(shù){ uchar i,j,n。 ………… { for(j=0。jk1+1。j++) //存放第一操作數(shù) { for(i=0。ik1j。i++) ………… } for(j=k1+1。jk2+1。j++) //存放第二操作數(shù) { ………… if(js==10) //判斷是什么運算,并執(zhí)行運算 { s=s1+s2。 ………… if(js==13) { s=(s1*)/(s2*)。 ………… temp1=(long int)(s)。 //以下部分處理結果 temp2=stemp1?!? for(i=n。i0。i) //在液晶上顯示結果 { write_data(table[b[i1]])?!瓆通過其顯示子程序,發(fā)現(xiàn)要顯示其最終結果,就必須先存放第一操作數(shù)、第二操作數(shù),之后來判定使用四則運算中的哪一種運算,其后進行運算處理,最后便能在LCD液晶顯示屏上顯示其最終結果。 鍵盤模塊的程序設計鍵盤掃描子程序,首先讀出P3口的低四位,然后讀出P3口的高四位。然后鍵值并顯示緩存。而后,將鍵盤上的值轉換為ASCII碼,最后就可以用軟件來設置硬件按鍵各個鍵所代表的內(nèi)容。讀鍵程序使用的是反轉法讀鍵,不管鍵盤矩陣的規(guī)模大小,均進行兩次讀鍵。第一次所有行線均輸出低電平,從所有讀入鍵盤信息(列信息);第二次所有列線均輸出低電平,從所有行線讀入鍵盤信息(行信息)。系統(tǒng)中連接的是4*4行列式按鍵鍵盤,其中“09”為數(shù)字鍵;“+、*、/、=”為符號鍵;“ON/C”為功能鍵(清屏鍵),在程序中會加入一個記憶功能鍵,而與其搭配的硬件按鍵為符號鍵中的“=”,以為求方便。圖43 中斷服務程序框圖數(shù)字鍵按下則將相應的數(shù)字送入數(shù)字緩沖區(qū);符號鍵按下則將送入符號緩沖區(qū);功能鍵按下則執(zhí)行相應的程序;最終進行運算后,綜合結果將送入結果緩沖區(qū),并在LCD液晶顯示屏上顯示出來。鍵盤模塊程序也可相當于一個中斷服務子程序,如圖43所示。通過以上的中斷服務程序框圖,來編寫其子程序:void keyscan() //鍵盤掃描程序{ uchar temp,uu=0xf7。 uint i。 for(i=0。i4。i++) {uu=_crol_(uu,1)。 //_crol_為左移函數(shù) ………… { case 0xee: key=0。 break。 case 0xde: key=1。 break。 ……………… case 0x77: key=15。 break。}在以上的程序中,其中的“key=0……key=15”是按鍵“0+、*、/、=、ON/C”16個鍵。而“case 0xee: key=0。 break。”中,被賦值為“0xee”,則是因為行信息是P3口的低四位,若是按鍵按下為“0”,“0”,“1”;同時,列信息是P3口的高四位,若是按鍵按下為“0”,“0”,“1”;由此可得,其被賦值為“0xee”。以此類推,之后一直到“case 0x77: key=15。 break?!睘橹梗际遣捎孟嗤姆椒ㄈベx值的結 論在硬件的制作過程中,我走了很多彎路。主要是在系統(tǒng)還沒有到設計完全的時候就開始很心急地做仿真圖和實物。后來發(fā)現(xiàn)與設計的要求還有偏差,而后反復地改了好幾次,浪費了大量的時間和精力。板子是按照自己的思想和意愿來設計的。一開始,本想用匯編語言來編程的,可是當編了一部分之后才發(fā)現(xiàn),用匯編語言來編程的話,相當繁復冗長;之后就想試著用C語言來編程。在圖書館查閱了一些相關資料后,就開始寫程序。在編寫程序的過程中,發(fā)現(xiàn)居然出現(xiàn)了不少問題。所以,在編寫程序的過程中,也就完善了軟件的設計。編程時,已充分使用了結構化的思想。這樣一來,因為語句較少,程序調(diào)試也比較方便,功能模塊可以逐一地調(diào)試,充分體現(xiàn)了結構化編程的優(yōu)勢。當每個模塊都完成時,將其功能加到一起就完成了整體的設計,通過這次畢業(yè)論文的設計,使自己在單片機方面得了很高的提升空間,為自己為將來打下了不小的基礎. 參考文獻[1] 李廣弟,朱月秀,[M].北京:北京航空航天大學出版社,2007:1.[2] 徐惠民,田輝,孫全,[M].北京:高等教育出版社,2007:5[3] [M].北京:北京水利水電出版社,2007.[4] 張友德、趙金英、應用與實驗(第四版)[M].上海:復旦大學出版社,2003.[5] [J]. 氣象水文海洋儀器 ,1999(02):4044[6] 譚浩強,C程序設計(第三版)[M]:北京:清華大學出版社,1999[7] 萬冬、王玥玥. 電子設計實戰(zhàn)訓練之六:簡單計算器[J]. 電子制作,2008(11):2831[8] 高偉. AT89單片機原理及應用[M]. 北京:國防工業(yè)出版社 2008.[9] 張慶鋒.計算器LCD顯示屏與單片機的簡單接口[J] .電子技術應用,1996(2):2325[10]江世明. 基于Proteus的單片機應用技術[M]. 北京:電子工業(yè)出版社,2009.[11]周潤景. 基于Proteus的電路與單片機系統(tǒng)設計與仿真[M]. 北京:北京航空航天大學出版社,2006. 附錄一 電路原理圖附錄二 軟件程序includeinclude define uchar unsigned chardefine uint unsigned intsbit lcden=P2^2。//這是LCD使能端sbit lcdrw=P2^1。//這是LCD讀寫選擇端sbit lcdrs=P2^0。//這是LCD數(shù)據(jù)命令選擇端uchar code table[]={39。039。,39。139。,39。239。,39。339。,39。439。,39。539。,39。639。,39。739。,39。839。,39。939。, 39。+39。,39。39。,39。*39。,39。/39。,39。=39。,39。.39。}。uchar key,flag1,js,k1,k2。uchar a[20],b[20]。float jieguo=0。void delay(uchar z)//延時函數(shù){uchar x,y。 for(x=z。x0。x) for(y=110。y0。y)。}void write_cmd(uchar cmd)//LCD寫命令函數(shù){ lcdrs=0。//寫指令控制端為低 P0=cmd。 delay(5)。 lcden=1。//給個高脈沖結束 delay(4)。 lcden=0。}void write_data(uchar date)//寫數(shù)據(jù)函數(shù){ lcdrs=1。//寫數(shù)據(jù)控制端高電平 P0=date。 delay(5)。 lcden=1。//給個高脈沖結束 delay(5)。 lcden=0。 }void init()//液晶初始化函數(shù)。{lcdrw=0。 lcden=0。 write_cmd(0x38)。//設置16*2顯示,8位數(shù)據(jù)接口 write_cmd(0x0c)。//設置開顯示,不顯示光標 (關顯示是0x08) write_cmd(0x06)。//寫一個字符后地址指針加1 write_cmd(0x01)。//清屏}void keyscan() //鍵盤掃描程序{ uchar temp,uu=0xf7。 uint i。 for(i=0。i4。i++) {uu=_crol_(uu,1)。 //_crol_為左移函數(shù) P3=uu。 temp=P3。 temp=tempamp。0x0f。 if(temp!=0x0f) { delay(10)。 temp=P3。 temp=tempamp。0x0f。 if(temp!=0x0f) { temp=P3。 switch(temp) { case 0xee: key=0。 break。 case 0xde: key=1。 break。 case 0xbe: key=2。 break。 case 0x7e: key=3。 break。 case 0xed: key=4。 break。 case 0xdd: key=5。 break。 case 0xbd: key=6。 break。 case 0x7d: key=7。 break。 case 0xeb: key=8。 break。 case 0xdb: key=9。 break。 case 0xbb: key=10。 break。 case 0x7b: key=11。 break。 case 0xe7: key=12。 break。 case 0xd7: key=13。 break。 case 0xb7: key=14。 break。 case 0x77: key=15。 break。 } while(temp!=0x0f) { temp
點擊復制文檔內(nèi)容
范文總結相關推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1