msp430計(jì)算器設(shè)計(jì)_第1頁(yè)
msp430計(jì)算器設(shè)計(jì)_第2頁(yè)
msp430計(jì)算器設(shè)計(jì)_第3頁(yè)
msp430計(jì)算器設(shè)計(jì)_第4頁(yè)
msp430計(jì)算器設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩8頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、#include msp430x14x.h#include double r;#include duoxiangshi.h#define RS_1 P3OUT|=BIT0#define RS_0 P3OUT&=BIT0#define RW_1 P3OUT|=BIT1#define RW_0 P3OUT&=BIT1#define E_1 P3OUT|=BIT2#define E_0 P3OUT&=BIT2#define DATA P4OUT#define data_dir P4DIR#define KEYDIR P5DIR#define KEYOUT P5OUT#define KEYIN P5I

2、N#define led P2OUT#define LED1 P2DIR=0XFF;#define uchar unsigned char#define uint unsigned intchar table116=1;char table216= ;char flag;int flag1;/*延時(shí)*/void delay(void) unsigned int i,j; for(i=0;i50;i+) for(j=0;j10;j+) ; /*消抖延時(shí)*/void delay_key(void) int i,j; for(i=0;i500;i+) for(j=0;j100;j+) ; void

3、delayms(uchar ms) int i,j; for(i=0;ims;i+) for(j=0;j157;j+);int key_column_scan() int a; P5DIR = 0xff; P5OUT = 0x0f; P5DIR = 0X00; a = P5IN; switch(a) case 0x8f:return 4; case 0x4f:return 3; case 0x2f:return 2; case 0x1f:return 1; int key_line_scan() int a,column,key=-1,line; P5DIR = 0xff; P5OUT = 0

4、xf0; P5DIR = 0X00; a = P5IN; if(a!=0xf0) column = key_column_scan(); switch(a) case 0xf8:line=4;break; case 0xf4:line=3;break; case 0xf2:line=2;break; case 0xf1:line=1;break; key=(line-1)*4+column; delay_key(); /延時(shí)消抖 for(;) P5DIR = 0xff; /軟件消抖 P5OUT = 0xf0; P5DIR = 0X00; a = P5IN; if(a=0xf0) break;

5、return key;/給LCD1602寫命令void write_com(uchar com) RS_0; RW_0; E_0; DATA=com; E_1; delayms(5); E_0; /給LCD1602寫數(shù)據(jù)void write_data(uchar data) RS_1; RW_0; E_0; DATA=data; E_1; delayms(5); E_0; /初始化LCD1602void lcd_init() data_dir=0xff; P3DIR|=BIT0+BIT1+BIT2; write_com(0x38); /設(shè)置16*2顯示,雙行,5*7點(diǎn)陣 write_com(0

6、x01); /清屏 write_com(0x06); /字符進(jìn)入模式;屏幕不動(dòng),字符后移 write_com(0x0f); /顯示開,光標(biāo)開,光標(biāo)閃爍 write_com(0x80); /在指定位置顯示字符串void lcd_string(uchar r,uchar c,uchar *str) /r表示行數(shù),C表示在R行的第幾位,*str表示輸入的字符串 uchar i=0; uchar DDRAM=0x80,0xc0; /LCD1602兩行的起始地址 write_com(DDRAMr|c); /設(shè)置顯示的起始位置 for(i=0;stri&i16;i+) /輸出字符串 write_data(

7、stri); for(;i16;i+) write_data( ); /一行不足時(shí)用空格填充int main( void ) / Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD; int key,m,i=0; flag=0; flag1=0; lcd_init(); while(1) key=key_line_scan(); if(key!=-1) switch(key) case 1:write_data(7);table1+i=7;break; case 2:write_data(8);table

8、1+i=8;break; case 3:write_data(9);table1+i=9;break; case 4: write_data(+);write_com(0x80+i); while(1) key=key_line_scan(); if(key!=-1) if(key=4) flag1+; if(flag1%4=0) write_data(+);write_com(0x80+i); else if(flag1%4=1) write_data(-);write_com(0x80+i); else if(flag1%4=2) write_data(*);write_com(0x80+

9、i); else if(flag1%4=3) write_data(/);write_com(0x80+i); else if(key!=4) if(flag1%4=0) write_data(+);table1+i=+;flag1=0; else if(flag1%4=1)write_data(-);table1+i=-;flag1=0; else if(flag1%4=2) write_data(*);table1+i=*;flag1=0; else if(flag1%4=3) write_data(/);table1+i=/;flag1=0; switch(key) case 1:wri

10、te_data(7);table1+i=7;break; case 2:write_data(8);table1+i=8;break; case 3:write_data(9);table1+i=9;break; case 5:write_data(4);table1+i=4;break; case 6:write_data(5);table1+i=5;break; case 7:write_data(6);table1+i=6;break; case 8: if(flag=0)write_data(#);table1+i=#;break; else write_data();table1+i

11、=;break; case 9:write_data(1);table1+i=1;break; case 10:write_data(2);table1+i=2;break; case 11:write_data(3);table1+i=3;break; case 12: if(flag=0)lcd_string(1,0,shift );flag=1;write_com(0x80+i);break; else lcd_string(1,0,);flag=0;write_com(0x80+i);break; case 13: if(flag=0)write_data(0);table1+i=0;

12、break; else write_data();table1+i=(;break; case 14: if(flag=0)write_data(.);table1+i=.;break; else write_data();table1+i=);break; case 15:write_data(=);table1+i=;break; case 16: if(flag=0)write_com(0x80+i-1);i-; else WDTCTL=0X00; if(table1i=) cal(table1); sprintf(table2,%lf,r); lcd_string(1,6,table2

13、); break; break; case 5:write_data(4);table1+i=4;break; case 6:write_data(5);table1+i=5;break; case 7:write_data(6);table1+i=6;break; case 8: if(flag=0)write_data(#);table1+i=#;break; else write_data();table1+i=;break; case 9:write_data(1);table1+i=1;break; case 10:write_data(2);table1+i=2;break; ca

14、se 11:write_data(3);table1+i=3;break; case 12: if(flag=0)lcd_string(1,0,shift );flag=1;write_com(0x80+i);break; else lcd_string(1,0,);write_com(0x80+i);flag=0;break; case 13: if(flag=0)write_data(0);table1+i=0;break; else write_data();table1+i=(;break; case 14: if(flag=0)write_data(.);table1+i=.;bre

15、ak; else write_data();table1+i=);break; case 15:write_data(=);table1+i=;break; case 16: if(flag=0)write_com(0x80+i-1);i-; else WDTCTL=0X00; if(table1i=) cal(table1); sprintf(table2,%g,r); lcd_string(1,6,table2); duoxiangshi.h/*=*函數(shù)名:多項(xiàng)式運(yùn)算*函數(shù)功能描述:實(shí)現(xiàn)多項(xiàng)式運(yùn)算*參數(shù):char型數(shù)組*返回值:double結(jié)果=*/#include#include#inc

16、ludevoid cal(char a) int i=1,j,k,m,cnt=0,t1=0,t2=0,t3=0; char nibo20=0,zhan215=0;/存放運(yùn)算符 double x,n,l,z=0,zhan315=0,0;/暫存結(jié)果 typedef struct double d1; int d2; dd; typedef struct dd data20; int top; zhan1;/存儲(chǔ)數(shù)據(jù) zhan1 *num; num=(zhan1 *)malloc(sizeof(zhan1); num-top=0; while(ai!=) if(ai=0)&(ai=0&aj=9) j

17、+; j-; for(k=i;k=0&aj=9) j+;/轉(zhuǎn)出小數(shù)點(diǎn)后的連續(xù)數(shù)字 j-; for(k=i;kdata+num-top.d1=x;/將x保存在zhan1里的結(jié)構(gòu)體組中,根據(jù)zhan1里的top值決定結(jié)構(gòu)體組中的哪一個(gè),保存在結(jié)構(gòu)體的d1里,top+1 num-datanum-top.d2=+cnt;/根據(jù)棧中的top值,將datatop中的d2賦值cnt,cnt加1cnt決定為第幾個(gè)數(shù) nibo+t1=0+num-datanum-top.d2; nibot1+1=0; /如果是數(shù)字那么就保存到結(jié)構(gòu)體里 的dd數(shù)組里的 第二個(gè)成員里 else if(ai=() zhan2+t2=a

18、i;/存儲(chǔ)( i+;/讀下一個(gè)字符 else if(ai=) j=t2;/j位于當(dāng)前。棧2中未存儲(chǔ)運(yùn)算符的位置 while(zhan2j!=()/查找前半個(gè)括號(hào) nibo+t1=zhan2j;/記錄()之間所有的運(yùn)算符 nibot1+1=0; j-; t2=j-1;/t2位于前半個(gè)括號(hào)的前一個(gè)位置 i+; else if(ai=+) while(t20&zhan2t2!=()/將+前的運(yùn)算符存入nibo nibo+t1=zhan2t2; nibot1+1=0; t2-; zhan2+t2=ai; i+; else if(ai=-) if(ai-1=$) a0=0; i=0; else if(a

19、i-1=() ai-1=0; ai-2=(; i=i-2; t2-; else while(t20&zhan2t2!=() nibo+t1=zhan2t2; nibot1+1=0; t2-; zhan2+t2=ai; i+; else if(ai=*|ai=/) while(zhan2t2=*|zhan2t2=/|zhan2t2=|zhan2t2=#) nibo+t1=zhan2t2; nibot1+1=0; t2-; zhan2+t2=ai; i+; else if(ai=|ai=#) while(zhan2t2=|zhan2t2=#) nibo+t1=zhan2t2; nibot1+1=0

20、; t2-; zhan2+t2=ai; i+; /開始計(jì)算 while(t20) /將棧2中所有的運(yùn)算符存入nibo中 nibo+t1=zhan2t2; nibot1+1=0; t2-; j=1;t3=0; while(j=0&niboj!=&niboj!=#)/ for(i=1;itop;i+) if(int)(niboj-0)=num-datai.d2) m=i; break; zhan3+t3=num-datam.d1; else if(niboj=+) zhan3t3-1=zhan3t3-1+zhan3t3; t3-; else if(niboj=-) zhan3t3-1=zhan3t

21、3-1-zhan3t3; t3-; else if(niboj=*) zhan3t3-1=zhan3t3-1*zhan3t3; t3-; else if(niboj=/) zhan3t3-1=zhan3t3-1/zhan3t3; t3-; else if(niboj=) zhan3t3-1=pow(zhan3t3-1,zhan3t3); t3-; else if(niboj=#) zhan3t3=sqrt(zhan3t3); j+; r=zhan3t3; malloc.h/*alloc.hmemory management functions and variables.Copyright (

22、c) Borland International 1987,1988All Rights Reserved.*/#if _STDC_#define _Cdecl#else#define _Cdeclcdecl#endif#ifndef _STDDEF#define _STDDEF#ifndef _PTRDIFF_T#define _PTRDIFF_T#ifdefined(_LARGE_) | defined(_HUGE_) | defined(_COMPACT_)typedef longptrdiff_t;#elsetypedef intptrdiff_t;#endif#endif#ifndef _SIZE_T#define _SIZE_Ttypedef unsigned size_t;#endif#endif#if

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論