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

📄 oleddisp.c

📁 5个430系列微控制器源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
if(temp[0]<0X0D78&&temp[1]<0X0D78&&temp[2]<0X0D78)
poweroff();
}
}
*/
void battery_detect() {
  temp[2]=temp[1];temp[1]=temp[0];temp[0]=ADvalue;
  if(temp[0]>=0X0EE2&&temp[1]>=0X0EE2&&temp[2]>=0X0EE2) 
    battery(5);
  else if ((temp[0]<0X0EE2&&temp[0]>=0X0E82)&&(temp[1]<0X0EE2&&temp[1]>=0X0E82)&&(temp[2]<0X0EE2&&temp[2]>=0X0E82)) 
    battery(4);
  else if ((temp[0]<0X0E82&&temp[0]>=0X0E23)&&(temp[1]<0X0E82&&temp[1]>=0X0E23)&&(temp[2]<0X0E82&&temp[2]>=0X0E23)) 
    battery(3);
  else if ((temp[0]<0X0E23&&temp[0]>=0X0DE0)&&(temp[1]<0X0E23&&temp[1]>=0X0DE0)&&(temp[2]<0X0E23&&temp[2]>=0X0DE0)) 
    battery(2);
  else if ((temp[0]<0X0DE0&&temp[0]>=0X0D77)&&(temp[1]<0X0DE0&&temp[1]>=0X0D77)&&(temp[2]<0X0DE0&&temp[2]>=0X0D77)) 
    battery(1);
  else if ((temp[0]<0X0D77&&temp[0]>=0X0D51)&&(temp[1]<0X0D77&&temp[1]>=0X0D51)&&(temp[2]<0X0D77&&temp[2]>=0X0D51)) 
    {battery(0);P3OUT|=BIT0;}       
  else {
    if((temp[0]<0X0D51)&&(temp[1]<0X0D51)&&(temp[2]<0X0D51))
      poweroff();
  }
}
//====================================================
void write_address() {           //设置地址显示     
  uchar j;
  imagebuf=0x00;
  for(j=34;j<100;j++) {
    display(0,j);
  }
  clear_area(2,2);
  set_address();
  display_one(3);
  clear_area(5,7);
}

void poweroff() {              //关闭显示,进入低功耗模式
  turnoff_oled();
  TACTL|=MC0;
  _BIS_SR(LPM3_bits);
}

void shutdown() {              //停止工作,由外部唤醒
  TACTL|=MC0;
  turnoff_oled();
  delay(100);
  _BIS_SR(LPM4_bits);
}

void wakeup() {
  TACTL&=~MC0;
  turnon_oled();
  LPM3_EXIT;                  //退出LPM3模式,转为活动模式
}

void address_access() {       //地址已获取
  P3OUT&=~0X01;
  clear_area(2,3);
  P3OUT|=0X01;
  delay(100);
  P3OUT&=~BIT1;
}

//====================================================

void read_library(uchar section,uchar position,uchar count) { //读取汉字库  区,位,第几个字
  uchar haddress,maddress,laddress,i;
  unsigned long int headaddress=0;
  _DINT();
  P1IE=0x00;                  //禁止P1中断 
  P1IFG=0X00;   
  P1DIR=0XFF;                   //P1设为输出
  P1OUT=0XFF;

  P4DIR=0X00;
  P3OUT|=BIT3;                   //CS#=1;
  P3OUT&=~BIT2;                  //CE=0;
  P3OUT|=BIT6;                   //WR=1;

  headaddress=(unsigned long int)((section-0xa1)*94+(position-0xa1))*32; //地址计算
  laddress=(uchar)(headaddress&0x0000ff);
  maddress=(uchar)((headaddress&0x00ff00)>>8);
  haddress=(uchar)((headaddress&0xff0000)>>16);

  P5OUT=(P5OUT&0XF8)+(haddress&0X07);
  P2OUT=maddress;
  for(i=0;i<32;i++) {
    P1OUT=laddress+i;
    _NOP();
    P3OUT&=~BIT1;                  //OE=0;
    _NOP();
    lattice[i/16][count*16+(i&0x0f)]=P4IN;
    _NOP();
    P3OUT|=BIT1;                  //OE=1;
    _NOP();
  }
  P4DIR=0XFF;
  P3OUT|=BIT2;                  //CE=1
  P3OUT&=~BIT3;                 //CS#=0;
  P1OUT=0XFF;
  P1DIR=0XF8;                    //引脚为输入
  P1IFG=0X00;                    //清中断标志寄存器
  P1IES|=BIT0;                 // 下降沿有效
  P1IE|=BIT0;                   //允许P1.0中断
  _EINT();
}
//=================================================================

void display_one(uchar page) {    //信息框显示一行汉字   在第几页显示 范围0~6  //page 起始页                                         
  uchar j,next;
  for(next=0;next<2;next++) {
    P3OUT&=~BIT5;                      // DC=0;
    read_status();
    P4OUT=176+page+next;              //set page address
    write_signal();

    read_status();
    P4OUT=0x00;                      //set low address
    write_signal();

    read_status();
    P4OUT=0x10;                      //set higher address
    write_signal();

    for(j=0;j<128;j++) {
      imagebuf=lattice[next][j]; 
      read_status();
      P3OUT|=BIT5;                      //DC=1;
      P4OUT=imagebuf;            //从汉字点阵缓冲区读数
      write_signal();
    }
  }
}
//=================================================================
void read_message(uchar item) {      //读取一行短信息  8个汉字
  uchar j;
  for(j=0;j<8;j++)
    read_library(message[item][2*j],message[item][2*j+1],j);
}
//=================================================================
//========================================================================
void press_key_login() {          //请您按键报到 读入缓冲区
  read_library(0xa1,0xa1,0);
  read_library(0xc7,0xeb,1);
  read_library(0xc4,0xfa,2);
  read_library(0xb0,0xb4,3);
  read_library(0xbc,0xfc,4);
  read_library(0xb1,0xa8,5);
  read_library(0xb5,0xbd,6);
  read_library(0xa1,0xa1,7);
}

void insert_card_login() {        
  read_library(0xa1,0xa1,0);
  read_library(0xc7,0xeb,1);
  read_library(0xc4,0xfa,2);
  read_library(0xb2,0xe5,3);
  read_library(0xbf,0xa8,4);
  read_library(0xb1,0xa8,5);
  read_library(0xb5,0xbd,6);
  read_library(0xa1,0xa1,7);
}

void press_key_vote() {          
  read_library(0xa1,0xa1,0);
  read_library(0xc7,0xeb,1);
  read_library(0xc4,0xfa,2);
  read_library(0xb0,0xb4,3);
  read_library(0xbc,0xfc,4);
  read_library(0xb1,0xed,5);
  read_library(0xbe,0xf6,6);
  read_library(0xa1,0xa1,7);
}

void vote_end() {               
  read_library(0xa1,0xa1,0);
  read_library(0xa1,0xa1,1);
  read_library(0xb1,0xed,2);
  read_library(0xbe,0xf6,3);
  read_library(0xbd,0xe1,4);
  read_library(0xca,0xf8,5);
  read_library(0xa1,0xa1,6);
  read_library(0xa1,0xa1,7);
}
//=====================================================================

void set_address() {               
  read_library(0xbe,0xaf,0);
  read_library(0xb8,0xe6,1);
  read_library(0xa3,0xba,2);
  read_library(0xc9,0xe8,3);
  read_library(0xd6,0xc3,4);
  read_library(0xb5,0xd8,5);
  read_library(0xd6,0xb7,6);
  read_library(0xa3,0xa1,7);
}

void download_complete() {        
  read_library(0xa1,0xa1,0);
  read_library(0xd0,0xc5,1);
  read_library(0xcf,0xa2,2);
  read_library(0xcf,0xc2,3);
  read_library(0xd4,0xd8,4);
  read_library(0xcd,0xea,5);
  read_library(0xb3,0xc9,6);
  read_library(0xa1,0xa1,7);
}
//======================================================================
void agree() {
  read_library(0xa1,0xa1,0);
  read_library(0xa1,0xa1,1);
  read_library(0xa1,0xa1,2);
  read_library(0xd4,0xde,3);
  read_library(0xb3,0xc9,4);
  read_library(0xa1,0xa1,5);
  read_library(0xa1,0xa1,6);
  read_library(0xa1,0xa1,7);
}

void disagree() {
  read_library(0xa1,0xa1,0);
  read_library(0xa1,0xa1,1);
  read_library(0xa1,0xa1,2);
  read_library(0xb7,0xb4,3);
  read_library(0xb6,0xd4,4);
  read_library(0xa1,0xa1,5);
  read_library(0xa1,0xa1,6);
  read_library(0xa1,0xa1,7);
}

void abstain() {
  read_library(0xa1,0xa1,0);
  read_library(0xa1,0xa1,1);
  read_library(0xa1,0xa1,2);
  read_library(0xc6,0xfa,3);
  read_library(0xc8,0xa8,4);
  read_library(0xa1,0xa1,5);
  read_library(0xa1,0xa1,6);
  read_library(0xa1,0xa1,7);
}
//================================================================

void message_pages(uchar item,uchar pages) {   //短信页数显示
  uchar j;
  for(j=0;j<10;j++) {                 //显示   " / "
    imagebuf=sign[118+j];
    display(0,83+j);
  }
  for(j=32;j<38;j++) {
    imagebuf=sign[(item+1)*6+j];
    display(0,45+j);
    imagebuf=sign[(pages+1)*6+j];
    display(0,61+j);
  }
}
//=============================================================
#pragma vector=TIMERA0_VECTOR             //定时器中断
__interrupt void Timer_A(void) {
  //P6OUT^=BIT1;
  led^=BIT0;
}

#pragma vector=TIMERB0_VECTOR      
__interrupt void Timer_B(void) {
  //battery_detect();
  P3OUT^=BIT0;
}

//===============================================================

void protocol(uchar command0,uchar data0,uchar data1) {
  uchar var0,var1,x;
  flag=0;
  if((command0&0x80)==0x80) {               //短信接收
    var0=(command0&0x70)>>4;
    var1=command0&0x0f;
    message[var0][2*var1]=data0;
    message[var0][2*var1+1]=data1;
    x=pagenum;
    pagenum=var0>x?var0:x;
  }
  else if(command0==0x40) {               //多项表决
    if(data0==0x01) {
      read_message(0);display_one(2);message_pages(0,pagenum);clear_area(4,4);
    }
    else if(data0==0x02) {
      read_message(1);display_one(2);message_pages(1,pagenum);clear_area(4,4);
    }
    else if(data0==0x03) {
      read_message(2);display_one(2);message_pages(2,pagenum);clear_area(4,4);
    }
    else if(data0==0x04) {
      read_message(3);display_one(2);message_pages(3,pagenum);clear_area(4,4);
    }
    else if(data0==0x05) {
      read_message(4);display_one(2);message_pages(4,pagenum);clear_area(4,4);
    }
    else if(data0==0x06) {
      read_message(5);display_one(2);message_pages(5,pagenum);clear_area(4,4);
    }
    else if(data0==0x07) {
      read_message(6);display_one(2);message_pages(6,pagenum);clear_area(4,4);
    }
    else if(data0==0x08) {
      read_message(7);display_one(2);message_pages(7,pagenum);clear_area(4,4);
    }
    else _NOP();
    if(data1==0x01) {
      clear_area(5,7);
    }
    else if(data1==0x02) {
      press_key_vote();display_one(5);
    }
    else if(data1==0x03) {
      agree();display_one(5);
    }
    else if(data1==0x04) {
      disagree();display_one(5);
    }
    else if(data1==0x05) {
      abstain();display_one(5);
    }
    else _NOP();
  }
  else if(command0==0x30) {               //单项表决
    if(data0==0x01) {
      vote_end();display_one(3);clear_area(2,2);clear_area(5,7);
    }
    else if(data0==0x02) {
      press_key_vote();display_one(3);clear_area(2,2);clear_area(5,7);
    }
    else if(data0==0x03) {
      agree();display_one(3);clear_area(2,2);clear_area(5,7);
    }
    else if(data0==0x04) {
      disagree();display_one(3);clear_area(2,2);clear_area(5,7);
    }
    else if(data0==0x05) {
      abstain();display_one(3);clear_area(2,2);clear_area(5,7);
    }
    else if(data0==0x06) {
      clear_area(3,7);
    }
    else _NOP();
  }
  else if(command0==0x20) {                //报到信息
    if(data0==0x01) {
      login_status(0);
    }
    else if(data0==0x02) {
      login_status(1);clear_area(2,7);
    }
    else if(data0==0x03) {
      login_status(0);press_key_login();display_one(3);clear_area(2,2);clear_area(5,7);
    }
    else if(data0==0x04) {
      login_status(0);insert_card_login();display_one(3);clear_area(2,2);clear_area(5,7);
    }
    else _NOP();
  }
  else if(command0==0x11) {
    if(data0==0x01) {
      read_message(0);display_one(2);message_pages(0,pagenum/2);clear_area(4,4);
      read_message(1);display_one(5);
    }
    else if(data0==0x02){
      read_message(2);display_one(2);message_pages(1,pagenum/2);clear_area(4,4);
      read_message(3);display_one(5);
    }
    else if(data0==0x03){
      read_message(4);display_one(2);message_pages(2,pagenum/2);clear_area(4,4);
      read_message(5);display_one(5);
    }
    else if(data0==0x04){
      read_message(6);display_one(2);message_pages(3,pagenum/2);clear_area(4,4);
      read_message(7);display_one(5);
    }
    else if(data0==0x05){
      read_message(0);display_one(2);message_pages(0,pagenum);clear_area(4,4);
    } 
    else if(data0==0x06){
      read_message(1);display_one(2);message_pages(1,pagenum);clear_area(4,4);
    }
    else if(data0==0x07){
      read_message(2);display_one(2);message_pages(2,pagenum);clear_area(4,4);
    } 
    else if(data0==0x08){
      read_message(3);display_one(2);message_pages(3,pagenum);clear_area(4,4);
    }
    else if(data0==0x09){
      read_message(4);display_one(2);message_pages(4,pagenum);clear_area(4,4);
    }
    else if(data0==0x0a){
      read_message(5);display_one(2);message_pages(5,pagenum);clear_area(4,4);
    } 
    else if(data0==0x0b){
      read_message(6);display_one(2);message_pages(6,pagenum);clear_area(4,4);
    }
    else if(data0==0x0c){
      read_message(7);display_one(2);message_pages(7,pagenum);clear_area(4,4);
    }
               
    else if(data0==0x11) {
      write_address();
    } 
    else if(data0==0x12) {
      address_access();
    }
    else if(data0==0x13)   
      clear_area(2,3);
    else if(data0==0x21)   
      P3OUT|=BIT1;
    else if(data0==0x22)   
      P3OUT&=~BIT1;
  
    else if(data0==0x31) 
      turnon_oled();
    else if(data0==0x32) 
      turnoff_oled();
    else if(data0==0x41)
      poweroff();
    else if(data0==0x42) 
      shutdown();
    else if(data0==0x43) 
      wakeup();
    else _NOP();
  }
  else if(command0==0x10) {               //系统信息   data0 高半字节为信号值,低半字节为通道号
    var0=(data0&0xf0)>>4;
   var1=data0&0x0f;
   signal(var0);
   address(var1,data1);
 }
  else 
    _NOP();
}

//====================================================================
#pragma vector=PORT1_VECTOR
__interrupt void communicate(void) {
  _DINT();
  if(P1IFG&0X01) {
    //wakeup();
    for(bytes=0;bytes<3;bytes++) {
      rxbuf=0x00;
      for(k=0;k<8;k++) {
        while((P1IN&BIT2)==BIT2);
        //rxbuf=P1IN&BIT1;
        rxbuf=rxbuf<<1;
        _NOP();
        if((P1IN&BIT1)==BIT1) {
          rxbuf=rxbuf|0x01;
        }
        //else rxbuf=rxbuf&0xfe;
        //rxbuf=rxbuf<<1;
        while((P1IN&BIT2)==0);
      }
      databuf[bytes]=rxbuf;
    }
  }
  P1IFG=0X00;
  flag=1;
  _EINT();
}

⌨️ 快捷键说明

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