【正文】
s Shaanxi province pass through a stop on the ancient Silk Road, Gansu39。 void lcd_setxy(uchar x,uchar y)。 void lcdwrite_num1(uint n)。 sbit LCDRW = P2^6。 lcdwrite_(0x0f)。 lcdwrite_(0x38)。 } /*******初始化液晶 *******/ void lcd_init(void) { lcdwrite_(0x01)。// 顯示第 4位小數(shù) if((nxtemp%1000000%100000%10000%1000%100/10!=0)||(nxtemp%1000000%100000%10000%1000/100!=0)) lcdwrite_data(nxtemp%1000000%100000%10000%1000/100+0x30)。 if(nxtemp%10!=0) lcdwrite_data(nxtemp/1000000+0x30)。)。//+。)。)。 uint j=0。length) { a[length1]=nx%10+0x30。 nx/=10。 } nx=n。 } if(n0) 四川師范大學(xué)成都學(xué)院??飘厴I(yè)設(shè)計(jì) 42 { lcdwrite_data(39。 if(n==0) { lcdwrite_data(39。//1 在第二行 lcdwrite_(address)。 yamp。 LCDEN=1。 LCDRS=1。 LCDEN=0。 while(TempMS)。 delayms(100)。amp。 } while(keypow==0)。 //等待松手 } } } if(keypow==0) { delayms(5)。 break。=39。 case 0xd7:num=39。0xf0。0xf0。0xf0。39。 break。 while(temp!=0xf0) { temp=P1。 while(temp!=0xf0) //掃描列 { delayms(10)。 //等待松手 } } } P1=0xfb。 break。 case 0xbd:num=6。 switch(temp) { case 0xed:num=4。 temp=P1。 //掃描第二行 temp=P1。 } 四川師范大學(xué)成都學(xué)院??飘厴I(yè)設(shè)計(jì) 36 while(temp!=0xf0) //等待松手 { temp=P1。 break。 break。 temp=tempamp。 temp=tempamp。 //若沒有按下任何按鍵,則返回 39。 四川師范大學(xué)成都學(xué)院??飘厴I(yè)設(shè)計(jì) 35 delayms(100)。 conflag=0,newcalc=0。 num=39。 lcdwrite_data(39。 delayms(100)。//開外部中斷 0 四川師范大學(xué)成都學(xué)院專科畢業(yè)設(shè)計(jì) 34 IT1=1。)。 //等待液晶初始化 lcd_init()。i++) num2[i]=0。i8。 //顯示結(jié)果 sqrtflag1=0,newcalc=1。)||(ans10amp。 if((ans2==0amp。^39。 if(sign==39。) ans=ans1ans2。+39。 break。j) point*=。keynum20。.39。i++) //計(jì)算按下的數(shù)字的大小 { if(num2[i]!=39。^39。*39。+39。 if(sqrtflag2!=1) lcdwrite_data(num)。j++,i++,keynum2) point=point*10+num2[i]。) break。.39。 } } point=0。 beep=1。 if(keysqrt==0) { sqrtflag2=1。 } } else if(num==39。)。)) // 記 四川師范大學(xué)成都學(xué)院??飘厴I(yè)設(shè)計(jì) 30 錄按下的數(shù)字 { if(keynum2=7) { if(num==39。((num=0amp。 } if((keyscan()!=39。 //記住運(yùn)算符號(hào) lcdwrite_data(num)。 delayms(10)。 } ans=sqrt(ans1)。//清除開方標(biāo)志 if(keysqrt==0) //計(jì)算 開方 { delayms(5)。j) point*=。keynum10。.39。i++) //計(jì)算按下的數(shù)字的大小 { if(num1[i]!=39。) lcdwrite_data(num)。 if(sqrtflag2!=1amp。 lcdwrite_(0x01)。||keysqrt==0) { if(keynum1==0amp。||num==39。||num==39。 } } else if(num==39。)。 } if(keynum1=7) //限制輸入位數(shù) { if(num==39。.39。amp。//初始化 while(1) //整個(gè)系統(tǒng)大循環(huán),讓計(jì)算器一直處于工作狀態(tài) { while(1) //第一運(yùn)算數(shù)掃描 四川師范大學(xué)成都學(xué)院??飘厴I(yè)設(shè)計(jì) 27 { if(ac==1) break。//開方按鍵 sbit keypow=P3^5。 //開方 2標(biāo)志位 bit powflag=0。 //新運(yùn)算標(biāo)志 bit ac=0。 //按鍵計(jì)數(shù),符號(hào)標(biāo)示 uchar num1[8]={0},num2[8]={0}。本設(shè)計(jì)是用單片機(jī) AT89C51 來(lái)控制,采用 LCD1602 液晶顯示讀取數(shù)據(jù),軟件部分是由 C 語(yǔ)言來(lái)編寫的。在設(shè)計(jì)的過(guò)程中的思考解決問題的思路和方法對(duì)以后的工作和生活都是非常有幫助的。 第 6 章 總結(jié)與展望 總結(jié) 經(jīng)過(guò)多次測(cè)量與調(diào)試,本計(jì)算器基本能實(shí)現(xiàn)設(shè)計(jì)要求中的功能。下面將進(jìn)行多次測(cè)試,以檢驗(yàn)計(jì)算器的性能指標(biāo)。電源故障包括電壓值不符合設(shè)計(jì)要求,電源引線和插座不對(duì),功率不足,負(fù)載能力差等。這類錯(cuò)誤包括錯(cuò)線、開路、短路等。 delayms(100)。 ac=1。N39。039。 beep=1。其程序流程圖如下圖所示: 四川師范大學(xué)成都學(xué)院??飘厴I(yè)設(shè)計(jì) 9 圖 31顯示程序流程圖 其程序位于后面附錄 鍵掃程序設(shè)計(jì) 由于矩陣鍵盤采用 4 行 4 列的結(jié)構(gòu),每一行每一列各對(duì)應(yīng)一個(gè) I/O 口,故程序應(yīng)該逐行查詢,一旦查詢到有某一行的按鍵被按下了,則根據(jù) 讀取到的 I/O 總線口的數(shù)據(jù)即可查詢到是哪一列的按鍵被按下了,最后對(duì)應(yīng)行列返回一個(gè)按鍵值回主函數(shù)。而且 AT89S52 可編程一千多次以上,的確是一種價(jià)格低廉的開發(fā)芯片。使用 Atmel 公司高密度非易失性存儲(chǔ)器技術(shù)制造,與工業(yè)80C51 產(chǎn)品指令和引腳完全兼容。具體功能按鍵設(shè)計(jì)如下圖: 圖 23功能按鍵設(shè) 圖中, AC為清零按鍵、 KeyBeep為聲音開關(guān)按鍵、 KeySqrt為開方按鍵、 KeyPow為多次方按鍵。 1602LCD 液晶具有 功耗低、顯示內(nèi)容豐富、清晰,顯示信息量大,顯示速度較快,界面友好等而得到廣泛應(yīng)用,因此使用 1602液晶顯示屏,可以方便的顯示多種字符,特別適用于單片機(jī)計(jì)算器的雙行顯示。 第 2 章 硬件設(shè)計(jì) 鍵盤輸入模塊設(shè)計(jì) 計(jì)算器輸入數(shù)字和其他功能按鍵要用到很多按鍵,如果采用獨(dú)立按鍵的方式,在這種情況下,編程會(huì)很簡(jiǎn)單,但是會(huì)占用大量的 I/O 口資源 ,因此在很多情況下都不采用這種方式,而是采用矩陣鍵盤的方案。 。 設(shè)計(jì)任務(wù) 。計(jì)算器是能進(jìn)行數(shù)學(xué)運(yùn)算的手持機(jī)器,擁有集成電路芯片,結(jié)構(gòu)簡(jiǎn)單,功能較弱,但由于它使用方便、操作簡(jiǎn)單、價(jià)格低廉,因而廣泛運(yùn)用于商業(yè)交易中,也是必備的 辦公用品之一。計(jì)算器電源采用交流轉(zhuǎn)換器或電池,電池可用交流轉(zhuǎn)換器或太陽(yáng)能轉(zhuǎn)換器再充電。鍵盤是計(jì)算器的輸入部件,一般采用接觸式或傳感式。而 Microchip 公司 的 PIC 精簡(jiǎn)指令集 (RISC)也有著強(qiáng)勁的發(fā)展勢(shì)頭 ,中國(guó)臺(tái)灣的 HOLTEK 公司近年的單片機(jī)產(chǎn)量與日俱增 ,與其低價(jià)質(zhì)優(yōu)的優(yōu)勢(shì) ,占據(jù)一定的市場(chǎng)分額。 此外 ,現(xiàn)在的產(chǎn)品普遍要求體積小、重量輕 ,這就要求單片機(jī)除了功能強(qiáng)和功耗低外 ,還要求其體積要小。 CMOS 雖然功耗較低 ,但由于其物理特征決定其工作速度不夠高 ,而 CHMOS 則具備了高速和低功耗的特點(diǎn) ,這些特 四川師范大學(xué)成都學(xué)院專科畢業(yè)設(shè)計(jì) 2 征 ,更適合于在要求低功耗 ,電池供電的應(yīng)用場(chǎng)合。隨著低價(jià)位 OTP(One Time Programble)及各種特殊類型片內(nèi)程序存儲(chǔ)器的發(fā)展 ,加之處圍接口不斷進(jìn)入片內(nèi) ,推動(dòng)了單片機(jī) “ 單片 ” 應(yīng)用結(jié)構(gòu)的發(fā)展。現(xiàn)指令速度最高者已達(dá) 100MIPS(Million Instruction Per Seconds,即兆指令每秒 ),并加強(qiáng)了位處理、中斷和定時(shí)控制功能。為了適應(yīng)這種領(lǐng)域的要求 ,須運(yùn)用新的工藝 ,使片內(nèi)存儲(chǔ)器大容量化。計(jì)算器將完成的功能有加,減,乘,除等功能。計(jì)算器在人們的日常中是比較的常見的電子產(chǎn)品之一。計(jì)算器是能進(jìn)行數(shù)學(xué)運(yùn)算的手持機(jī)器,擁有集成電路芯片,結(jié)構(gòu)簡(jiǎn)單,功能較弱,但由于它使用方便、操作簡(jiǎn)單、價(jià)格低廉,因而廣泛運(yùn)用于商業(yè)交中,也是必備的辦公用品。 近年來(lái)隨著科技的飛速發(fā)展,單片機(jī)的應(yīng)用正在不斷深入,同時(shí)帶動(dòng)傳統(tǒng)控制檢測(cè)技術(shù)日益更新。可是它還在發(fā)展之中,以后必將出現(xiàn)功能更加強(qiáng)大的計(jì)算器,基于這樣的理念,本次設(shè)計(jì)是用單片機(jī)來(lái)設(shè)計(jì)的計(jì)算器。 關(guān)鍵詞 : 計(jì)算器 單片機(jī) LCD 矩陣鍵盤 四川師范大學(xué)成都學(xué)院??飘厴I(yè)設(shè) 計(jì) II Calculator design based on single chip microputer Abstract:Calculator generally refers to the electronic calculator, and the term is introduced to China by the Japanese. The calculator with the IC chip, simple structure, and weak function is able to perform mathematical operations on handheld machine. But it is easy using, simple operation and low price. So it is widely used in mercial transactions, and is also an essential office supplies. With the rapid development of science and technology in recent years, the application of SCM is the deepening and promote the traditional controlling detection technologies that are increasingly updated. In realtime detection and automatic control of microputer application system, the microcontroller is often used as a core ponent to use, but only the knowledge of the microcontroller is not enough, and should be based on the specific hardware architecture, hardware and software