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

📄 aa.c

📁 ocmj4x8c显示的 c8051f021做为cpu的波形绘图功能
💻 C
📖 第 1 页 / 共 2 页
字号:
   {
    wr_lcd (dat,0xA3);wr_lcd (dat,bai);
    wr_lcd (dat,0xA3);wr_lcd (dat,shi); 
   }
  }
  else 
  {
   wr_lcd (dat,0xA3);
   wr_lcd (dat,qian);
   wr_lcd (dat,0xA3);
   wr_lcd (dat,bai);
   wr_lcd (dat,0xA3);
   wr_lcd (dat,shi);
  }
  wr_lcd (dat,0xA3);
  wr_lcd (dat,gew);
  wr_lcd (comm,0x8D);
  wr_lcd (dat,0xA3);
  wr_lcd (dat,dian_bai);
  wr_lcd (dat,0xA3);
  wr_lcd (dat,dian_shi);
  wr_lcd (dat,0xA3);
  wr_lcd (dat,dian_gew); 
}



void show_init (void)
{
 
 LEDA=1;
 fys(tab0);
 delay(1000);
}

/*void t0_init(void)
{


CKCON = 0x00;
TCON = 0x01;
TH0 = 0xfc;
TL0 = 0x17;
EA = 1;
TR0 = 1;
ET0 = 1;
;

}
*/
void chn_disp1 (uchar code *chn)
{
  uchar i,j;
  wr_lcd (comm,0x30);
  wr_lcd (comm,0x80);
  j=0;
  for (i=0;i<16;i++)
  wr_lcd (dat,chn[j*16+i]);
  wr_lcd (comm,0x90);
  j=1;
  for (i=0;i<16;i++)
  wr_lcd (dat,chn[j*16+i]);
}

void img_disp1 (uchar  *img)
{
  uchar i,j;
  for(i=0;i<8;i++)
  {
    for(j=0;j<32;j++)
    { 
      wr_lcd (comm,0x34);
      wr_lcd (comm,y+j);
      wr_lcd (comm,x2+i);
      wr_lcd (comm,0x30);
      wr_lcd (dat,img[j*16+i*2]);
      wr_lcd (dat,img[j*16+i*2+1]);
      
	  wr_lcd (comm,0x36);
	  
	  delay1(500);
	 

    }
	// wr_lcd (comm,0x36);
  }
 // wr_lcd (comm,0x36);
 // wr_lcd (comm,0x34);    ////////////////////////////////////////////////////////////////////////////////////////////
  
}

void fys(uchar code *tab) 
{
 uchar  n;
 wr_lcd (comm,0x30);
 wr_lcd (comm,0x01);  /*清屏,地址指针指向00H*/
 for(n=0;n<64;n++)
 {
  wr_lcd (dat,*(tab+n));
 }
 n=0;
}

void chk_busy (void)
{
  
  LCDRS = 0;
  delay1(2); 
  RW =1;
  delay1(2);
  LCDEN = 1;
  delay1(2);
  P3=0xff;
  while(DB7==1);
  LCDEN=0;
  delay1(2);
  
}

 
void wr_lcd (uchar dat_comm,uchar content)
{
  chk_busy ();
  if(dat_comm)
   {
    
    LCDRS=1;   //data
	delay1(2);
    RW=0;   //write
    delay1(2);
   }
  else 
   {
    LCDRS=0;   //command
	delay1(2);
    RW=0;   //write
	delay1(2);
   }
  
  P3=content;   //output data or comm
  LCDEN=1;
  delay1(2);
  ;
 // chk_busy ();
  
  LCDEN=0;
  delay1(2);
} 


void init_lcd (void)
{ 
  LEDA = 1;
  LCDRST=1;
  delay1(2);
  wr_lcd (comm,0x30);  /*30---基本指令动作*/   
  wr_lcd (comm,0x01);  /*清屏,地址指针指向00H*/
  wr_lcd (comm,0x06);  /*光标的移动方向*/
  wr_lcd (comm,0x0C);  /*开显示,关游标*/
} 

void clrram (void)
{
  wr_lcd (comm,0x30);
  wr_lcd (comm,0x01);
}

void lat_disp (uchar data1,uchar data2)
{
  uchar i,j,x;//k,x;
  x=x1;
 //for(k=0;k<2;k++)
  //{
    for(j=0;j<16;j++)
    {
      for(i=0;i<8;i++)
      {
        wr_lcd (comm,0x34);
        wr_lcd (comm,y+j*2);
        wr_lcd (comm,x+i);
        wr_lcd (comm,0x30);
        wr_lcd (dat,data1);
        wr_lcd (dat,data1);
      }
      for(i=0;i<8;i++)
      {
        wr_lcd (comm,0x34);
        wr_lcd (comm,y+j*2+1);
        wr_lcd (comm,x+i);
        wr_lcd (comm,0x30);
        wr_lcd (dat,data2);
        wr_lcd (dat,data2);
      }
    }
    //x=x2;
 // }
  wr_lcd (comm,0x36);
}

void delay (uint us)   //delay time
{
  while(us--);
}
void delay1 (uint ms)
{
  uint i,j;
  for(i=0;i<ms;i++)
  for(j=0;j<15;j++)
  delay(1);
}

void ad_convert1(void)
{ad_until=0;
 ad_count = 0;
 ad_add= 0;
 ad_flag= 1;
 EA = 0;
 CKCON = 0x00;   //0x00时T2时钟为系统时钟的12分频,0x02时为系统时钟.
 AMX0SL = 0x01;	// AMUX Channel Select Register
 AMX0CF = 0x00;	// AMUX Configuration Register        
 ADC0CN = 0xCC;	// ADC Control Register
 //TH2 = 0x00;
 //TL2 = 0x00;
 //TH2 = 0x3C;
 //TL2 = 0xB0;            // T2要计数50000次才会溢出.
 
 //T2 = 65465;          //最大溢出一次的时间:(1/16M)*12*65536=49.152ms  现在是70*0.75=50us  
 
 if(low_freq == 1)
 {T2 = 65465;
  RCAP2 = 65465;
  }
 else if(low_freq == 0)
 {T2 = 0xffff-(int)((129/((double)cp0_count*128))/(49.152))*0xffff;
  RCAP2=0xffff-(int)((129/((double)cp0_count*128))/(49.152))*0xffff; //自动重装值为0x0000 溢出一次计65536次 
 }
 CT2 = 0;
 CPRL2 = 0;
 EXEN2 = 1;
 EIE2 |=0x02;
 TR2 = 1;
 EA = 1;
 
 ad_init_flag = 0; ///
}

void comparation(void)
{
 t0_count = 25;  //25次为1S
 cp0_count = 0;
 CKCON &= 0xF7; // T0用16M/12时钟 
 TCON = 0x00;   //关所有使能
 TMOD = 0x01;
 TL0 =0xAB ; // 1/16M*12*53333=40ms 即T0 40MS中断一次
 TH0 =0x2F;
 EIE1 = 0x20;     //只开比较器0上升沿中断
 IE &= ~0x02;     //关T0中断
 TR0 = 1    ;   //开定时器T0
 CPT0CN = 0x8F;   //开比较器0使能
 EA = 1;
}





void DispConvert(void)
{
float xdata m;
 //uint xdata i;
 uchar xdata gew,shi,bai,qian;
 uint a ; //tab2输出计数
CPT0CN |=0x80;   //开比较器
for(a=0;a<128;a++)
{

 m = (float)tab3[a];
/* if (ad_flag==0)
 {
  ad_add = ad_add + m;
  if (ad_count==AD_COUNT_MAX) 
  {m=ad_add/AD_COUNT_MAX;
   ad_count= 0;
   ad_add= 0;
   ad_until=m;
   }
  else m=ad_until;
 }
 if (ad_flag==1)
 {
  ad_flag=0;
  ad_until=m;
 }
 */

// i = (int)m;
// ad_count++;
  m = m/100;
  m *= AD_VALUE_MAX; 
 
 qian = m/1000;
 bai = (m-qian*1000)/100;
 shi = (m-qian*1000-bai*100)/10;
 gew = m-qian*1000-bai*100-shi*10; 
  if(x < 16)
  { int f;
   yy = 16-((float)(qian*10+bai))/50*16;
   f = (int)n%8;
   switch (f)
  {case 0: tab1[16*yy+x] += 0x80;break;
   case 1: tab1[16*yy+x] += 0x40;break;
   case 2: tab1[16*yy+x] += 0x20;break;
   case 3: tab1[16*yy+x] += 0x10;break;
   case 4: tab1[16*yy+x] += 0x08;break;
   case 5: tab1[16*yy+x] += 0x04;break;
   case 6: tab1[16*yy+x] += 0x02;break;
   case 7: tab1[16*yy+x] += 0x01;x++;break;
   }
  }
  n++;
  
 /*if (gew >= 4 && gew <=9) 
 {
  gew=0;
  shi++;
  if shi=
  if (shi == 0) bai++;
  if (bai == 0) qian++;

 }*/
/*
 qian += 0xB0; 
 bai += 0xB0;
 shi += 0xB0;
 gew += 0xB0;

 wr_lcd (comm,0x30);
 wr_lcd (comm,0x0C);
 wr_lcd (comm,0x89);
 wr_lcd (dat,0xA3);
 wr_lcd (dat,qian);

 wr_lcd (comm,0x8B);
 wr_lcd (dat,0xA3);
 wr_lcd (dat,bai);
 wr_lcd (dat,0xA3);
 wr_lcd (dat,shi);
 //wr_lcd (dat,gew);
 */
}
}















void config (void)
{
 uchar data i;
 EA = 0; 	      // disable watchdog timer
 WDTCN = 0xDE;          
 WDTCN = 0xAD;

 OSCXCN = 0x00;	  // EXTERNAL Oscillator Control Register	
 OSCICN = 0x07;	  // Internal Oscillator Control Register  16M
 
 EMI0CF = 0x03;    // External Memory Configuration Register
 EMI0TC = 0x03;    // External Memory CLOCK
 EMI0CN = 0x00;    // External Memory HIGHT BYTE

 XBR0 = 0x94;	// XBAR0: Initial Reset Value
 XBR1 = 0x00;	// XBAR1: Initial Reset Value
 XBR2 = 0x42;	// XBAR2: Initial Reset Value

 P0MDOUT = 0x00; // Output configuration for P0 
 P1MDOUT = 0x00; // Output configuration for P1 
 P2MDOUT = 0x00; // Output configuration for P2 
 P3MDOUT = 0x00; // Output configuration for P3
      
 P1MDIN = 0xFF;  // Input configuration for P1

 CPT0CN = 0x00;	// Comparator 0 Control Register
 for(i = 0; i < 10; i++); CPT0CN &= ~0x30;		//clear interrupt pending flags

 REF0CN = 0x03;	// Reference Control Register

 DAC0CN = 0x00;	// DAC0 Control Register
 DAC0L = 0x00;	// DAC0 Low Byte Register
 DAC0H = 0x00;	// DAC0 High Byte Register
 DAC1CN = 0x00;	// DAC1 Control Register
 DAC1L = 0x00;	// DAC1 Low Byte Register
 DAC1H = 0x00;	// DAC1 High Byte Register

 PCA0MD = 0x08;	    // PCA Mode Register
 PCA0CN = 0x00;	    // PCA Control Register
 PCA0H = 0x00;       // PCA Counter/Timer High Byte	
 PCA0L = 0x00;       // PCA Counter/Timer Low Byte
//Module 0
 PCA0CPM0 = 0xC3;	// PCA Capture/Compare Register 0
 PCA0CPL0 = 0xFF;	// PCA Counter/Timer Low Byte
 PCA0CPH0 = 0x00;	// PCA Counter/Timer High Byte
 //Module 1
 PCA0CPM1 = 0xC3;	// PCA Capture/Compare Register 1
 PCA0CPL1 = 0xFF;	// PCA Counter/Timer Low Byte
 PCA0CPH1 = 0x00;	// PCA Counter/Timer High Byte

 AMX0CF = 0x60;	// AMUX Configuration Register
 //AMX0SL = 0x00;	// AMUX Channel Select Register
 ADC0CF = 0x38;	// ADC Configuration Register
 ADC0CN = 0x00;	// ADC Control Register
 ADC0LTH = 0x00;	// ADC Less-Than High Byte Register
 ADC0LTL = 0x00;	// ADC Less-Than Low Byte Register
 ADC0GTH = 0xFF;	// ADC Greater-Than High Byte Register
 ADC0GTL = 0xFF;	// ADC Greater-Than Low Byte Register

 IE = 0x00;		    //Interrupt Enable
 IP = 0x00;		    //Interrupt Priority
 EIE1 = 0x08;		//Extended Interrupt Enable 1
 EIE2 = 0x00;		//Extended Interrupt Enable 2
 EIP1 = 0x00;		//Extended Interrupt Priority 1
 EIP2 = 0x00;		//Extended Interrupt Priority 2

}

⌨️ 快捷键说明

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