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

📄 bh1415f.c

📁 数控调频发射器
💻 C
字号:
#include<reg52.h>
#include<intrins.h>
//#define disdata P0吗    //段码输出口
#define discan P2
//#define condata P1;	  //位码
#define uint unsigned int
#define uchar unsigned char
//#define keyio P1
sbit keyio=P3^7	;
uint data f_data={0x00},f_data1;	 //频率数据,数据运算是暂存用
sbit DA=P3^0;  //数据输入
sbit CK=P3^1;	//时钟
sbit CE=P3^2;	//片选
//sbit DIN=P0^1;   //小数点控制
//sbit monolamp=P1^0;  立体//立体声指示灯
uint h; 			//	延时参数	
uchar code du[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0xff};
uchar code we[4]={0xef,0xdf,0xbf,0x7f};
uchar data display[4]={0x00,0x00,0x00,0x00};
uchar bdata condata=0x08;		//1415控制字高五位,开机为立体声状态
//sbit mono=condata^3;                                                                                                                                                                                                 sbit mono=condata^3;			//单声道/立体声控制位
uchar data concommand[2];
uchar keytemp=0;
void delay(uint t)
{
	for(;t>0;t--);
}
scan()
{
	uchar k;
	for(k=0;k<4;k++)
	{
	P0=du[display[k]];
	 //if(k==1) {DIN=0;}
	discan=we[k];
	delay(50);
	P2=0xff;
	}
}
/******频率数据转换为显示用BCD码函数**********/
turn_bcd()
{
	display[3]=f_data/1000;if(display[3]==0){display[3]=10;}
	f_data1=f_data%1000;
	display[2]=f_data1/100;
	f_data1=f_data%100;
	display[1]=f_data1/10;			                                                                                                                                                                         
	display[0]=f_data1%10;
}
/*******控制字合成函数************/
command()
{
	concommand[1]=f_data/256;
		concommand[0]=f_data%256;
		concommand[1]=concommand[1]+condata;
}
/*******写入1个字节函数*************/
write(uchar val)
{	
	uchar i;
	CE=1;
	for(i=8;i>0;i--)
	{
		DA=val&0x01;
		_nop_(); _nop_();_nop_();_nop_();
	   CK=1;
		_nop_(); _nop_();_nop_();_nop_();
		CK=0;						  
		val=val/2;
		
	}
	CE=0;
}
/*********控制字写入1415函数**************/
w1415()
{
	write(concommand[0]);
		write(concommand[1]);
}
/**********频率刷新********/
fup()
{
	turn_bcd();
	command();
	w1415();
}
read_key()
{	if(keyio==0)
	{
	delay(500                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                );
	if(keyio==0)
	{
		keytemp++;
		if(keytemp==16)
		keytemp=0;
		}
	switch(keytemp)
		{
			case 15 :{f_data++;if(f_data>1099){f_data=1099;}fup();break;}

			case 14 :{f_data--;if(f_data<800){f_data=800;}fup();break;}

			//case 190 :{mono=~mono;if(mono){monolamp=0;} else monolamp=1;fup();break;}

			case 13 :{f_data=1090;fup();break;}

			case 12 :{f_data=1070;fup();break;}

			case 11 :{f_data=1050;fup();break;}

			case 10 :{f_data=1030;fup();break;}

			case 9 :{f_data=1000;fup();break;}

			case 8 :{f_data=970;fup();break;}

			case 7 :{f_data=950;fup();break;}

			case 6 :{f_data=930;fup();break;}

			case 5 :{f_data=900;fup();break;}

			case 4 :{f_data=870;fup();break;}

			case 3 :{f_data=850;fup();break;}

			case 2 :{f_data=830;fup();break;}

			case 1 :{f_data=800;fup();break;}

			default :break ;
	}
	}
	

		
	/*keyio=0xf0;
	keytemp=(~keyio)&0xf0;
	if(keytemp!=0)
	{
		keytemp=keyio;
		keyio=0x0f;
		keytemp=keytemp|keyio;
		while(((~keyio)&0x0f)!=0);
		switch(keytemp)
		{	
			case 238 :{f_data++;if(f_data>1099){f_data=1099;}fup();break;}

			case 222 :{f_data--;if(f_data<800){f_data=800;}fup();break;}

			//case 190 :{mono=~mono;if(mono){monolamp=0;} else monolamp=1;fup();break;}

			case 126 :{f_data=1090;fup();break;}

			case 237 :{f_data=1070;fup();break;}

			case 221 :{f_data=1050;fup();break;}

			case 189 :{f_data=1030;fup();break;}

			case 125 :{f_data=1000;fup();break;}

			case 235 :{f_data=970;fup();break;}

			case 219 :{f_data=950;fup();break;}

			case 187 :{f_data=930;fup();break;}

			case 123 :{f_data=900;fup();break;}

			case 231 :{f_data=870;fup();break;}

			case 215 :{f_data=850;fup();break;}

			case 183 :{f_data=830;fup();break;}

			case 119 :{f_data=800;fup();break;}

			default :break;
		
		}
	}
	keyio=0xff;*/
}
 main()
{
	P0=0xff;
	discan=0xff;
	keyio=0xff;
	DA=0;CK=0;CE=0;
	for(h=0;h<4;h++)
	{
		display[h]=8;	
	}
	for(h=0;h<500;h++)
	{
		scan();
	}
	f_data=1000;
//	monolamp=0;
	fup();
	while(1)
	{
		read_key();
		scan();
	}
}

⌨️ 快捷键说明

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