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

📄 1415.c

📁 BH1415调频芯片的控制程序
💻 C
字号:
#include<reg51.h>
#include<intrins.h>
#include<stdio.h>
#include<intrins.h>

#define uchar unsigned char
#define uint  unsigned int 

sbit MUTE = P2^4;
sbit DI   = P2^5;
sbit CLK  = P2^6;
sbit CE   = P2^7;
sbit KEY_1= P1^4;
sbit KEY_2= P1^5;
sbit KEY_3= P1^6;
sbit KEY_4= P1^7;

sbit rs	= P2^0;
sbit rw  = P2^1;
sbit ep  = P2^2;
sbit lg  = P2^3;

void Send_16(uint ui_Date, uchar uc_MONO ,uchar uc_PD);        //发送数据函数
void Key_Scan_1(void);     //控制静音
void Key_Scan_2(void);     //频率步进 精度0.1MHZ
void Key_Scan_3(void);     //频率步退 精度0.1MHZ
void Key_Scan_4(void);     //立体声控制

void Delay(uchar ms);

void Disp(void);
void lcd_wdat(uchar dat);
void lcd_wcmd(uchar cmd);
void lcd_pos(uchar pos);
void lcd_init(void);
void lcd_disp(uchar pos,uchar dat);	
bit  lcd_bz(void);


uchar uc_Count_1;
uchar uc_Count_2;
uchar uc_Count_3;
uchar uc_Count_4;
uint ui_TEMP_1;      //保存频率数据
uint ui_TEMP_2;      //保存立体声数据
uint ui_TEMP_3; 	   //保存静音数据
uint ui_TEMP_4; 	   //

/**********************************主程序*************************************/

void main(void)
{

    Send_16(0x3e7,0x01,0x00);
	 ui_TEMP_2=0x01;
	 MUTE=0;
    Disp();
    while(1)
           { 

               Key_Scan_1();
               Key_Scan_2();
               Key_Scan_3();
               Key_Scan_4();
//               Disp();
            }
	 					    

}

/**********************************主程序*************************************/

/**********************************显示子程序*************************************/

void Disp(void)
{

	lcd_init();				// 初始化LCD			
	Delay(10);
		 
	    lcd_disp(0,70);
		 lcd_disp(1,77);
		 lcd_disp(2,58);
		 if(ui_TEMP_1>=1000)
	       {
	         lcd_disp(3,ui_TEMP_1/1000%10+48);
			 }
	    lcd_disp(4,ui_TEMP_1/100%10+48);
		 lcd_disp(5,ui_TEMP_1/10%10+48);
		 lcd_disp(6,46);
		 lcd_disp(7,ui_TEMP_1%10+48);
		 
		 if(ui_TEMP_2)
		 {
		   lcd_disp(9,83);
		   lcd_disp(10,84);
		   lcd_disp(11,69);
		 }
		 
		 if(ui_TEMP_3)
		 {
		 	lcd_disp(13,77);
		    lcd_disp(14,85);
		 }
		  lcd_disp(15,127);
		  lcd_disp(64,126);
		  lcd_disp(66,57);
		  lcd_disp(67,57);
		  lcd_disp(69,77);
		  lcd_disp(70,85);
		  lcd_disp(71,83);
		  lcd_disp(72,73);
		  lcd_disp(73,67);
		  lcd_disp(76,79);
		  lcd_disp(77,78);
		  lcd_disp(79,127);


}

/**********************************显示子程序*************************************/

/**********************************延时子程序********************************/


void Delay(uchar ms)
{							// lcd延时子程序
   uchar i;
	while(ms--)
	{
		for(i = 0; i< 250; i++)
		{
			_nop_();
			_nop_();
			_nop_();
			_nop_();
		}
	}
}

/**********************************延时子程序********************************/

/**********************************LCD函数*********************************/

void lcd_init()
{							//LCD初始化设定
	lcd_wcmd(0x38);			//
	Delay(1);
	lcd_wcmd(0x38);			//
	Delay(1);
	lcd_wcmd(0x38);			//
	Delay(1);
	lcd_wcmd(0x0c);			//
	Delay(1);
	lcd_wcmd(0x06);			//
	Delay(1);
	lcd_wcmd(0x01);			//清除LCD的显示内容
	Delay(1);
}


bit  lcd_bz()
{							// 测试LCD忙碌状态
	bit result;
	rs = 0;
	rw = 1;
	ep = 1;
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	result = (bit)(P0 & 0x80);
	ep = 0;
	return result;	
}

void lcd_wcmd(uchar cmd)				  // 写入指令数据到LCD
{							

	while(lcd_bz());
	rs = 0;
	rw = 0;
	ep = 0;
	_nop_();
	_nop_();	
	P0 = cmd;
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	ep = 1;
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	ep = 0; 
}

void lcd_disp(uchar pos,uchar dat)	
{	
					
	lcd_wcmd(pos | 0x80);		 //设定显示位置			
   while(lcd_bz());				 //写入字符显示数据到LCD
	rs = 1;
	rw = 0;
	ep = 0;
	P0 = dat;
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	ep = 1;
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	ep = 0;
}

/**********************************LCD函数*********************************/

/**********************************键盘扫描1*********************************/

void Key_Scan_1(void)      //控制静音
{
 if(KEY_1==0)
  {
    {
      Delay(20);
      if(KEY_1==0)
        {
           MUTE=(uc_Count_1++)%2;
			  ui_TEMP_3=MUTE;
           while(KEY_1==0);
		   }
		Disp();
      while(KEY_1==0);
    } 
  }   
}
/**********************************键盘扫描1*************************************/

/**********************************键盘扫描2*************************************/

void Key_Scan_2(void)      //频率步进
{
 if(KEY_2==0)
  {
   Delay(20);
    if(KEY_2==0)
     {
      uc_Count_2++;
      if(uc_Count_2==200)
       {
         uc_Count_2=0;
         Send_16(0x3e7,ui_TEMP_2,0x00);
       }
      Send_16(ui_TEMP_1+1,ui_TEMP_2,0x00);
		Disp();
      while(KEY_2==0);
     }
  } 
  
}

/**********************************键盘扫描2*************************************/

/**********************************键盘扫描3*************************************/

void Key_Scan_3(void)      //频率步退
{
 if(KEY_3==0)
  {
   Delay(20);
    if(KEY_3==0)
     {
      uc_Count_3++;
      if(uc_Count_3==300)
       {
         uc_Count_3=0;
         Send_16(0x3e7,ui_TEMP_2,0x00);
       }
      Send_16(ui_TEMP_1-1,ui_TEMP_2,0x00);  
		Disp();
      while(KEY_3==0);
     }
  }

}

/**********************************键盘扫描3*************************************/

/**********************************键盘扫描4*************************************/

void Key_Scan_4(void)     //立体声控制
{
 if(KEY_4==0)
  {
   Delay(20);
    if(KEY_4==0)
     {
      uc_Count_4++;
      if(ui_TEMP_2=uc_Count_4%2)
       Send_16(ui_TEMP_1,0x01,0x00);
      else
       Send_16(ui_TEMP_1,0x00,0x00);
		 Disp();
      while(KEY_4==0);
     }
  }  
}

/**********************************键盘扫描4*************************************/

/**********************************数据发送*************************************/

void Send_16(uint ui_Date,uchar uc_MONO ,uchar uc_PD)
{
 uchar i;
 ui_TEMP_1=ui_Date;
 CLK=0;
 CE=0;
 CE=1;
 for(i=11;i;--i)
  {
  DI=ui_Date&0x01; 
  ui_Date>>=1;
  CLK=1;
  CLK=0;
  }  
 DI=uc_MONO&0x01;
 CLK=1;
 CLK=0;
 DI=uc_PD&0x20;
 CLK=1;
 CLK=0;
 uc_PD<<=1;
 DI=uc_PD&0x20;
 CLK=1;
 CLK=0;
 DI=1;
 CLK=1;
 CLK=0;
 DI=0;
 CLK=1;
 CLK=0;
 CE=0;
}

/**********************************数据发送*************************************/

⌨️ 快捷键说明

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