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

📄 4250可调电子表.txt

📁 精确到秒
💻 TXT
字号:
/*精确到秒,上电后开始走表,按键K2选择调整位,闪烁后按键K1加,按键K2第四次回到现实状态*/

#include  <msp430x42x0.h>
// LCD segment definitions.
#define h 0x80
#define e 0x40
#define f 0x20
#define c 0x10
#define d 0x08
#define g 0x04
#define b 0x02
#define a 0x01

const unsigned char lcd_table[] = {                   // definitions for digits
  a+b+c+d+e+f,                              // Displays "0"
  b+c,                                      // Displays "1"
  a+b+d+e+g,                                // Displays "2"
  a+b+c+d+g,                                // Displays "3"
  b+c+f+g,                                  // Displays "4"
  a+c+d+f+g,                                // Displays "5"
  a+c+d+e+f+g,                              // Displays "6"
  a+b+c,                                    // Displays "7"
  a+b+c+d+e+f+g,                            // Displays "8"
  a+b+c+d+f+g                               // Displays "9"
};
static  unsigned char sec;            //秒寄存器
static  unsigned char min;            //分寄存器
static  unsigned char hour;           //小时寄存器
void delay(unsigned int n)
{
    unsigned int m;
    unsigned int q=0;
    while(q<n) 
    {
        for(m=0;m<280;m++) ;     //为什么是560
	   q++;
	}
}   
unsigned char shezhi_flag,wei,timeadd_flag;
unsigned char add;
void rtc(void);             
void display_rtc(void);
void display_dec(unsigned char  i,unsigned char  j);
//////void led_display(unsigned char i);
//-------------------------------------------------------------
//---------------主程序----------------------------------------
//-------------------------------------------------------------
void shezhi(void)
{        
  switch(wei)
  {case 1:delay(300);
   LCDMEM[0]=0x00;LCDMEM[1]=0x00;
   break;
   case 2:delay(300);
    LCDMEM[2]=0x00;LCDMEM[3]=0x00;
   break;
   case 3: delay(300);
    LCDMEM[4]=0x00;LCDMEM[5]=0x00;
    break;
  }
  delay(300);
  display_rtc();
}
void timeadd(void)
{
if(timeadd_flag==1)
{
  switch(wei)
           {
          case 1:  sec=sec+2;
		if (sec >= 120)
                  sec = 0;break;
		case 2:  min++;
		         if (min>= 60)
                  min = 0;break;
		case 3:  hour++;
		         if (hour>= 24)
                 hour = 0;break;
          }
        
  timeadd_flag=0;
}
display_rtc();
}

void main(void)
{  
    int i;
    WDTCTL = WDTPW + WDTHOLD;
    BTCTL=BTSSEL+BT_ADLY_500+BTFRFQ1;        //BT 0.5S中断
    IE2|=BTIE;
   P5SEL=0xfc;
    LCDACTL=LCDON+LCD4MUX+ LCDFREQ_128;              //LCD模块初始化
    LCDAPCTL0 = 0x0F;
    P1DIR &=0xf9;
    ////P1IES |=0x06;
    P1IE |=0x06;
    
    for (i=0; i<8; ++i)                      //LCD 清屏 
    LCDMEM[i] = 0x00;
    _EINT();
    while(1)
    { if(shezhi_flag)
      shezhi();
     if(timeadd_flag)
       timeadd();
  }   
  }    
//------------------------------------------------------
// Basic Timer interrupt service routine
#pragma vector = BASICTIMER_VECTOR
__interrupt void basic_timer(void)
{if(shezhi_flag==0)
{rtc();                                   //时钟处理
display_rtc();}                           //时钟LCD显示
} 
//------------------------------------------------------

#pragma vector=PORT1_VECTOR
  __interrupt  void P1(void)
  {P1IFG=0;
    unsigned char temp; 
  temp=P1IN;
  if((temp&0x02)==0||(temp&0x04)==0)
  { 
    delay(10);
    temp=P1IN;
    if((temp&0x04)==0)
       {if(shezhi_flag==0)
         shezhi_flag=1;
        switch(wei)
	{
	case 0:wei=1;break;
	case 1:wei=2;break;
	case 2:wei=3;break;
	case 3:wei=0;
        shezhi_flag=0;break;
        }
       }
  if((temp&0x02)==0)
  {if(shezhi_flag==1)
    timeadd_flag=1;}
  } 
  
  }
  

  
 
//-------------------------------------------------------
//-------时钟处理程序------------------------------------
//-------------------------------------------------------
void  rtc (void)                                
{ 
  if (++sec < 120)
    return;
  sec = 0;
  if (++min < 60)
    return;
  min = 0;
  if (++hour < 24)
    return;
  hour = 0; 
} 
//--------------------------------------------------------
//--------时钟LCD显示程序---------------------------------
//--------------------------------------------------------
void display_rtc(void)
{ int i;
  i=sec;
  i=i>>1;
  display_dec(0,i);
  i=min;
  display_dec(2,i);
  i=hour;
  display_dec(4,i); 
  LCDMEM[6]=0x00;  
}
//--------------------------------------------------------
//--------LCD显示处理程序---------------------------------
//--------------------------------------------------------
void display_dec(unsigned char  i,unsigned char  j)
{
 LCDMEM[i]=lcd_table[j%10]+0x80;
 LCDMEM[i+1]=lcd_table[j/10];
}
     

⌨️ 快捷键说明

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