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

📄 lcd_timer_a.c

📁 对液晶屏的显示驱动
💻 C
字号:

/********************
定义头文件,添加头文件
*********************/
#ifndef __LCD
#define __LCD
void LcdInit();     //lcd初始化定义//
void Timer_AInit();
void IO_Init();

#endif
//#include "lcd.h"
#include "msp430.h"   
#include "msp430x41x.h"
int i;
int sum;

/*******************************************
液晶屏的初始化
  __a__ 
 |     |b
f|__g__| 
 |     |c
e|_____|.h
    d
数据显示数组4mux驱动方式下的真植对应数组
        LCD define 初始化LCD屏
*********************************************/ 
#define COM1               (0x0004)    //必须的//
#define COM2               (0x0008)
#define COM3               (0x0010)
#define R13                (0x0020)
#define R23                (0x0040)
#define R33                (0x0080)    //必须的//

#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  Digit0    SegA+SegB+SegC+SegD+SegE+SegF
#define  Digit1    SegB+SegC
#define  Digit2    SegA+SegB+SegD+SegE+SegG
#define  Digit3    SegA+SegB+SegC+SegD+SegG
#define  Digit4    SegB+SegC+SegF+SegG
#define  Digit5    SegA+SegC+SegD+SegF+SegG
#define  Digit6    SegA+SegC+SegD+SegE+SegF+SegG
#define  Digit7    SegA+SegB+SegC
#define  Digit8    SegA+SegB+SegC+SegD+SegE+SegF+SegG
#define  Digit9    SegA+SegB+SegC+SegD+SegF+SegG

/*******************
液晶驱动模块;
关/开液晶;
向显存中写入数据;
显示消隐藏内容
*******************/
unsigned char  Digitx[10] = {Digit0,Digit1,Digit2,Digit3,
      Digit4,Digit5,Digit6,Digit7,Digit8,Digit9};
  
void LcdInit()   
{  
  LCDCTL=LCDSG0_2;        //选择段端口s0-s19 4mux显示 LCD打开//
                          //lcdctl=lcdsgo_2+lcdmux1+lcdmux_0 //
  LCDCTL=LCDCTL | 0x5D;   // lcd打开,用4mux //
  //LCDCTL=0xFD//
} 

/*******************
中断口和定时口
********************/
void Timer_AInit(void)       
{ 
  TACTL=TASSEL1+TACLR;
  CCTL0=CCIE;
  CCR0=20000;
  TACTL|=MC1;
/*******
  TACTL |=BIT4;     //选择增计数模式 //
  TACTL |=BIT1;     //中断允许为开 //
*******/
}  

/**********************
输入输出口的初始化
***********************/
void IO_Init(void)  
{ 
   P3DIR |= 0xFF;   //BIT7;      初始化端口p3.4.5接口//
   P4DIR |= 0xFF;   //BIT7;
   P5DIR |= 0x1F;   //BIT2;         //com1//
   //P5DIR |= 0x04;   //BIT3;       //com2//
   //P5DIR |= 0x08;   //BIT4;       //com3//
                      //com0// ?como断口是否需要设定 ?//
   P3SEL |= 0Xff  ;  //选择外围接口//
   P4SEL |= 0Xff ;
   P5SEL |= 0Xff ;
}

/*********
主程序
*********/
void main(void)
{
  WDTCTL = WDTPW + WDTHOLD;   
  LcdInit();
  IO_Init();
  Timer_AInit();
 _BIS_SR(LPM3_bits+GIE);
// unsigned char *sum=LCDMEM
// unsigned char n;
// unsigned char *pmem=sum;   //定义指针变量pmem的值为sum,//  
// pmem=&LCDMEM[i];           //液晶显存地址变量地址save在指针pmem//
//sum=*LCDMEM[i];
    
    
    
/*****************
interrupt 中断程序
*****************/    
    
    
    
start:
   LCDMEM[1]= Digit0;  
   LCDMEM[2]= Digit0;
   LCDMEM[3]= Digit0;
    // int i,sum;
     i=0;
    // sum=0;
   for (i=0;i<=100;i++)     //执行加循环//
    {
     // if (i<100)
     sum=i;
      //sum=sum+i;
    intrrupt1:  if(TACTL_TAIFG==1);    //jianche 中断 
    {
         
                // TACTL |=BIT4;     //选择增计数模式 //
                // TACTL |=BIT1;     //中断允许为开 //
      LCDMEM[3]=Digitx[sum%10];           //baiwei
      LCDMEM[2]=Digitx[(sum/10)%10];     //shiwei
      LCDMEM[1]=Digitx[(sum/100)%10];   //gewei
                else if (TACTL_TAIFG==0) 
                      goto intrrupt;
    }
            if(sum<10)                                    
           {LCDMEM[1]=0;LCDMEM[2]=0;}
         else if (sum<100)                              
           {LCDMEM[1]=0;}
    //  DelayMs(10000000);
       }
     // else if (i>100)             //执行减循环//
       for (i=100;i>=1;i--)    //语句的正确性 
          {
           sum=i;
   intrrupt2: if(TACTL_TAIFG==1);
           {
           LCDMEM[3]=Digitx[sum%10];           //baiwei
           LCDMEM[2]=Digitx[(sum/10)%10];     //shiwei
           LCDMEM[1]=Digitx[(sum/100)%10];   //gewei
             else if (TACTL_TAIFG==0) 
               goto intrrupt2;
          }
           if(sum<10)                                    
   {LCDMEM[1]=0;LCDMEM[2]=0;}
      else if (sum<100)                              
       {LCDMEM[1]=0;}
          // i--;
         //  DelayMs(1000000);
          }
    // DelayMs(1000000000);
     sum=i;
    LCDMEM[3]=Digit0;
    // DelayMs(1000000000);
    LCDMEM[2]=Digit0;
    // DelayMs(1000000000);
    LCDMEM[1]=Digit0;
     goto start;  
}
  
   // volatile unsigned int i;            // volatile to prevent optimization

    //P5OUT ^= 0x02;                      // Toggle P5.1 using exclusive-OR

   // i = 10000;                          // SW Delay
  //  do i--;
   // while (i != 0);
  // }
 //}

⌨️ 快捷键说明

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