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

📄 control.c

📁 数字频率合成器DDS9851控制系统的单片机源代码
💻 C
字号:
//////////////////////////////////////////////////////////////////////////////

//_________________________________//
// 0 1 2 3 4 5 6 7 8 9 a b c d e f //
/////////////////////////////////////
// O u t :   1 2 3 4 5 6 7 8   H z // disp_buf0[16]
// I n  :    8 7 6 5 4 3 2 1   H z // disp_buf1[16]
/////////////////////////////////////

extern unsigned char	disp_buf0[16];
extern unsigned char	disp_buf1[16];
extern unsigned char code	disp_error[16];
extern unsigned char code	disp_init[16];
extern unsigned char		word_buf[5];
extern unsigned char code   disp_max[16];

extern 	unsigned char	check_key(void);

extern 	void	ad9851_init(void);
extern  void    send_word(unsigned char *fq_word);

extern 	void	lcd_init(void);
extern 	void	write_lcd(unsigned char select,unsigned char dat);
extern 	void	display_line(unsigned char y, unsigned char *dat);

unsigned  long code	word_table[8] = {24,238,2386,23860,238609,2386092,23860929,238609294};//频率表

void	delay_ms(unsigned char time)   //长延时函数
{
	unsigned char cnt;
	while(time--)
		for (cnt=17;cnt>0;--cnt);
}
void    delay_s(unsigned int time)	 //短延时函数
{
	unsigned int cnt;
	while(time--)
		for (cnt=1000;cnt>0;--cnt);
}

main()
{
			 char nbit = 0;
	unsigned char key;
	unsigned char frequent[8];	  //用来查表的纯频率数组 
	unsigned char i;
	unsigned long temp;

	ad9851_init();        //各部件的初始化
	lcd_init();

	send_word(word_buf);   //初始化频率
	display_line(0,disp_buf0);
	display_line(1,disp_init);
	delay_s(200);
	display_line(1,disp_buf1);// 液晶默认显示

	while(1)
	{
		key = check_key();
		if(key == 10)	 //退格键
		{
			nbit--;  
			if (nbit < 0)  // 记得加 上如果开机状态 输退格处理
				nbit = 0; 
			frequent[nbit] = 0;
			disp_buf1[5 + nbit] = ' ';
			display_line(1,disp_buf1);
		}
		if(key == 11) 	//确认键
		{
			temp = 0;
			for(i=0;i<nbit;i++)  // 查表,读频率
			{
				temp += (word_table[nbit-i-1]*frequent[i]);
			}
			for(i=0;i<4;i++)
			{
				word_buf[4-i] = (unsigned char)(temp>>(8*i));
			}
			send_word(word_buf);   //更新频率

			if(nbit != 0)
				for(i=0;i<8;i++)
					disp_buf0[5+i] = ' ';  //去掉上次显示

			for(i=0;i<nbit;i++)	   //更新频率显示
			{
				disp_buf0[13-nbit+i] = frequent[i] + 0x30;	
			}
			display_line(0,disp_buf0);
			for (i=0;i<8;i++)
			{
				disp_buf1[5+i] = ' ';    //清输入显示
				frequent[i]	=  0;
			}
			
			display_line(1,disp_buf1);
			nbit = 0;
		}
		if(key <= 9 && key >= 0)	//数字键
		{
			if(nbit > 7 || ((nbit == 7) && (frequent[0] > 7)))		 //超出最大范围
				{
					display_line(1,disp_error);
					display_line(0,disp_max);  		//显示超范围错误
					delay_s(200);
					display_line(0,disp_buf0);
					for(i=0;i<8;i++)					//清屏幕
					{
						nbit = 0;
						disp_buf1[5 + i] = ' ';
						frequent[i] = 0;
					}
					display_line(1,disp_buf1);
				}
			else									//数字键处理过程
				{
					frequent[nbit] = key;
					disp_buf1[5 + nbit] = key + 0x30;
					display_line(1,disp_buf1);
					nbit++;
				}
		 }	
	}	
}

⌨️ 快捷键说明

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