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

📄 shizhong.c

📁 基于msp430单片机的1602液晶时钟程序,并带有可调日期
💻 C
字号:

#include "msp430x22x4.h"
void keyprocess(void);
//#define uchar unsigned char;
//#define uint unsigned int;
char a[]="01234567890";
char *p1=a+2,*p2=a,*p3=a,*p4=a,*p5=a,*p6=a,*p7=a,*p8=a,*p9=a,*p10=a,*p11=a,*p12=a,*p13=a,*p14=a;

void delay(void)    //延时子程序
{
  int z;
  for(z=400;z>0;z--);
 }

void  write_com(unsigned int  COM)    //写指令程序
{
  P3OUT&=~BIT0;
  P4OUT=COM;
  delay();  //5ms 
  P3OUT|=BIT1;
  delay();  //5ms
  P3OUT&=~BIT1;
}

void write_data(int DAT)             //写数据程序
{
  P3OUT|=BIT0;
  P4OUT=DAT;
  delay();
  P3OUT|=BIT1;
  delay();  //5ms
  P3OUT&=~BIT1;
}

void init()
{    
  write_com(0x38);        //显示模式设置
  write_com(0x0c);       //显示及光标设置
 write_com(0x06);
  write_com(0x01);      //清屏
  //write_com(0x0c);
}                                                                                                                             

#pragma vector = PORT1_VECTOR 
__interrupt void PORT1_VECTOR1(void)      //I/O口中断
{
  delay();
keyprocess();
//_BIC_SR_IRQ(LPM3_bits+GIE); 
P1OUT=0x00;
P1IFG=0X0;     
}



void keyprocess(void)    //键盘查询
{ 
   P1OUT=0x0e;
   if((P1IN&0xf0)==0xe0)p4++;
     if(p4==(a+10))
     {
     
     p4=a;
     }
 
   else if((P1IN&0xf0)==0xd0)p6++;
     if(p6==(a+10)) p6=a,p5++;
 
     if(p5==(a+1)&&p6==(a+2))
       {
        p5=a;
        p6=a;
       
       }
      
 
   else if((P1IN&0xf0)==0xb0)p8++;
   
     if(p8==(a+10))
   {
     p8=a;
     p7++;
   }
  
   if(p7==(a+3)&&p8==a)
     { 
       p7=a;
       p8=a;
     
     }
              
   
   else if((P1IN&0xf0)==0x70)p10++;
  
     if(p10==(a+10)) p10=a, p9++;
      if(p9==(a+2)&&p10==(a+4))
      {
       p9=a;
       p10=a;
       
      }
   


     P1OUT=0x0d;
      if((P1IN&0xf0)==0xe0)p12++;
        if(p12==(a+10)) p12=a, p11++;
         if(p12==a&&p11==(a+6))
          { 
            p12=a;
            p11=a;
         
                 
              }

        else if((P1IN&0xf0)==0xd0)p14++;   
           if(p14==(a+10)) p14=a,  p13++;
             if(p13==(a+6)&&p14==a)
             {
               p13=a;
               p14=a;
             
                             }
            
   /*else if((P1IN&0xf0)==0xb0)*p1++;
   else if((P1IN&0xf0)==0x70)*p1++;
     else
     {
       P1OUT=0x0b;
        if((P1IN&0xf0)==0xe0)*p1++;
       else if((P1IN&0xf0)==0xd0)*p1++;
    else if((P1IN&0xf0)==0xb0)*p1++;
   else if((P1IN&0xf0)==0x70)*p1++;
   else
   {
    P1OUT=0x07;
     if((P1IN&0xf0)==0xe0)*p1++;
   else if((P1IN&0xf0)==0xd0)P4OUT=0x0d;
    else if((P1IN&0xf0)==0xb0)P4OUT=0x0e;
   else if((P1IN&0xf0)==0x70)P4OUT=0x0f;
   }
     }*/
  
}


void main()      //主程序
{           
 // int num;
  WDTCTL=WDTPW+WDTHOLD;                   //关看门狗
  BCSCTL1 =CALBC1_1MHZ;                   //设定DCO为1MHZ
  DCOCTL =CALBC1_1MHZ;
  TACTL=TASSEL_1+TACLR;   
  P1IE =0;
  P1IES =0;
  P1IFG =0;
  P1DIR=0x00;//P1口为输入
  P1SEL=0;// P1口为通用I/O口
  P1DIR=0x0f;//低四位输出
  P1OUT=0x00;//输出低电平
  P1IE =0xf0;//P1.0设置为中断
  P1IES =0xf0;//上升沿触发
  P4SEL=0;
  P4DIR=0XFF;
 // P4OUT=0;
  P3SEL=0;
  P3DIR|=BIT0+BIT1;//P3.0>>RS; P3.1>>E
  TACCR0 = 32768;                          //计数值为32768个ACLK周期  
  TACTL |=MC0; 
  TACCTL0 |=CCIE; 
  _BIS_SR(GIE);   
  delay();
  init();
  while(1)
  {
  write_com(0x80+0x03);
  delay();
  write_data(*p1);
  
  write_com(0x80+0x04);
  delay();
  write_data(*p2);
  
 write_com(0x80+0x05);
  delay();
  write_data(*p3);
  
 write_com(0x80+0x06);
  delay();
  write_data(*p4);
  
  write_com(0x80+0x07);
  delay();
  write_data(' ');
  
  write_com(0x80+0x08);
  delay();
  write_data(*p5);
  
  write_com(0x80+0x09);
  delay();
  write_data(*p6);
  
   write_com(0x80+0x0a);
  delay();
  write_data(' ');
  
   write_com(0x80+0x0b);
  delay();
  write_data(*p7);
  
   write_com(0x80+0x0c);
  delay();
  write_data(*p8);
  
   write_com(0x80+0x44);
  delay();
  write_data(*p9);
  
   write_com(0x80+0x45);
  delay();
  write_data(*p10);
  
   write_com(0x80+0x46);
  delay();
  write_data(':');
  
   write_com(0x80+0x47);
  delay();
  write_data(*p11);
  
   write_com(0x80+0x48);
  delay();
  write_data(*p12);
  
   write_com(0x80+0x49);
  delay();
  write_data(':');
  
   write_com(0x80+0x4a);
  delay();
  write_data(*p13);
  
   write_com(0x80+0x4b);
  delay();
  write_data(*p14);
  
  
  
  
 // for(num=0;num<1;num++)
	//{
          //write_com(0x18);
          //delay();
	
        //}
  
}
      }


#pragma vector = TIMERA0_VECTOR           //ccr0中断服务
__interrupt void ta0_isr(void)
{
         p14++;
         if(p14==(a+10))
           {
             p14=a;
             p13++;
           }
         if(p13==(a+6))p14=a;
             if(p13==(a+6)&&p14==a)
             {
               p13=a;
               p14=a;
               p12++;
             }
                if(p12==(a+10))
                  {
                     p12=a;
                     p11++;
                  }
                     if(p11==(a+6))p12=a;
                     if(p12==(a+10)&&p11==(a+6))
                        { 
                          p12=a;
                          p11=a;
                          p10++;
                        }
                          if(p10==(a+10))
                            { 
                               p9++;
                               p10=a;
                             }
                          if(p9==(a+2))p10=a;
                          if(p9==(a+2)&&p10==(a+4))
                            {
                                p9=a;
                                p10=a;
                                p11=a;
                                p12=a;
                                p13=a;
                                p14=a;
                                p8++;
                             }
                          if(p8==(a+10))
                             {
                                p8=a;
                                p7++;
                             } 
                                if(p7==(a+3))p8=a;
                                if(p7==(a+3)&&p8==(a+1))
                                  { 
                                    p7=a;
                                    p8=a;
                                    p6++;
                                  }
                                    if(p6==(a+10))
                                     {
                                       p6=a;
                                       p5++;
                                     }
                                       if(p5==(a+1))p6=a;
                                       if(p5==(a+1)&&p6==(a+2))
                                        {
                                          p5=a;
                                          p6=a;
                                          p4++;
                                        }
                                          if(p4==(a+10))
                                           {
                                             p1=(a+2);
                                             p2=a;
                                             p3=a;
                                             p4=a;
                                             p5=a;
                                             p6=a;
                                             p7=a;
                                             p8=a;
                                             p9=a;
                                             p10=a;
                                             p11=a;
                                             p12=a;
                                             p13=a;
                                             p14=a;
                                           
                                             
                                           }
            
}       
                             
                                  
                 
            

⌨️ 快捷键说明

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