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

📄 chengkonglvboqi.c

📁 程控滤波器的程序
💻 C
字号:
#include"reg52.h"
#include "intrins.h"
#include "stdio.h"
#include "ctype.h"
#include "string.h"

#define RESET_ADD      0x02
#define RESET_CODE     0x01
#define LEFTMOV_ADD    0x03
#define LEFTMOV_CODE   0
#define LEFTCYC_ADD    0x03
#define LEFTCYC_CODE   0x01
#define RIGHTMOV_ADD   0x03
#define RIGHTMOV_CODE  0x02
#define RIGHTCYC       0x03
#define RIGHTCYC       0x03
#define SYSOFF_ADD     0x04
#define  SYSOFF_CODE   0x00
#define SYSON1_ADD     0x04
#define SYSON1_CODE    0x01
#define SYSON2_ADD     0x04
#define SYSON2_CODE    0x03
#define SYSON3_ADD     0x04
#define SYSON3_CODE    0x07
#define DSP_ADD        0x05
#define DSP_CODE       0x0a
#define BCD_ADD        0x05
#define BCD_CODE       0x80
#define TWINKLE_ADD    0x06
#define TWINKLE_CODE   0x00
#define DIG0           0x08
#define DIG1           0x09
#define DIG2           0x0a
#define DIG3           0x0b
#define DIG4           0x0c
#define DIG5           0x0d
#define DIG6           0x0e
#define DIG7           0x0f	
#define NOKEY          0
#define MENU           0x7b	 /*dp,c,b,d,a,e,f,g*/
#define CLEAR          0x7f
#define OK             0x7c
#define UP             0x7d
#define DOWN           0x7e	
#define CODE0          0x7e
#define CODE1          0x28
#define CODE2          0x5b
#define CODE3          0x6b
#define CODE4          0x2d
#define CODE5          0x67
#define CODE6          0x77
#define CODE7          0x2e
#define CODE8          0x7f
#define CODE9          0x6f
#define CODEF          0xe8
#define CODEU          0x7c
#define CODEH		   0x3d
#define CODEL		   0x54
#define POINT          0x01
#define year       0x10
#define month      0x11
#define date       0x12
#define hours      0x13
#define minutes    0x14
#define seconds    0x15
#define weekday    0x16

sbit B0=B^0;
sbit B1=B^1;
sbit B2=B^2;
sbit B3=B^3;
sbit B4=B^4;
sbit B5=B^5;
sbit B6=B^6;
sbit B7=B^7;

sbit CH451_DCLK=P1^3;  
sbit CH451_DIN=P1^2;
sbit CH451_LOAD=P1^1;
sbit CH451_DOUT=P1^0;

sbit S2_A=P1^7;
sbit S1_A=P1^6;
sbit S0_A=P1^5;

sbit S2_F=P2^2;
sbit S1_F=P2^0;
sbit S0_F=P2^1;

sbit EN1=P0^4;
sbit EN2=P0^2;
sbit EN3=P0^1;

sbit HC4053=P0^0;


union int_char
{
signed int signed_int;
unsigned int unsigned_int;
unsigned char c[2];
};


unsigned char key,time_data,time,timer,time1,time2,channel_fre,fre,channel_amplitude,delta_hc4053,channel_high,amp,delta,time3,z,last_key,y,m1,m2,k,j,j1,j2,j3,j4,l,k,d,r0,r1,r2,r3,r4,r5,second,display_state,time_hou,time_min,time_month;
unsigned char     keydata[8]={0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f,0};
unsigned char     dig0[8]={0,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
unsigned char     uled[10]={CODE0,CODE1,CODE2,CODE3,CODE4,CODE5,CODE6,CODE7,CODE8,CODE9};
unsigned char     dled[8]={CODE0,CODE1,CODE2,CODE2,CODE2,CODEU,CODE2,CODE2};
unsigned char     test[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
unsigned char     dig[8]={DIG0,DIG1,DIG2,DIG3,DIG4,DIG5,DIG6,DIG7};
unsigned int  last_counter,delta_counter,frequency;
data union int_char	  r,e,x,counter,fo;
/*-----------------------------------------------------------------------------------------------------------------*/
void CH451_WRITE(unsigned char uadd,unsigned char ux,unsigned char dadd,unsigned  char dx) /*写CH451*/
{
CH451_DIN=0;CH451_DIN=1;                                                                                     

B=dx;                                   /*写要写入第二个CH451数据的数据段*/
CH451_DIN=B0;CH451_DCLK=0;CH451_DCLK=1; /*时钟上升沿有效*/
CH451_DIN=B1;CH451_DCLK=0;CH451_DCLK=1;
CH451_DIN=B2;CH451_DCLK=0;CH451_DCLK=1;
CH451_DIN=B3;CH451_DCLK=0;CH451_DCLK=1;
CH451_DIN=B4;CH451_DCLK=0;CH451_DCLK=1;
CH451_DIN=B5;CH451_DCLK=0;CH451_DCLK=1;
CH451_DIN=B6;CH451_DCLK=0;CH451_DCLK=1;
CH451_DIN=B7;CH451_DCLK=0;CH451_DCLK=1;
B=dadd;                                 /*写要写入第二个CH451数据的地址段*/
CH451_DIN=B0;CH451_DCLK=0;CH451_DCLK=1;
CH451_DIN=B1;CH451_DCLK=0;CH451_DCLK=1;
CH451_DIN=B2;CH451_DCLK=0;CH451_DCLK=1;
CH451_DIN=B3;CH451_DCLK=0;CH451_DCLK=1;

B=ux;                                   /*写要写入第一个CH451数据的数据段*/
CH451_DIN=B0;CH451_DCLK=0;CH451_DCLK=1;
CH451_DIN=B1;CH451_DCLK=0;CH451_DCLK=1;
CH451_DIN=B2;CH451_DCLK=0;CH451_DCLK=1;
CH451_DIN=B3;CH451_DCLK=0;CH451_DCLK=1;
CH451_DIN=B4;CH451_DCLK=0;CH451_DCLK=1;
CH451_DIN=B5;CH451_DCLK=0;CH451_DCLK=1;
CH451_DIN=B6;CH451_DCLK=0;CH451_DCLK=1;
CH451_DIN=B7;CH451_DCLK=0;CH451_DCLK=1;
B=uadd;                                 /*写要写入第一个CH451数据的地址段*/
CH451_DIN=B0;CH451_DCLK=0;CH451_DCLK=1;
CH451_DIN=B1;CH451_DCLK=0;CH451_DCLK=1;
CH451_DIN=B2;CH451_DCLK=0;CH451_DCLK=1;
CH451_DIN=B3;CH451_DCLK=0;CH451_DCLK=1;

CH451_LOAD=0;CH451_LOAD=1;              /*加载数据*/
}
/*---------------------------------------------------*/
char CH451_READ()                      /*读CH451,当有键按下时,从DOUT口串行读出数据*/
{
CH451_DIN=0;CH451_DIN=1;

CH451_DIN=1;CH451_DCLK=0;CH451_DCLK=1; /*发送两个字节,将第二个CH451高四位送入7,通知其读键值*/
CH451_DIN=1;CH451_DCLK=0;CH451_DCLK=1;
CH451_DIN=1;CH451_DCLK=0;CH451_DCLK=1;
CH451_DIN=0;CH451_DCLK=0;CH451_DCLK=1;

CH451_DIN=0;CH451_DCLK=0;CH451_DCLK=1;
CH451_DIN=0;CH451_DCLK=0;CH451_DCLK=1;
CH451_DIN=0;CH451_DCLK=0;CH451_DCLK=1;
CH451_DIN=0;CH451_DCLK=0;CH451_DCLK=1;
CH451_DIN=0;CH451_DCLK=0;CH451_DCLK=1;
CH451_DIN=0;CH451_DCLK=0;CH451_DCLK=1;
CH451_DIN=0;CH451_DCLK=0;CH451_DCLK=1;
CH451_DIN=0;CH451_DCLK=0;CH451_DCLK=1;

CH451_DIN=0;CH451_DCLK=0;CH451_DCLK=1;
CH451_DIN=0;CH451_DCLK=0;CH451_DCLK=1;
CH451_DIN=0;CH451_DCLK=0;CH451_DCLK=1;
CH451_DIN=0;CH451_DCLK=0;CH451_DCLK=1;

CH451_LOAD=0;CH451_LOAD=1;               /*加载数据*/

B7=0;                                    /*读键值,并将其存入B寄存器中*/
B6=CH451_DOUT;CH451_DCLK=0;CH451_DCLK=1;
B5=CH451_DOUT;CH451_DCLK=0;CH451_DCLK=1;
B4=CH451_DOUT;CH451_DCLK=0;CH451_DCLK=1;
B3=CH451_DOUT;CH451_DCLK=0;CH451_DCLK=1;
B2=CH451_DOUT;CH451_DCLK=0;CH451_DCLK=1;
B1=CH451_DOUT;CH451_DCLK=0;CH451_DCLK=1;
B0=CH451_DOUT;CH451_DCLK=0;CH451_DCLK=1;
if(B6==0)B=0;                           /*如果键值为释放时的值,将B清零*/
return B;
}
/*-------------------------------------------------------*/
display_led()                           
{
unsigned char i;

for(i=0;i<8;i++)
{
CH451_WRITE(dig[i],uled[i],0,0);
}
}
/*-----------------------------------------------------*/
void timer0(void) interrupt 1              /*中断T0*/
{
TH0=0xd0;
second++;
if(second>49)
{
second=0;
counter.c[0]=TH1;counter.c[1]=TL1;
if(counter.c[0]!=TH1){counter.c[1]=TL1;counter.c[0]=TH1;}
delta_counter=counter.unsigned_int-last_counter;
last_counter=counter.unsigned_int;
}                          /*计8次返回*/
timer++;
if(timer<8)return;                          /*计8次返回*/
timer=0;
}

/*-------------------------------------------------------------------------*/
void wait_renew_display_read_key(void)
{
while(timer!=0)PCON=0x01; 
CH451_WRITE(SYSON1_ADD,SYSON1_CODE,SYSON2_ADD,SYSON2_CODE);
CH451_WRITE(DSP_ADD,DSP_CODE,DSP_ADD,DSP_CODE);
last_key=key;
key=CH451_READ();
display_led();
CH451_WRITE(0,0,DIG0,key);													  
}
/*-----------------------------------------------------------------------------------------------*/
char dis_code(char x)                        
{
switch(x)
{
case 0:return CODE0;
case 1:return CODE1;
case 2:return CODE2;
case 3:return CODE3;
case 4:return CODE4;
case 5:return CODE5;
case 6:return CODE6;
case 7:return CODE7;
case 8:return CODE8;
case 9:return CODE9;
default:return 0;
}
}
/*----------------------change the channel of the amplitude----------------------------------------*/
char channel_change_amplitude(unsigned char channel)
{
switch(channel)
{case 0:S2_A=0;S1_A=0;S0_A=1;amp=60;break;
 case 1:S2_A=0;S1_A=0;S0_A=0;amp=50;break;
 case 2:S2_A=0;S1_A=1;S0_A=1;amp=40;break;
 case 3:S2_A=1;S1_A=0;S0_A=0;amp=30;break;
 case 4:S2_A=1;S1_A=1;S0_A=0;amp=20;break;
 case 5:S2_A=1;S1_A=1;S0_A=1;amp=10;break;
 default:return 0;
 }

}

/*----------------------------------------------------------------------------------*/ 
char channel_change_fre(unsigned char channel)
{
switch(channel)
{case 1:EN3=1;EN2=0;EN1=0;S2_F=1;S1_F=0;S0_F=0;fre=20;break;/*R1=1600*/
 case 2:EN3=1;EN2=0;EN1=0;S2_F=1;S1_F=1;S0_F=0;fre=19;break;/*R2=8200*/
 case 3:EN3=0;EN2=0;EN1=1;S2_F=0;S1_F=0;S0_F=0;fre=18;break;/*R3=5300*/
 case 4:EN3=0;EN2=0;EN1=1;S2_F=1;S1_F=0;S0_F=1;fre=17;break;/*R4=3600*/
 case 5:EN3=0;EN2=1;EN1=0;S2_F=1;S1_F=1;S0_F=0;fre=16;break;/*R5=?*/
 case 6:EN3=0;EN2=1;EN1=0;S2_F=1;S1_F=0;S0_F=1;fre=15;break;/*R6=2700*/
 case 7:EN3=1;EN2=0;EN1=0;S2_F=0;S1_F=1;S0_F=0;fre=14;break;/*R7=2200*/
 case 8:EN3=1;EN2=0;EN1=0;S2_F=1;S1_F=1;S0_F=1;fre=13;break;/*R8=2000*/
 case 9:EN3=1;EN2=0;EN1=0;S2_F=0;S1_F=0;S0_F=0;fre=12;break;/*R9=1800*/
 case 10:EN3=0;EN2=1;EN1=0;S2_F=0;S1_F=0;S0_F=1;fre=11;break;/*R10=1600*/
 case 11:EN3=0;EN2=1;EN1=0;S2_F=0;S1_F=1;S0_F=0;fre=10;break;/*R11=1500*/
 case 12:EN3=0;EN2=0;EN1=1;S2_F=0;S1_F=1;S0_F=1;fre=9;break;/*R12=1380*/
 case 13:EN3=0;EN2=1;EN1=0;S2_F=0;S1_F=0;S0_F=0;fre=8;break;/*R13=1224*/
 case 14:EN3=0;EN2=1;EN1=0;S2_F=0;S1_F=1;S0_F=1;fre=7;break;/*R14=1137*/
 case 15:EN3=1;EN2=0;EN1=0;S2_F=0;S1_F=0;S0_F=1;fre=6;break;/*R15=1061*/
 case 16:EN3=0;EN2=0;EN1=1;S2_F=0;S1_F=1;S0_F=0;fre=5;break;/*R16=995*/
 case 17:EN3=0;EN2=0;EN1=1;S2_F=1;S1_F=0;S0_F=0;fre=4;break;/*R17=936*/
 case 18:EN3=0;EN2=0;EN1=1;S2_F=1;S1_F=1;S0_F=0;fre=3;break;/*R18=884*/
 case 19:EN3=0;EN2=0;EN1=1;S2_F=1;S1_F=1;S0_F=1;fre=2;break;/*R19=838*/
 case 20:EN3=0;EN2=1;EN1=0;S2_F=1;S1_F=0;S0_F=1;fre=1;break;/*R20=796*/
 default:return 0;
 }
}
/*-----------------------------------------------------------------*/
char channel_change_high_low(unsigned char channel)
{
switch(channel)
{
case 0:HC4053=0;break;
case 1:HC4053=1;break;
default:return 0;
}
}
/*-------------------------------------------------------------------*/
amplitude_display()
{
channel_change_amplitude(channel_amplitude);
if(last_key==NOKEY&&key==OK)
channel_amplitude++;
if(last_key==NOKEY&&key==CLEAR)
channel_amplitude--;
/*if(channel_amplitude<0)channel_amplitude=0;
if(channel_amplitude>5)channel_amplitude=5;	  */
uled[3]=dis_code(amp%10);
uled[4]=dis_code(amp/10);	
}
/*-----------------------------------------------------------------*/
frequency_display()
{
channel_change_fre(channel_fre);
if(last_key==NOKEY&&key==UP)
channel_fre++;
if(last_key==NOKEY&&key==DOWN)
channel_fre--;
if(channel_fre<1)channel_fre=1;
if(channel_fre>20)channel_fre=20;
uled[0]=dis_code(fre%10);
uled[1]=dis_code(fre/10);	
}
/*---------------------------------------------------------------------*/
high_low_display()
{
channel_change_high_low(channel_high);
if(last_key==NOKEY&&key==MENU)
channel_high++;
if(channel_high>1)channel_high=0;
if(channel_high==1) uled[6]=CODEH;
if(channel_high==0) uled[6]=CODEL;
}
/*-------------------------------------------------------------------------*/
void main(void)
{
channel_fre=20;
channel_amplitude=5;
TMOD=0x51;                                    /*设置定时中断T0*/
EA=1;
ET0=1;
TR0=1;
TR1=1;
for(;;)
{
amplitude_display();
frequency_display();
high_low_display();
uled[2]=0;uled[5]=0;uled[7]=0;
wait_renew_display_read_key();
}
}
/*------------------------------------------------------------*/

⌨️ 快捷键说明

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