專業(yè)綜合應(yīng)用與工程能力實(shí)踐訓(xùn)練課程設(shè)計(jì)電子計(jì)算器設(shè)計(jì)_第1頁
專業(yè)綜合應(yīng)用與工程能力實(shí)踐訓(xùn)練課程設(shè)計(jì)電子計(jì)算器設(shè)計(jì)_第2頁
專業(yè)綜合應(yīng)用與工程能力實(shí)踐訓(xùn)練課程設(shè)計(jì)電子計(jì)算器設(shè)計(jì)_第3頁
專業(yè)綜合應(yīng)用與工程能力實(shí)踐訓(xùn)練課程設(shè)計(jì)電子計(jì)算器設(shè)計(jì)_第4頁
專業(yè)綜合應(yīng)用與工程能力實(shí)踐訓(xùn)練課程設(shè)計(jì)電子計(jì)算器設(shè)計(jì)_第5頁
已閱讀5頁,還剩35頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、 專業(yè)綜合應(yīng)用與工程能力實(shí)踐訓(xùn)練 課程設(shè)計(jì) 電 子 計(jì) 算 器 院 部: 電氣與信息工程學(xué)院 學(xué)生姓名: 李 旭 指導(dǎo)教師: 戴佳陽 職稱 講師 專 業(yè): 自動化 班 級: 自本1001 完成時間: 2013年12月 摘 要在我們的學(xué)習(xí)生活中,常會遇到一些繁雜的計(jì)算,耗費(fèi)我們的時間,而且,有些計(jì)算過程復(fù)雜,通過筆算,難以得到正確的答案,比如說ln、sin、cos、tan等,就此我們設(shè)計(jì)了一款科學(xué)計(jì)算器,便于我們平時的計(jì)算使用。我們設(shè)計(jì)的這款計(jì)算器,是具有多功能的,它除了包括了四則運(yùn)算、三角函數(shù)運(yùn)算、開根號、ln、階乘、求冪、十進(jìn)制與八進(jìn)制轉(zhuǎn)換、十進(jìn)制與十六進(jìn)制轉(zhuǎn)換外,還添加了溫度計(jì)功能,實(shí)現(xiàn)了

2、多功能合與一體的設(shè)計(jì)。伴隨電子行業(yè)的發(fā)展,單片機(jī)在我們的生活中占有舉重輕重的地位,而這個計(jì)算器正是基于單片機(jī)來設(shè)計(jì)的,所以這次的設(shè)計(jì)真正的達(dá)到了學(xué)以致用效果,也很具有現(xiàn)實(shí)意義。關(guān)鍵字:計(jì)算器;溫度計(jì);單片機(jī)abstractwe always meet some multifarious computation in our school life which take lots of our time. whats more, some calculation process, such as ln, sin, cos, tan and so on, is so complicated tha

3、t through the manual computation, we get low efficiency and probability. thus, we design a calculator to facilitate our usual calculation. the calculator is of multiple function and realizes multi function in one, which adds the thermometer function, as well as the stopwatch function, except for the

4、 four operations, the operation of trigonometric function, open radical sign, ln, factorial, exponentiation, decimal and octal, decimal and hexadecimal conversion. with the development of electronics industry, single chip computer (scm) plays a more and more important role in our life. the design of

5、 this calculator is based on scm. that is to say, this design put what we learn into practice, and also it has practical significance. key words: calculator;thermometer;single chip computerii目 錄1 計(jì)算器任務(wù)、功能要求說明及總體方案介紹1 1.1 計(jì)算器任務(wù)1 1.2 功能要求說明1 1.3 計(jì)算器設(shè)計(jì)總體方案介紹及工作原理說明12 計(jì)算器硬件系統(tǒng)的設(shè)計(jì)2 2.1 計(jì)算器硬件系統(tǒng)各模塊的簡要介紹2 2.

6、1.1 計(jì)算器鍵盤輸入模塊2 2.1.2 計(jì)算器lcd1602顯示輸出模塊2 2.1.3 溫度計(jì)模塊3 2.1.4 at89s52單片機(jī)模塊42.2 電路原理圖、pcb圖、元器件布局圖42.3 設(shè)計(jì)課題元器件清單53 計(jì)算器軟件系統(tǒng)的設(shè)計(jì)6 3.1 計(jì)算器使用單片機(jī)資源的情況6 3.2 設(shè)計(jì)課題軟件系統(tǒng)各模塊功能簡要介紹6 3.3 流程框圖7 3.4 程序清單74 仿真結(jié)果、設(shè)計(jì)結(jié)論84.1 計(jì)算器模塊的仿真8 4.1.1 按鍵輸入并計(jì)算計(jì)算器基本運(yùn)算加減乘除:8 4.1.2 按鍵輸入并計(jì)算基本運(yùn)算三角函數(shù)sin,cos,tan:8 4.1.3 按鍵輸入并計(jì)算基本運(yùn)算開根號9 4.1.4 按鍵

7、輸入并轉(zhuǎn)化八進(jìn)制,十六進(jìn)制94.2 溫度計(jì)模塊的仿真94.3 計(jì)算器的使用說明94.4 設(shè)計(jì)心得10結(jié)束語11致 謝12參考文獻(xiàn)13附錄a 電路原理圖14附錄b pcb圖15附錄c 元器件布局圖16附錄e 程序清單18附錄f 實(shí)物圖34附錄g protues仿真圖341 計(jì)算器任務(wù)、功能要求說明及總體方案介紹1.1 計(jì)算器任務(wù) 設(shè)計(jì)一個具有特定功能的計(jì)算器。該計(jì)算器上電或按鍵復(fù)位后能自動顯示系統(tǒng)提示符“p.”,進(jìn)入準(zhǔn)備工作狀態(tài)。能實(shí)現(xiàn)(1)基本的加、減、乘、除、平方、開方;(2)三角函數(shù)運(yùn)算;(3)十進(jìn)制、十六進(jìn)制轉(zhuǎn)換運(yùn)算;(4)溫度計(jì)1.2 功能要求說明能夠正確無誤的進(jìn)行基本的四則運(yùn)算、平方

8、、開方、三角函數(shù)、十進(jìn)制、十六進(jìn)制等運(yùn)算,并且能夠進(jìn)行溫度的測量。1.3 計(jì)算器設(shè)計(jì)總體方案介紹及工作原理說明 以單片機(jī)作為總體核心部件,以 lcd1602液晶顯示屏為輸出部分以及自行設(shè)計(jì)的2*14鍵盤、18b20為溫度測試芯片等為外圍電路為輔助部分進(jìn)行本次課題的設(shè)計(jì)。 從鍵盤進(jìn)行數(shù)據(jù)的編輯輸入到單片機(jī)中,以設(shè)計(jì)好的軟件進(jìn)行相應(yīng)的運(yùn)算,然后再從單片機(jī)中輸出到lcd1602液晶顯示屏芯片中,運(yùn)算結(jié)果進(jìn)行顯示;對于溫度模塊而言,以18b20芯片對環(huán)境溫度進(jìn)行測量,然后通過外圍電路輸送到單片機(jī)進(jìn)行處理,再送給lcd1602液晶顯示芯片進(jìn)行輸出。如下圖所示: 18b20溫度測量 鍵盤輸入 at89s5

9、2單片機(jī) 1602輸出 圖1 原理框圖2 計(jì)算器硬件系統(tǒng)的設(shè)計(jì)2.1 計(jì)算器硬件系統(tǒng)各模塊的簡要介紹2.1.1 計(jì)算器鍵盤輸入模塊由于計(jì)算器設(shè)計(jì)中計(jì)算器要實(shí)現(xiàn)sin,cos,tan等功能的計(jì)算,按傳統(tǒng)4*4鍵盤按鍵不能達(dá)到本次的設(shè)計(jì)要求,所以利用8-3編碼器74ls148來實(shí)現(xiàn)2*14鍵盤的應(yīng)用。2.1.2 計(jì)算器lcd1602顯示輸出模塊液晶屏lcd1602接線是利用10k排阻將d0d8腳與電源正極連接,在單片機(jī)p00p07口無輸出時將無輸出的引腳電頻置“1”,以實(shí)現(xiàn)lcd的顯示功能。lcd1602共有16個引腳,其功能如表1所示。圖2 lcd1602顯示屏表1 lcd1602引腳功能表2.

10、1.3 溫度計(jì)模塊溫度計(jì)模塊用的是溫度傳感器ds18b20利用溫度傳感器溫度感知送入單片機(jī)at89s52的p3.7口(第17引腳),通過編程把結(jié)果輸出到顯示屏lcd1602中。如下圖所示圖3 ds18b202.1.4 at89s52單片機(jī)模塊 at89s52單片機(jī)工作原理與引腳與我們所學(xué)的at89c51基本相同,只是at89s52的存儲空間比at89c51大了一倍,變成了8k。其引腳圖如下所示:圖4 at89s52引腳圖2.2 電路原理圖、pcb圖、元器件布局圖 原理圖見附錄a、pcb圖見附錄b、元器件布局圖見附錄c2.3 設(shè)計(jì)課題元器件清單表2 元件清單at89s52芯片1個ds18b20傳

11、感器1個lcd1602液晶顯示屏1個按鍵開關(guān)29個74ls00芯片3個10k電阻14個排阻1個200歐電阻1個74ls148芯片2個20uf極性電容1個22pf電容2個晶振片1個3 計(jì)算器軟件系統(tǒng)的設(shè)計(jì)3.1 計(jì)算器使用單片機(jī)資源的情況本次計(jì)算器的設(shè)計(jì)中,單片機(jī)的p1口和p2.0口以及p2.1口被用作了鍵盤的掃描和輸入所占用。p0口和p2.5、p2.6以及p2.7口連接lcd1602作為信息的輸出,p3.2口用作外部中斷信號的輸入,xtal1與xtal2接外部晶振電路,rst接復(fù)位電路。3.2 設(shè)計(jì)課題軟件系統(tǒng)各模塊功能簡要介紹 (1)void delayms(uint n) ,為毫秒延時子程

12、序,可以達(dá)到延時的功能,其中的uint n,為延時所設(shè)定的延時時間,單位為ms。 (2)void delayus(uchar us) 、void tmpdelay(int u),為微秒延時子程序,可以達(dá)到延時的功能,其中的uint us,為延時所設(shè)定的延時時間,單位為us。 (3)uchar read_lcd_state(),為讀lcd的子程序,將單片機(jī)的信息通過lcd1602顯示輸出。 (4)void lcd_busy_wait(),為lcd1602的等待子程序。 (5)void write_lcd_data(uchar dat),為lcd1602寫的子程序,將單片機(jī)的輸出信息,寫入到lcd

13、的寄存器中。 (6)void lcd_init(),為lcd的初始化子程序,用于開機(jī)及復(fù)位lcd的初始化。 (7)void set_lcd_pos(uchar p),為lcd的位置設(shè)置子程序。 (8)void lcd_string(uchar p,uchar *s),為lcd的寫程序自程序。 (9)void initial()、void inter0() interrupt 0為開中斷子程序。 (10)uint keyscan(),為鍵盤掃描子程序,對鍵盤進(jìn)行數(shù)據(jù)的輸入。 (11)void abc(uint t),為操作子線程。 (12)void jsq_init(),為計(jì)算器初始化子程序。

14、(13)void out(),為計(jì)算器輸出子程序。 (14)void init_ds18b20(),為18b20的初始化子程序。 (15)void readtemp(),為溫度讀取子程序。 (16)void tem_bcd(),為溫度轉(zhuǎn)換bcd子程序。 (17)void use(),為功能選擇子程序。 (18)void main(),為主程序。3.3 流程框圖 見附錄d所示。3.4 程序清單見附錄e所示。4 仿真結(jié)果、設(shè)計(jì)結(jié)論4.1 計(jì)算器模塊的仿真在打開計(jì)算器之后或按功能復(fù)位鍵后將直接進(jìn)入功能選則提示0or1,待提示信息消失,按鍵“0”+“=”進(jìn)入計(jì)算器功能。4.1.1 按鍵輸入并計(jì)算計(jì)算器

15、基本運(yùn)算加減乘除: 圖5 (注:+加法;-:減法;*:乘法;/:除法)4.1.2 按鍵輸入并計(jì)算基本運(yùn)算三角函數(shù)sin,cos,tan: 圖6 (s:sin函數(shù);c:con函數(shù);t:tan函數(shù))4.1.3 按鍵輸入并計(jì)算基本運(yùn)算開根號,階乘,x的y次方,ln等運(yùn)圖7 (注:屏幕上顯示#:開根號;$:階乘;y:x的y次方;k:以e為底的對數(shù);)4.1.4 按鍵輸入并轉(zhuǎn)化八進(jìn)制,十六進(jìn)制圖8 (x:八進(jìn)制轉(zhuǎn)換;x:十六進(jìn)制轉(zhuǎn)換)4.2 溫度計(jì)模塊的仿真在打開計(jì)算器之后火按功能復(fù)位后將直接進(jìn)入功能選擇提示0or1,按鍵“1”+“=”進(jìn)入計(jì)算器功能。如下圖所示:圖9 溫度模塊4.3 計(jì)算器的使用說明首

16、先,將電源的總開關(guān)打開,然后顯示屏就會有如下圖所示: 圖10 然后就會顯示功能選擇提示,如下圖所示:圖110 是計(jì)算器模塊,1是溫度計(jì)模塊,等到清屏后,由用戶自己選擇輸入0或者1,以“=”為確認(rèn)建,如下圖所示:圖12就分別進(jìn)入了相對應(yīng)的功能模塊中去了,然后便可以進(jìn)行相應(yīng)的運(yùn)算或溫度檢測了。4.4 設(shè)計(jì)心得通過本次課程設(shè)計(jì),我們懂得了要完成一個電路的設(shè)計(jì),理論基礎(chǔ)是根基,實(shí)踐操作是完成事物的重要部分,而創(chuàng)新能力則決定了一個電路的價值,因?yàn)樵O(shè)計(jì)一個電路,絕不是簡單的按課本的電路圖進(jìn)行焊接成型,我們要進(jìn)行電路各個元件參數(shù)的計(jì)算,這個涉及我們所掌握的理論知識,元件的計(jì)算是設(shè)計(jì)中較為重要的一部分,計(jì)算準(zhǔn)

17、了,則設(shè)計(jì)出來的電路誤差不大,否則,設(shè)計(jì)出來的電路性能指標(biāo)根要求相差甚遠(yuǎn)。最困難的是當(dāng)電路出現(xiàn)問題時如何檢測出錯誤之處,如何排除錯誤,它考驗(yàn)了我們?nèi)绾芜\(yùn)用理論知識和實(shí)際的調(diào)試的能力,另外,通過這次課程設(shè)計(jì),我掌握了常用元件的識別和測試,熟悉了常用的儀器,了解了電路的連接,焊接方法,鞏固了基礎(chǔ),提高了實(shí)際操作技能,并養(yǎng)成注重設(shè)計(jì),追求創(chuàng)新的思維習(xí)慣??偠灾@次課程設(shè)計(jì)極大的提高我們在電子電路方面的各項(xiàng)能力。 結(jié)束語 課程設(shè)計(jì)結(jié)束了,但是從中學(xué)到的知識會讓我終身受益。設(shè)計(jì)過程,好比是我們?nèi)祟惓砷L的歷程,常有一些不如意,能免回遇到各種各樣的問題。在設(shè)計(jì)的過程中發(fā)現(xiàn)了自己的不足之處,對以前所學(xué)過的

18、知識理解得不夠深刻,掌握的不夠廖谷。我們通過查閱大量有關(guān)資料,并在小組中互相討論,交流經(jīng)驗(yàn)和自學(xué),若遇到是在搞不明白的問題就會及時請教老師,了解自身存在的不足之處,雖然感覺理論上已經(jīng)掌握,但在運(yùn)用到實(shí)踐的過程中仍有意想不到的困后,經(jīng)過一番努力才得以解決。這也激發(fā)了我今后努力學(xué)習(xí)的興趣,我想著將對我以后的學(xué)習(xí)產(chǎn)生積極的影響。通過這次課程設(shè)計(jì),我也懂得了學(xué)習(xí)的重要性,了解到理論知識與實(shí)踐相結(jié)合的重要意義,學(xué)會了堅(jiān)持、耐心、和努力,這將為自己今后的學(xué)習(xí)和工作做出了最好的榜樣。致 謝 大學(xué)兩年半,這次課程設(shè)計(jì)是我們這大學(xué)期間干的最有意義的事之一。從最初的選題,到寫課程設(shè)計(jì)直到完成課程設(shè)計(jì)。其間,查找資

19、料,老師指導(dǎo),與同學(xué)交流,反復(fù)修改設(shè)計(jì),每一個過程都是對自己能力的一次檢驗(yàn)獲很多,比如學(xué)會了查找相關(guān)資料相關(guān)標(biāo)準(zhǔn),分析數(shù)據(jù),提高了自己的制作能力。開始著手計(jì)算器設(shè)計(jì)的制作,一步一步的做下來。等做好設(shè)計(jì)的時候才發(fā)現(xiàn)這是個美好的過程,也不枉費(fèi)我們對這次設(shè)計(jì)花的時間和精力。其實(shí)這么一次的鍛煉可以學(xué)到書本里許多學(xué)不到的知識,堅(jiān)韌、獨(dú)立、思考等。 但是課程設(shè)計(jì)也暴露出我專業(yè)基礎(chǔ)的很多不足之處。比如缺乏綜合應(yīng)用專業(yè)知識的能力,對材料的不了解等等。這次實(shí)踐是對單片機(jī)及數(shù)電,模電知識所學(xué)和充實(shí)。通過這次實(shí)踐,我們了解了計(jì)算器工作原理,熟悉了計(jì)算器的設(shè)計(jì)步驟,鍛煉了設(shè)計(jì)實(shí)踐能力,培養(yǎng)了我的設(shè)計(jì)能力。此設(shè)計(jì)是對我

20、們專業(yè)知識和專業(yè)基礎(chǔ)知識一次實(shí)際檢驗(yàn)和鞏固。 感謝所有支持和幫助過我的同學(xué)和老師!謝謝你們的關(guān)照與寬容,與你們一起走過的繽紛時代,將會是我一生最珍貴的回憶。 此外,我還要感謝在我們的課程設(shè)計(jì)中所有被援引過的文獻(xiàn)的作者們,他們是我們的知識之源! 最后,再次向所有給予我們幫助和鼓勵的同學(xué)和老師致以最誠摯的謝意!參考文獻(xiàn)1馬忠梅,籍順心,張凱,馬巖.單片機(jī)的c語言應(yīng)用程序設(shè)計(jì)m.北京:北京航空航天大學(xué)出版社,2006ma zhongmei,j, zhang kai, mayan. mcu c language program design m .beijing: beijing aerospace

21、university press, 20062李廣弟,朱月秀,冷祖祁.單片機(jī)基礎(chǔ)m.北京:北京航空航天大學(xué)出版社,2007 li guangdi, zhuyuexiu, leng zuqi. microcontroller m .beijing: beijing university of aeronautics and press, 2007 3李光飛.單片機(jī)課程設(shè)計(jì)實(shí)例指導(dǎo)m.北京:北京航空航天大學(xué)出版社,2004.9 li guangfei. this course design example guide m .beijing: beijing university of aerona

22、utics and press, 2004.9 4邢增平.protel 99 se設(shè)計(jì)專家指導(dǎo)m.北京:中國鐵道出版社,2004 xing zengping. protel 99 se design expert guidance m .beijing:china railway publishing house, 2004 附錄a 電路原理圖附錄b pcb圖圖14 pcb頂層圖15 pcb底層附錄c 元器件布局圖圖16 pcb頂層絲印層附錄d 程序流程框圖 開始 附錄e 程序清單#include #include #include #include #define _nop() _nop_(

23、) /定義空指令#define uchar unsigned char /宏定義無符號型字符變量#define uint unsigned int /宏定義無符號整形變量sbit dq =p37; /ds18b20溫度sbit rs =p26; /1602寄存器sbit rw =p25; /1602讀/寫sbit en =p27; /1602使能sbit spk=p24; /蜂鳴器sbit ff=p20; sbit gg=p21;code uchar mayuan28=1,2,3,c,4,5,6,s,7,8,9,t,n,0,.,=,+,-,*,/,#,y,x,x,%,!,$,k;uchar c

24、ode keycode28=0x78,0xb8,0x47,0x87,0x70,0xb0,0x46,0x86,0x68,0xa8,0x45,0x85,0x60,0xa0,0x44,0x84,0x58,0x98,0x43,0x83,0x50,0x90,0x42,0x82,0x48,0x88,0x81,0x41;/ /鍵盤編碼值()uchar code mcuexp= 51_mcu exp ;uchar code welcome= welcome! ;/*定義全局變量*/bit flag;int j,t,zz=0;float c=0;char m,g=0,f=0,i,e=0,d=0,k=0,z=0;

25、char date115; /要操作的數(shù) /計(jì)算器輸出值的各位/* 延時函數(shù)*/void delayms(uint n) /毫秒延時子函數(shù) uint i=0,j=0; /付循環(huán)初始值 for (i=n;i0;i-) /循環(huán)嵌套延時 for (j=246;j0;j-); void delayus(uchar us) /微秒延時子函數(shù)while(us-); /*/* lcd1602程序模塊 */*/uchar read_lcd_state() /讀lcd狀態(tài)uchar state; rs=0; /關(guān)閉1602的寄存器 rw=1; /將1602的讀/寫端置1,進(jìn)行讀操作en=1; /打開1602的使

26、能端delayms(1); /延時1毫秒state=p0; /將p0口的狀態(tài)輸入到lcden=0; /關(guān)閉1602的使能delayms(1); /延時1毫秒return state;void lcd_busy_wait() /忙則等待while(read_lcd_state()&0x80)=0x80); /判斷是否忙delayms(5); /延時5毫秒void write_lcd_data(uchar dat) /lcd寫數(shù)據(jù)子函數(shù)lcd_busy_wait(); /判斷l(xiāng)cd是否忙,忙則等rs=1; /打開1602的寄存器 rw=0; /打開1602的寫 en=0; /關(guān)閉使能端 p0=da

27、t; /將數(shù)據(jù)寫出en=1; /開使能端delayms(1); /延時1毫秒en=0; /關(guān)使能端void write_lcd_com(uchar i) /lcd寫指令lcd_busy_wait(); /判斷l(xiāng)cd是否忙,忙則等rs=0; /關(guān)閉1602寄存器rw=0; /打開1602的寫en=0; /關(guān)閉使能端p0=i; /將數(shù)據(jù)輸出en=1; /打開使能端delayms(1); /延時1毫秒en=0; /關(guān)閉使能端 void lcd_init() /lcd初始化 write_lcd_com(0x38); /顯示模式設(shè)置 delayms(1); /延時1毫秒 write_lcd_com(0x

28、38); /顯示模式設(shè)置 delayms(1); /延時1毫秒 write_lcd_com(0x08); /顯示關(guān)閉 delayms(1); /延時1毫秒 write_lcd_com(0x01); /顯示清屏 delayms(1); /延時1毫秒 write_lcd_com(0x06); /顯示光標(biāo)移動設(shè)置 delayms(1); /延時1毫秒 write_lcd_com(0x0c); /顯示開及光標(biāo)設(shè)置void set_lcd_pos(uchar p) /*設(shè)置lcd位置*/write_lcd_com(p|0x80); /清屏void lcd_string(uchar p,uchar *s)

29、 /*lcd寫程序*/uchar i; set_lcd_pos(p); /*設(shè)置lcd位置*/for(i=0;i16;i+) /循環(huán)寫入數(shù)據(jù)write_lcd_data(si);delayms(5); /延時5毫秒void initial() /*開中斷*/ea=1; /總開關(guān) ex0=1; /中斷方式0開啟it0=0; / /設(shè)置中段方式為電平觸發(fā)方式uint keyscan() uint i;uchar temp;ff=1;gg=0;delayms(10); /延時if(p1!=0x40) /有鍵按下temp=p1; /保存鍵盤此刻的鍵植delayms(10); /延時while(p1!=

30、0x40); /松手檢測ff=0;gg=1;delayms(10); /延時if(p1!=0x80) /有鍵按下temp=p1;delayms(5); /延時5毫秒while(p1!=0x80); /松手檢測 for(i=0;i0)write_lcd_com(0x10); /屏幕后退一位 z-; /數(shù)組減一位if(mayuant!=n&mayuant!=&mayuant!=%&mayuant!=!)date1z+=mayuant; /把輸入的數(shù)放在數(shù)組中write_lcd_data(mayuant); /把輸入的數(shù)顯示在lcd上if(z14)lcd_string(0x40,error); /提

31、示輸入太多void inter0() interrupt 0 /*中斷函數(shù)*/uint n;delayms(10); /延時if(int0=0) /有鍵按下n=keyscan();ff=0; /中段前提條件gg=0;abc(n); /調(diào)用操作子程序void jsq_init() /*計(jì)算器初始化*/ uint s;en=1; /開使能端lcd_init(); /對lcd進(jìn)行初始化 e=0; d=0; m=0;z=0;c=0; for(s=0;s15;s+) date1s=0;double fun3(int a) /*求階層函數(shù)*/int sum=1,i;double dd;for(i=1;i=

32、a;i+)sum*=i;dd=(double)sum; /將snm轉(zhuǎn)化成小數(shù)形式return (dd);void fun2(double p) /*16進(jìn)制轉(zhuǎn)換函數(shù)*/char a15,j;int i=0;long h;h=(long)p; /對p進(jìn)行強(qiáng)制轉(zhuǎn)化if(h=0) /判斷要轉(zhuǎn)換的數(shù)是否為0a0=0+48; /將0的bcd碼存入數(shù)組set_lcd_pos(0x40); /lcd屏幕的輸出位置設(shè)置write_lcd_data(a0);/將數(shù)據(jù)(要輸出的字符)寫到lcd的寄存器中while(h!=0) /對不為0的轉(zhuǎn)化j=h%16; /將被轉(zhuǎn)化數(shù),除以16取余h=h/16; /將被除數(shù)除以

33、16(短除法相同)if(j9) /判斷轉(zhuǎn)換后的數(shù)據(jù)是否大于10 ai=j+55; /將轉(zhuǎn)化后的數(shù)據(jù)轉(zhuǎn)換成字符型i+;set_lcd_pos(0x40); /lcd輸出位置設(shè)置while(i0) write_lcd_data(a-i); /將數(shù)據(jù)寫入到lcd的寄存器中zz+;void fun1(double p) / *8進(jìn)制轉(zhuǎn)換函數(shù)*/char a15,i=0;long h;h=(long)p;if(h=0) /判斷要轉(zhuǎn)換的數(shù)據(jù)是否為0a0=0+48; /為0則,將0的字符型存入數(shù)組set_lcd_pos(0x40); /lcd輸出位置設(shè)置write_lcd_data(a0); /將數(shù)據(jù)寫入到

34、lcd的寄存器中 while(h!=0) /對不為0的轉(zhuǎn)化ai=h%8+48; /將轉(zhuǎn)化后的數(shù)據(jù)轉(zhuǎn)換成字符型h=h/8; /將被除數(shù)除以8(和短除法相同)i+;set_lcd_pos(0x40); /lcd輸出位置設(shè)置while(i0)write_lcd_data(a-i); /將數(shù)據(jù)寫入到lcd的寄存器中zz+;void def() /*算術(shù)函數(shù)*/int s;uchar *q,*p,i;char e=0,g,t=1;double f,a=0,b=0,j; /*f為小數(shù)位*/p=date1;if(date10=-) /判斷是否為負(fù) t=0-1;p+; /指向下一位for(q=p;*q=0;q

35、+) /*計(jì)算a的值*/a=a*10+(*q-48); /將轉(zhuǎn)化后的數(shù)據(jù)轉(zhuǎn)換成字符型 if(*q=.)q+;for(;*q=0;q+) /計(jì)算a的小數(shù)部分e+;f=(*q-48);for(g=0;g=0&*q=9;q+) /*計(jì)算b的整數(shù)部分值*/b=b*10+(*q-48);e=0;if(*q=.) /第二個數(shù)帶小數(shù)點(diǎn)q+;for(;*q=0;q+) /計(jì)算第二個數(shù)小數(shù)部分e+;f=(*q-48);for(g=0;ge;g+)f=f/10;b=b+f;for(i=0;i15;i+) /把存放輸入數(shù)的數(shù)組請0date1i=0;j=a/180*(3.1415); /把a(bǔ)的值轉(zhuǎn)換成弧度,方便三角函

36、數(shù)運(yùn)用s=(int)a; /把a(bǔ)的值強(qiáng)制轉(zhuǎn)換成整形 switch (m) /判斷具體要操作的步驟,并進(jìn)行相關(guān)操作case c : c=cos(j); break; /進(jìn)行cos運(yùn)算case s : c=sin(j); break; /進(jìn)行sin運(yùn)算case t : c=tan(j); break; /進(jìn)行tan運(yùn)算case + : c=a+b; break; /進(jìn)行加法運(yùn)算case - : c=a-b; break; /進(jìn)行減法運(yùn)算case * : c=a*b; break; /進(jìn)行乘法運(yùn)算case / : c=a/b; break; /進(jìn)行除法運(yùn)算case # : c=sqrt(a); br

37、eak; /進(jìn)行開根號運(yùn)算case y : c=pow(a,b); break; /求x的y次方case x : fun1(a); break; /進(jìn)行8進(jìn)制轉(zhuǎn)換case x : fun2(a); break; /進(jìn)行16進(jìn)制轉(zhuǎn)換case k : c=log(a); break; /ln計(jì)算case $ : c=fun3(s); break; /階乘運(yùn)算default : write_lcd_com(0x01); /把lcd顯示屏清屏lcd_string(0x00,error); /沒有相關(guān)操作,提示錯誤void out() /計(jì)算器輸出操作函數(shù)*/double b,j,m;char z=0,i,g,p,k=0;

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論