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

📄 main.c

📁 含从0开始计数
💻 C
字号:

#include "msp430x41x.h"

#define   R13   0X0020
#define   R23   0x0040
#define   R33   0x0080
#define   COM1  0x0004
#define   COM2  0x0008
#define   COM3  0X0010    

#define   SegA     0x01     
#define   SegB     0x02
#define   SegC     0x04
#define   SegD     0x80
#define   SegE     0x40
#define   SegF     0x10
#define   SegG     0x20
#define   SegH     0x08

#define  D0    SegA+SegB+SegC+SegD+SegE+SegF
#define  D1    SegB+SegC
#define  D2    SegA+SegB+SegD+SegE+SegG
#define  D3    SegA+SegB+SegC+SegD+SegG
#define  D4    SegB+SegC+SegF+SegG
#define  D5    SegA+SegC+SegD+SegF+SegG
#define  D6    SegA+SegC+SegD+SegE+SegF+SegG
#define  D7    SegA+SegB+SegC
#define  D8    SegA+SegB+SegC+SegD+SegE+SegF+SegG
#define  D9    SegA+SegB+SegC+SegD+SegF+SegG
#define  E     SegA+SegD+SegE+SegF+SegG
#define  R     SegA+SegB+SegC+SegE+SegF+SegG
#define  H     SegB+SegC+SegE+SegF+SegG
#define  L     SegD+SegE+SegF

int dirD[10]={D0,D1,D2,D3,D4,D5,D6,D7,D8,D9};     //定义十个显示数字;


//初始化液晶
void LCDinitial()
{
  int i;
  for(i=0;i<10;i++)          
    LCDMEM[i]=0;    
  
  P5SEL=R33+R23+R13+COM1+COM2+COM3;
  LCDCTL=LCDSG0_2+LCD4MUX+LCDON;
  
  BTCTL=BTSSEL+BTDIV+BTIP1+BTIP2+BTFRFQ0;     //fLCD为512Hz,BT的中断置位时间间隔为2秒。????????
}  


//显示延时子程序:
void showdelay(d,l)
{
  int i,j;
  for(i=0;i<d;i++)
    for(j=0;j<l;j++)
      ;
}


//显示子程序,用来显示要输出的数据
void show(int m,long int n)       //m为不需要的LCD段数
{
  unsigned char i,k;
  long int j=1;
  for(k=0;k<(7-m);k++)            //确定cnt需要对10 100 or1000除
    j=j*10;
  
  for(i=0;i<m;i++)
    LCDMEM[i]=0;

  for(i=m;i<8;i++)
    { 
      LCDMEM[i]=dirD[(n/j)%10];
      j=j/10;
    }
}


//显示HELLO;
void showhello()
{
  LCDMEM[0]=H;
  LCDMEM[1]=E;
  LCDMEM[2]=L;
  LCDMEM[3]=L;
  LCDMEM[4]=D0;
  showdelay(300,3000);
}


//显示ERR
void showerr()
{
  LCDMEM[0]=0;
  LCDMEM[1]=E;
  LCDMEM[2]=R;
  LCDMEM[3]=R;
  LCDMEM[4]=0;
  showdelay(300,300);
}


//显示服务程序,给出显示需要几位数码管
int showsv(long int k)
{
  int div[8];                 //存放cnt的每一位(十进制)
  int i;
  signed int d=-1;
  long int j=10000000;
  
  for(i=0;i<8;i++)
  {
    div[i]=(k/j)%10;
    j=j/10;
  }
   
  do d++;                       
  while(div[d]==0 && d<7);     //查看cnt是几位数,来确定需要的LCD段数
  return d;                    //返回的是不需要的LCD段数
}


//鸣叫子程序BELL1
void BELL1()
{
  P1DIR|=BIT2;
  P1IE&=~BIT2;
  P1OUT|=BIT2;
  showdelay(250,500);
  P1OUT&=~BIT2;
  ;
}


//主程序;
int main()
{
  WDTCTL = WDTPW + WDTHOLD;
  SCFQCTL=31;
  SCFI0=0;
  FLL_CTL0|=XCAP18PF;
  
  LCDinitial();                       //初始化LCD
  showhello();                        //显示HELLO
  
//  P1DIR&=~BIT3;
//  P1SEL&=~BIT3;
//  P1IE&=~BIT3;
  
  long int cnt=0;
  int lcdnum;                       //需要的LCD个数
  int sign=0;
  
  P1DIR&=~BIT3;
  P1DIR&=~BIT4;
  P1SEL&=~BIT3;
  P1SEL&=~BIT4;
  P1IE=0X00;
  
  while(cnt<11111112)
  {
    if(!(P1IN&BIT3))
    {
      if(!(P1IN&BIT4))
        BELL1();
      else if(P1IN&BIT4)
      {
        if(sign==1)
        {
          cnt+=1;
          sign=0;
        }
        else if(sign==0)
          ;
      }
    }
    else if(!(P1IN&BIT4))
        sign=1;
  
  lcdnum=showsv(cnt);
  show(lcdnum,cnt);
  }
  
  LCDinitial();
  showerr();
}

⌨️ 快捷键说明

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