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

📄 main.c

📁 在一段时间内
💻 C
字号:
/******************************************************************************
*
* 通过键盘、LCD来进行超低功耗实验
* 在一段时间内,如果用户没有进行按键操作,系统将进入“睡眠”--低功耗状态
* 用户按键后,系统从低功耗状态转到正常的工作状态
* 在非低功耗状态下,程序接收键盘按键执行加法器操作(因为键盘和LCD限制不能实现复杂
* 的功能,如乘法、减法、除法等).
*
*******************************************************************************/

#include <msp430x44x.h>

#include "lcd.c"
#include "keyBoard12.c"

/*******************************************************************************/
 unsigned int wait_Time;
 unsigned long  num1,num2;
/*******************************************************************************/

extern void sleep_Mode();
void init_BT();
void show_Data(unsigned long);

/*******************************************************************************
*  main()函数
********************************************************************************/
void main(void)
{
    char len=0;
    WDTCTL = WDTHOLD + WDTPW;         //停止看门狗
    init_BT();                        //初始化Basic Timer 
    init_Keyboard();                  //键盘初始化
    init_LCD();                       //LCD初始化
    _EINT();                          //开中断
    while(1)
    {   
        lcd_Display();                // LCD显示
        key_Event();                  // 检测键盘事件
        if(key_Flag==1)             
        {
           switch (key_val)
           {
             case 10:                 //对应 清零
                    num1=0;     
                    num2=0;  
                    len=0;
                    show_Data(num2);  // 填写0到LCD缓冲区
                    break;
             case 11:                 // 对应 + 
                   num1= num1 + num2;
                   show_Data(num1);   // 显示上次运算结果
                   num2=0;
                   len=0;
                   break;
            default:                  // 数字 0到9
                   len += 1;
                   if(len>7) break;   // 限制输入数字个数
                   num2=num2*10+key_val;
                   show_Data(num2);   // 显示当前输入数字
                   break;             
           }
           
           key_Flag = 0;
           wait_Time = 0;             // 重新设置wait_Time
       }
       
       
    }
    
}
/********************************************************************
*
*   按键触发中断后,设置CPU、LCD、键盘的正常工作
*
*********************************************************************/
#pragma vector = PORT1_VECTOR
__interrupt void active_mode()
{   
    
    P1IFG &= 0x00;   //清除标识
    
    LCDCTL |= 0x01;   // 重新初始化LCD,LCDON = 1
   
    P1IE &= 0x01; //取消中断使能
    init_Keyboard();
   
    IE2   |= 0x80;  // 使能bt中断                       
   
    __bic_SR_register_on_exit(LPM0_bits); // 退出低功耗模式
}
/********************************************************************
*
*   Basic Timer 中断向量
*********************************************************************/
#pragma vector = BASICTIMER_VECTOR
__interrupt void get_Time()
{
  wait_Time += 1;         //  计数器加1
  if(wait_Time >= 40000)  // 是否等待时间到10s
  {                       //
     wait_Time = 0;       // 等待时间计数器清零
     sleep_Mode();        // 处理设备进入适当状态
     __bis_SR_register_on_exit(LPM0_bits);// cpu进入低功耗
  }
}
/********************************************************************
*
*   初始化Basic Timer 
*
********************************************************************/
void init_BT()
{
    BTCTL  =BT_MDLY_0_25;                   //  Basic Timer 1 中断频率
    IE2   |= 0x80;                          // 使能bt中断
}
/********************************************************************
*
*      把十进制数的每一位都填充到LCD缓冲
*
*********************************************************************/
void show_Data(unsigned long num)
{
    char tmp1;
    for(tmp1=0;tmp1<7;tmp1++)
    {
       lcd_Buf[tmp1] = num%10;   // 依次取数
       num = num/10;             // 数字除以10
    }
}

⌨️ 快捷键说明

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