⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 关于msp430的简单计算器程序.txt

📁 关于MSP430的简单计算器程序 本人最新整理出来的工作代码 和大家分享交流
💻 TXT
字号:
#include <msp430x44x.h> 
char speed=1; 
char key_val; 
char yunsuanfu ; 
char fuhao=1; 
unsigned char key_Map[12]={1,2,3,10,4,5,6,0,7,8,9,11}; 
#define LED_IN_USE 6 
/*****************************************************/ 
/*    数据定义                                         */ 
/*****************************************************/ 
const unsigned char NUM_LED[20]= 
                        {0xd7,0x14,0xcd,0x5d,0x1E,   // 0 ~ 4 
                        0x5b,0xdb,0x15,0xdf,0x5f,    // 5 ~ 9 
                        0x9f,0xda,0xc3,0xdc,0xcb,    // a ~ e 
                        0x8b,0x00,0x40,0x8};                   
//f,0x00使LED不显示 


unsigned char led_Buf[LED_IN_USE];   // LED显示缓冲区 , 
                                     // 存放要显示数据 
unsigned char led_Ctrl; 
/******************************************************* 
*      模块初始化 
*******************************************************/ 
void init_LED(void){ 
     char tmpv; 
     P3DIR   = 0xff;     // 设置 p3 输出 
     P3OUT   = 0x00;     // 设置 初始值为0 
     P4DIR |= 0x03;     // 设置 p4.0,p4.1 输出 
     P4OUT &= 0xfc;     // 设置初始值 
     led_Ctrl=0;// led_Ctrl用于控制那个LED可显示 
     for(tmpv=0;tmpv<LED_IN_USE;tmpv++) 
     {                  // 初始化缓冲区 
       led_Buf[tmpv] = 0x12; 
     } 

} 


/**************************************************** 
*      LED 显示   ,该函数可以放到定时器中断中 
****************************************************/ 
void delay   (unsigned long v) 
{ 
while (v!=0) v--; 
} 

void led_Display(){ 
     unsigned tmp,i ; 
       tmp=0x01; 
       for(i=0;i<6;i++) 
       { 
       tmp     = 0x01; 
       P3OUT   = NUM_LED[led_Buf[led_Ctrl]];   // 设置显示值 
       P4OUT |= 0x02;                         // 打开数据锁存器 
       P4OUT &= 0XFD;                         // 关闭数据锁存 
       P3OUT   = ~(tmp<<i);             // 设置那只LED显示 
       P4OUT   |= 0x01;                        // 打开控制锁存 
       P4OUT   &= 0XFE;                        // 关闭控制锁存 
       delay(300); 

       led_Ctrl= (led_Ctrl +1) % LED_IN_USE; // 设置下一个要显示的LED 
       } 

} 


char key_j(void) 
{ 
P1DIR=0X0E; 
P1OUT=0X00; 
return(P1IN&0XF0); 
} 

void check_key(void) 
{ 
unsigned char row,col,tmp1,tmp2; 
tmp1=0x08; 
for(row=0;row<3;row++) 
{ 
   P1OUT |=0X0E; 
   P1OUT-=tmp1; 
   tmp1=tmp1/2; 
   if((P1IN&0XF0)<0XF0) 
   { 
    tmp2=0X80; 
    for(col=0;col<0x04;col++) 
    { 
     if((P1IN&tmp2)==0x00) 
     { 
      key_val=key_Map[row*4+col]; 
      if(fuhao==1) 
        fuhao=0; 
      else 
        fuhao=1; 
      return; 
     } 
     tmp2/=2; 
    } 
   } 
} 
} 

void key() 
{ 
   if(key_j()!=0xf0) 
       led_Display(); 
   delay(300); 
   if(key_j()!=0xf0) 
     check_key(); 
   key_loop: 
     if(key_j() !=0xf0) 
       goto key_loop; 
} 

void dateclear(void) 
{ 
char i; 
for(i=0;i<6;i++) 
led_Buf[i]=0x12; 
return; 
} 

int input_date(void) 
{led_Display(); 
   char i,t=fuhao; 
   int date=0; 
input_data_loop: 
   for(i=0;i<6;i++) 
   { 
    while(t==fuhao) 
    { led_Display(); 
      key(); 
    } 
    t=fuhao; 
    if(key_val==11) 
    {    dateclear(); 
     return date; 
    } 
    else 
         if(key_val != 10) 
   { 
           led_Buf[i]=key_val; 
        date=date*10+led_Buf[i]; 
        led_Display(); 
   } 
   else 
             if(key_val==10) 
    { 
                 dateclear(); 
              led_Display(); 
              goto input_data_loop; 
    } 
   } 
   return date; 
} 

main(void) 
{ 
int t=fuhao; 
char i=0; 
int a,b,rusult; 
WDTCTL=WDTHOLD+WDTPW; 
init_LED(); 
led_Display(); 
while(1) 
{ 
   a=input_date(); 
   b=input_date(); 
m_loop: 
   while(t==fuhao) 
   {led_Display(); 
    key(); 
   } 
   yunsuanfu=key_val; 
   t=fuhao; 
n_loop: 
    while(t==fuhao) 
    { led_Display(); 
      key(); 
    } 
    t=fuhao; 
   if(key_val==11) 
   dateclear(); 
   else 
    goto n_loop; 
   switch(yunsuanfu) 
   { 
   case 1: 
    rusult=a+b; 
    break; 
   case 2: 
    rusult=a-b; 
    break; 
   case 3: 
    rusult=a*b; 
    break; 
   case 4: 
    rusult=a/b; 
    break; 
   default:goto m_loop; 
           break; 
   } 

int p=rusult,k=0,d[6]; 
while (p) 
{ 
   d[k]=p%10; 
   p/=10; 
   k++; 
} 
for(int l=0;l<k;l++) 
   led_Buf[l]=d[k-l-1]; 
while(t==fuhao) 
{key(); 
   led_Display(); 
} 
   init_LED(); 
} 
} 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -