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

📄 max262main.c

📁 利用单片机控制max262芯片程控滤波器
💻 C
字号:
#include <reg52.h>
#define uchar unsigned char
#define uint  unsigned int
#define CH451_SYSOFF    0x0402		   //设定系统参数,开显示,关键盘
#define CH451_RESET     0X0201             //设定复位
#define CH451_KEY       0x07ff		   //读取键码
sbit dout=P1^3;
sbit dclk=P1^0;
sbit din=P1^1;
sbit load=P1^2;
sbit sdata = P1^0 ;
sbit sclk  = P1^1 ;
sbit sload = P1^2 ;
sbit max_wr = P1^3 ;
uchar keycode,num;                       //定义存放采样数据的寄存器
void write(uint order);
void ch451_read();
void write_max262(uchar dat);
unsigned code   M0M1[18]={0x00,0x00,0x00,0x40,0x40,0x40,
                          0x40,0x40,0x80,0x80,0x80,0x80,
                          0x80,0x80,0x80,0x80,0x80,0x80};
unsigned  code  f0f1[18]={0x21,0x21,0x21,0x61,0x61,0x61,
                          0x71,0x61,0x91,0xa1,0xb1,0xa1,
                          0xa1,0xa1,0xa1,0xb1,0x81,0xa1};
unsigned  code  f2f3[18]={0x12,0x02,0x12,0x52,0x62,0x42,
                          0x62,0x52,0xb2,0xb3,0xb2,0xa2,
                          0x92,0x82,0xb2,0xa2,0xa2,0x92};
unsigned  code  f4f5[18]={0x33,0x23,0x13,0x73,0x63,0x63,
                          0x53,0x53,0xb3,0xb3,0xa3,0xa3,
                          0xa3,0xa3,0x93,0x93,0x93,0x93};    //3K--20K
unsigned code   q0q1[18]={0x24,0x24,0x24,0x64,0x64,0x64,
                          0x64,0x64,0xa4,0xa4,0xa4,0xa4,
                          0xa4,0xa4,0xa4,0xa4,0xa4,0xa4};
unsigned code   q2q3[18]={0x15,0x15,0x15,0x55,0x55,0x55,
                          0x55,0x55,0x95,0x95,0x95,0x95,
                          0x95,0x95,0x95,0x95,0x95,0x95};
unsigned code   q4q5[18]={0x26,0x26,0x26,0x66,0x66,0x66,
                          0x66,0x66,0xa6,0xa6,0xa6,0xa6,
                          0xa6,0xa6,0xa6,0xa6,0xa6,0xa6};
unsigned code     q6[18]={0x07,0x07,0x07,0x47,0x47,0x47,
                          0x47,0x47,0x87,0x87,0x87,0x87,
                          0x87,0x87,0x87,0x87,0x87,0x87};                          
 main()
{  din=1;                                 //通知CH451使能四个串行口
   din=0;
   din=1;
   num=0;
   write(CH451_RESET);                    //设定复位
   write(CH451_SYSOFF);                   //设定系统参数
 while(1)
   { ch451_read();
    if(keycode==0x40)
         { num++;
         keycode=0xff;
         }
  write_max262(M0M1[num]) ;          //选择低通,方式1
  write_max262(f0f1[num]) ;          //f0,f1参数的设置
  write_max262(f2f3[num]) ;          //f2,f3参数的设置
  write_max262(f4f5[num]) ;          //f4,f5参数的设置
  write_max262(q0q1[num]) ;          //q0,q1参数的设置
  write_max262(q2q3[num]) ;          //q2,q3参数的设置
  write_max262(q4q5[num]) ;          //q4,q5参数的设置
  write_max262(q6[num]) ;          //q6,参数的设置
   }
 }



void write_max262(uchar dat)
{
 uchar k ;
 sload = 0 ;
 for(k=0;k<8;k++)
 {
  sclk = 0 ;
  dat = dat << 1 ;
  sdata = CY ;
  sclk = 1 ;
 }
 max_wr = 0 ;
 sload = 1 ;
 max_wr = 1 ;
}

void write(uint order)      //数据输入到CH451子程序
  {
     uint i;
     load=1;
   for(i=0;i<12;i++)
     {
       din=order&1;
       dclk=0;
       order=order>>1;
       dclk=1;
     }
   load=0;
   load=1;
  }


void ch451_read()
{ uint i;
  load=1;
  while(dout==1);   //查询标志位,有按键DOUT为0
  write(CH451_KEY);
  load=1;
  load=0;
  load=1;
  keycode=0x00;
    for(i=0;i<6;i++)
     {
     keycode=keycode|(unsigned char)dout;
     keycode=keycode<<1;
     dclk=1;
     dclk=0;
     }
     keycode=keycode|(unsigned char)dout;  //读得键码
   for(i=0;i<42500;i++);
    din=1;                               
    din=0;
   din=1;
   dout=1;
   write(CH451_RESET);                    
   write(CH451_SYSOFF);                   
}

⌨️ 快捷键说明

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