收藏 分销(赏)

msp430单片机实现计算器功能.doc

上传人:w****g 文档编号:10821438 上传时间:2025-06-18 格式:DOC 页数:7 大小:41.51KB 下载积分:6 金币
下载 相关 举报
msp430单片机实现计算器功能.doc_第1页
第1页 / 共7页
msp430单片机实现计算器功能.doc_第2页
第2页 / 共7页


点击查看更多>>
资源描述
Msp430简易计算器设计 设计任务: 1. 实现计算器基本“+,-,*,/”运算功能。 2. 八个数码管,第一位显示符号位,第二位空置,剩余六位显示数字,结果溢出显示“EER”; 3. 有自己独立的运算特色 设计目的: 学习使用单片机内部的I/O功能,熟悉I/O与键盘矩阵和数码管的连接,熟练掌握单片机I/O的编程。 设计方案: 使用数组储存和调用内部数据,利用子函数实现各种运算功能,另外添加阶乘factorial()函数。 程序代码: #include <msp430x14x.h> #define uchar unsigned char #define uint unsigned int unsigned char leddata[24] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x8f,0xbf,0x89,0xb9,0xff,0x86,0xaf,0xcf}; unsigned char time[8] = {20,20,0,0,0,0,0,0};//初始数码管 unsigned char getkey(void); unsigned int qiushu(); long factorial(long a); void qingping(void); void fenjie(); void delay(unsigned int asdf) { for(uint asd=0;asd<asdf;asd++); } ; /*************************主函数************************/ void main(void) { uchar flag=0,i=9; WDTCTL = WDTPW + WDTHOLD; //关闭看门狗 P5DIR|=BIT7; P5OUT&=~BIT7; P4DIR=0xff; P2DIR=0xff; P1DIR=0x0F; P1OUT=0xff; while(1) { long p,q,r; time[1]=20; i=getkey(); if(i<10) { time[2]=time[3]; time[3]=time[4]; time[4]=time[5]; time[5]=time[6]; time[6]=time[7]; time[7]=i; } else { switch(i) { case 12:time[0]=16; p=qiushu(); qingping(); flag=12; break; case 13:time[0]=17; p=qiushu(); qingping(); flag=13; break; case 14:time[0]=18; p=qiushu(); qingping(); flag=14; break; case 15:time[0]=19; p=qiushu(); qingping(); flag=15; break; case 10:time[0]=23; p=qiushu(); qingping(); flag=10; break; case 11:{q=qiushu(); //做相应的计算求值 qingping(); switch(flag) {case 12:r=p+q;break; case 13:r=p-q;break; case 14:r=p*q;break; case 15:r=p/q;break; case 10:r=factorial(p);break; } if((r>999999)||(r<0)) { qingping(); time[5]=21; time[6]=21; time[7]=22; } else fenjie(r);} break; }} for(uchar j=0;j<=7;j++) //显示 { P4OUT=0x80>>j; P2OUT=leddata[time[j]]; delay(200); } } }//end of main unsigned int qiushu() //转化成相应的十进制整数 {unsigned int y; y=time[2]*100000+time[3]*10000+time[4]*1000+time[5]*100+time[6]*10+time[7]; return y; } void qingping(void) //清除屏幕 {unsigned int a; for(a=7;a>1;a--) time[a]=0; } void fenjie(long r) //提取十进制整数各位数值,并显示 { time[7]=r%10; time[6]=r/10%10; time[5]=r/100%10; time[4]=r/1000%10; time[3]=r/10000%10; time[2]=r/100000%10; } long factorial(long a) { long x,i; x=a; for(i=1;i<a;i++) { x=x*(a-i); } return(x); } uchar getkey(void) //获取键值 { uchar z,x=16; P1OUT=0x00; if((!(P1IN&BIT6))||(!(P1IN&BIT7))||(!(P1IN&BIT5))||(!(P1IN&BIT4))) { delay(10000); if((!(P1IN&BIT6))||(!(P1IN&BIT7))||(!(P1IN&BIT5))||(!(P1IN&BIT4))) { for(z=0;z<=1;z++) { P1OUT=~BIT0; if(!(P1IN&BIT7)) {x=3;break;} P1OUT=~BIT0; if(!(P1IN&BIT6)) {x=7;break;} P1OUT=~BIT0; if(!(P1IN&BIT5)) {x=11;break;} P1OUT=~BIT0; if(!(P1IN&BIT4)) {x=15;break;} //line 1 P1OUT=~BIT1; if(!(P1IN&BIT7)) {x=2;break;} P1OUT=~BIT1; if(!(P1IN&BIT6)) {x=6;break;} P1OUT=~BIT1; if(!(P1IN&BIT5)) {x=10;break;} if(!(P1IN&BIT4)) {x=14;break;} //line3 P1OUT=~BIT3; if(!(P1IN&BIT6)) {x=4; break;} P1OUT=~BIT3; if(!(P1IN&BIT7)) {x=0; break;} P1OUT=~BIT3; if(!(P1IN&BIT5)) {x=8; break;} P1OUT=~BIT3; if(!(P1IN&BIT4)) {x=12; break;} //line 2 P1OUT=~BIT2; if(!(P1IN&BIT6)) {x=5; break;} P1OUT=~BIT2; if(!(P1IN&BIT7)) {x=1; break;} P1OUT=~BIT2; if(!(P1IN&BIT5)) {x=9; break;} P1OUT=~BIT2; if(!(P1IN&BIT4)) {x=13; break;}} while((!(P1IN&BIT6))||(!(P1IN&BIT7))||(!(P1IN&BIT5))||(!(P1IN&BIT4))) for(uchar j=0;j<=7;j++) { P4OUT=0x80>>j; P2OUT=leddata[time[j]]; delay(500); } delay(20000); while((!(P1IN&BIT6))||(!(P1IN&BIT7))||(!(P1IN&BIT5))||(!(P1IN&BIT4))) for(uchar j=0;j<=7;j++) { P4OUT=0x80>>j; P2OUT=leddata[time[j]]; delay(500); } delay(20000); } } return (x); }
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 通信科技 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服