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

📄 main.c

📁 此程序可以显示输入波形
💻 C
📖 第 1 页 / 共 5 页
字号:

#define uchar unsigned char

#define uint unsigned int

//--------------------------------------------------------------------

/*void set_timer0_1T()//设置T0为1T模式

{

      AUXR=AUXR|0x80;

}

//--------------------------------------------------------------------

void set_timer1_1T()//设置T1为1T模式

{

      AUXR=AUXR|0x40;

}

//--------------------------------------------------------------------

void set_timer0_12T()//设置T0为12T模式

{

      AUXR=AUXR&0x7f;

}

//--------------------------------------------------------------------

void set_timer1_12T()//设置T1为12T模式

{

      AUXR=AUXR&0xbf;

}

//--------------------------------------------------------------------

uchar EEPROM_read(uint addr)//EEPROM字节读

{

      ISP_ADDRH=(addr&0xff00)>>8;

      ISP_ADDRL=addr&0x00ff;

      ISP_CONTR=0x81;

      ISP_CMD=1;

      ISP_TRIG=0x46;

      ISP_TRIG=0xb9;

      return ISP_DATA;

}

//--------------------------------------------------------------------

void EEPROM_write(uint addr,uchar dat)//EEPROM字节写

{

      ISP_DATA=dat;

      ISP_ADDRH=(addr&0xff00)>>8;

      ISP_ADDRL=addr&0x00ff;

      ISP_CONTR=0x81;

      ISP_CMD=2;

      ISP_TRIG=0x46;

      ISP_TRIG=0xb9;

}

//--------------------------------------------------------------------

void EEPROM_ERASE(uint addr)//EEPROM扇区擦除

{

      ISP_ADDRH=(addr&0xff00)>>8;

      ISP_ADDRL=addr&0x00ff;

      ISP_CONTR=0x81;

      ISP_CMD=3;

      ISP_TRIG=0x46;

      ISP_TRIG=0xb9;

} */

//--------------------------------------------------------------------

/*    void set_p3_tw()

{

      P3M0|=0x00;

      P3M1|=0x00;

}*/

//--------------------------------------------------------------------

void AD_init(uchar AD_port_sel ) //ADC初始化

{

      ADC_CONTR|=0x80;  //开ADC电源

switch(AD_port_sel)    //选择作为ADC的端口

      {

              case 0:

              P1M0=0x01;

              P1M1=0x00;

              ADC_CONTR&=0xf8;



              break;

              

              case 1:

              P1M0=0x02;

              P1M1=0x00;

              ADC_CONTR&=0xf8;

              ADC_CONTR|=0x01;

              break;



              case 2:

              P1M0=0x04;

              P1M1=0x00;

              ADC_CONTR&=0xf8;

              ADC_CONTR|=0x02;

              break;



              case 3:

              P1M0=0x08;

              P1M1=0x10;

              ADC_CONTR&=0xf8;

              ADC_CONTR|=0x03;

              break;



              case 4:

              P1M0=0x10;

              P1M1=0x00;

              ADC_CONTR&=0xf8;

              ADC_CONTR|=0x03;

              break;



              case 5:

              P1M0=0x20;

              P1M1=0x00;

              ADC_CONTR&=0xf8;

              ADC_CONTR|=0x05;

              break;



              case 6:

              P1M0=0x40;

              P1M1=0x00;

              ADC_CONTR&=0xf8;

              ADC_CONTR|=0x06;

              break;



              case 7:

              P1M0=0x80;

              P1M1=0x80;

              ADC_CONTR&=0xf8;

              ADC_CONTR|=0x07;

              break;

      }

      ADC_CONTR=0xe7;

}

//--------------------------------------------------------------------

uint GET_AD_Result()//启动AD转换并返回转换值

{

      uchar temp;

      uint data_temp;

      data_temp=0;

      ADC_DATA=0;

      ADC_LOW2=0;

      ADC_CONTR|=0x08;

re:    temp=0x10;

      temp&=ADC_CONTR;

      if(temp==0)

              goto re;

      ADC_CONTR&=0xe7;

      data_temp=ADC_DATA;

      data_temp<<=2;

      data_temp+=ADC_LOW2;

      return data_temp;

}

//--------------------------------------------------------------------



//模块:Dis_Wave.C

//功能:示波器模块

//晶振:24.000MHz

//芯片: STC12C5412AD

//版本:V1.0.0

//设计:魏广寅

//日期:2007.4.10

#include "lcd12864_driver_new.h"

#define uchar unsigned char                  

#define uint unsigned int

extern void d0(void);

extern uchar keyfuncindex;

extern void d1(void);

extern void AD_init(uchar AD_port_sel );

extern uint GET_AD_Result();//启动AD转换并返回转换值 

extern void delay_1(uchar time);

uint xdata record[128];

sbit key1=P3^0;

sbit key2=P3^1;

//--------------------------------------------------------------------

void delay(uint time)

{

      uchar jj,hh;

      while(--time!=0)

      {

              for(jj==0;jj<255;jj++)

              {

                    for(hh==0;hh<255;hh++);

              }

              

      }

}

//--------------------------------------------------------------------

void wave()    

{



      uchar mod=1;

      uchar data k;

      float x2;

      lcd_init();

      AD_init(7);

      while(1)

      {

      

                    for(k=0;k<128;k++)

                    {

                            record[k]=GET_AD_Result();

                    

                    }



              switch(mod)

              {

                    case 0:    

                    {

                            if(record[k]==512)

                            {    

                                  dis_cls();

                                  for(k=0;k<128;k++)

                                  {

                                          x2=record[k]/16;

                                          dis_point(64-x2,k);

                                  }

                                  for(k=127;k>0;k--)

                                  {

                                          x2=record[k]/16;

                                          dis_point(64-x2,k);

                                  }

                            }

                      }

                      break;



                      case 1:

                    {

                            dis_cls();

                            for(k=0;k<128;k++)

                            {

                                  x2=record[k]/16;

                                  dis_point(64-x2,k);

                            }

                            for(k=127;k>0;k--)

                            {

                                  x2=record[k]/16;

                                  dis_point(64-x2,k);

                            }

                            delay(30000);

                    }

                    break;

              }



                      key2=1;

                      if(key2==0)

                      {

                          mod=!mod;

                          delay_1(5);

                            }



                      key1=1;

                      if(key1==0)

                      {

                      delay_1(5);

                      goto exit;

                      }

      }

exit: keyfuncindex=1;

              d1();      

              delay(1);

}

//--------------------------------------------------------------------

//模块:Freqen.C

//功能:频率计模块

//晶振:24.000MHz

//芯片: STC12C5412AD

//版本:V1.0.0

//设计:魏广寅

//日期:2007.4.10

#include "stc12c5412ad.h"

#define uchar unsigned char                  

#define uint unsigned int

extern uchar keyfuncindex;

void dis_cls(void);

extern void d0(void);

extern void lcd_init(void);

extern void dis_one_char(uchar x,uchar y,uchar asc_num,bit b_flag);

extern void dis_one_zi(uchar x_add,uchar y_add,uchar code *po,bit back_flag,bit char_moudle);

extern void delay(uint time);

extern uchar bdata gate;

extern void beep(uint time);

void sel_x(uchar x);      //74HC390 分频系数选择1,10,100

void delay_1(uchar time);

extern uchar temp_l,temp_h;

extern uchar i;

extern unsigned char code x43[];// 量

extern unsigned char code x44[];// 程

extern unsigned char code x45[];// 切

extern unsigned char code x46[];// 换

extern unsigned char code x47[];// 请

extern unsigned char code x48[];// 稍

extern unsigned char code x49[];// 候

extern unsigned char code x50[];// …

extern unsigned char code x51[];// 周

extern unsigned char code x52[];// 期

extern unsigned char code x7[]; // 频

extern unsigned char code x8[]; // 率

extern uint temp0,temp1,temp2,temp3,temp4;

uchar a1,a2;

sbit sel_1=P1^6;

sbit sel_10=P1^4;

sbit sel_100=P3^4;

sbit p3_5=P3^5;

bit clr_flag0=0;

bit clr_flag1=0;

bit clr_flag2=0;

bit clr_flag3=0;

bit clr_flag4=0;

sbit key0=P3^0;

sbit key1=P3^1;

//--------------------------------------------------------------------

void timer_init()

{

      TMOD=0xd1; //T1 做门控计数

      TH1=0;

      TL1=0;

      TH0=0x3c;

      TL0=0xb0;

      ET0=1;

      EA=1;

      TR0=1;

      TR1=1;

      p3_5=1;

}

//--------------------------------------------------------------------

void time_up() interrupt 1 using 3

{

      TH0=0x3c;

      TL0=0xb0;

      if(++i==gate)

      {

              TR1=0;

              temp_l=TL1;

              temp_h=TH1;

              TH1=0;

              TL1=0;

              i=0;

              TR1=1;

      }

}

//--------------------------------------------------------------------

void sel_x(uchar x) //74HC390 分频系数选择1,10,100

{

      switch(x)

      {

              case 1:

              {

                    sel_1=1;

                    sel_10=0;

                    sel_100=0;

                    break;

              }



              case 10:

              {

                    sel_1=0;

                    sel_10=1;

                    sel_100=0;

                    break;

              }



              case 100:

              {

                    sel_1=0;

                    sel_10=0;

                    sel_100=1;

                    break;

              }

              default:

              break;

      }

}

//--------------------------------------------------------------------

void temp_to_tempx(uint temp)

{

      temp0=temp/10000;

      temp1=(temp-(temp0*10000))/1000;

      temp2=(temp-(temp0*10000)-(temp1*1000))/100;

      temp3=(temp-(temp0*10000)-(temp1*1000)-(temp2*100))/10;

      temp4=temp%10;

}            

//--------------------------------------------------------------------

void dis_mod(unsigned long temp,uchar point,uchar danwei)

{

      

      uchar danwei_t;

      

      temp_to_tempx(temp);



      dis_one_zi(0,0,x7,1,1);//频

      dis_one_zi(0,1,x8,1,1);//率



      dis_one_char(0,11,0x7f,0);

      dis_one_char(0,12,danwei,1);

      dis_one_char(0,13,'H',1);

      dis_one_char(0,14,'z',1);

      dis_one_char(0,15,0x7f,0);

      dis_one_char(0,4,0x7f,0);

      if(temp0!=0)

      {

              dis_one_char(0,5,temp0+0x30,1);

              clr_flag0=0;

      }

      else

      dis_one_char(0,5,0x7f,0);

      clr_flag0=1;



      dis_one_char(0,10,temp4+0x30,1);

      dis_one_char(0,9,temp3+0x30,1);

      switch (point)

      {

              

              case 0:

              {

                    dis_one_char(0,5,temp0+0x30,1);

                    dis_one_char(0,6,'.',1);

⌨️ 快捷键说明

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