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

📄 dds9851main.c

📁 DDS9851文件说明和编码使用规则士大夫撒反对撒犯得上
💻 C
字号:
#include "reg51.h"
	
#define DDS_port P0			//定义DDS的引脚端口
sbit DDS_clk = P2^7;
sbit DDS_reset = P2^5;
sbit DDS_ud = P2^6; 

void delay(unsigned int t)		//通用延时程序
{
	for(;t>0;t--);
}
/******************************DDS****************************/
unsigned long g_ulFreq = 100000;
void SetFreq(void)					//DDS设置频率
{
	unsigned long freq = g_ulFreq * 30;
	DDS_port = 0x01;
	DDS_clk = 1;
	DDS_clk = 0;
	DDS_port = freq >> 24;
	DDS_clk = 1;
	DDS_clk = 0;
	DDS_port = freq >> 16;
	DDS_clk = 1;
	DDS_clk = 0;
	DDS_port = freq >> 8;
	DDS_clk = 1;
	DDS_clk = 0;
	DDS_port = freq;
	DDS_clk = 1;
	DDS_clk = 0;

	DDS_ud = 1;
	DDS_ud = 0;
}
void ResetDDS(void)				//复位DDS
{
	DDS_reset = 1;
	delay(10000);
	DDS_clk = 0;
	DDS_ud = 0;
	DDS_reset = 0;
}
/******************************DDS****************************/
/**************************LCD程序**************************/
//#define dataport P2   
sbit D0=P1^3;
sbit D1=P1^4;
sbit D2=P1^5;
sbit D3=P1^6;
sbit D4=P1^7;
sbit D5=P2^2;
sbit D6=P2^3;
sbit D7=P2^4;
   
sbit RS=P1^0;
sbit RW=P1^1;
sbit ET=P1^2;

void Wait()	//延时程序
{
	unsigned int j;  
	for(j=0;j<300;j++){;}
}       
void WriCom(unsigned char comm)	//LCD发一命令字
{   
	RS=0;
    RW=0;
    ET=0;
    //dataport=comm;
	P1 &= 0x07;
	P1 |= ((comm<<3)&0xf8);
	D5 = comm & 0x20;
	D6 = comm & 0x40;
	D7 = comm & 0x80;

    ET=1;
    Wait();
    ET=0;
}
void WriData(unsigned char wdata)	//LCD发一字节数据
{      
    RS=1;
    RW=0;
    ET=0;   
	//dataport=comm;
	P1 &= 0x07;
	P1 |= ((wdata<<3)&0xf8);
	D5 = wdata & 0x20;
	D6 = wdata & 0x40;
	D7 = wdata & 0x80;

    ET=1;    
    Wait();
    ET=0;           
}
void InitLcd(void)	//LCD初始化
{ 
	Wait();
	WriCom(0x38);
	Wait();
	WriCom(0x38);
	Wait();
	WriCom(0x38);
	Wait();
	WriCom(0x38);
	Wait();
	WriCom(0x08);
	WriCom(0x01);
	WriCom(0x06);
	WriCom(0x0C);
}

void SetCursor(unsigned char row)	//设置光标即插入点
{  if(row>15)
   row+=(0x40-16);
   WriCom(row | 0x80);
}/*
void ClrLCD()
{
   WriCom(0x01);
}
void CursorGlint(unsigned char NoOff)
{
   unsigned char  com;
   com=NoOff<<2;
   com|=13;
   WriCom(com);
}
*/
void WriStr(char *str)	//LCD显示一字符串
{
	while(*str != 0)
	{
		WriData(*str);
		str++;
	}
}
/**********************end LCD程序**************************/
void Brush(void)			//刷新LCD
{
	SetCursor(16);
	WriData(g_ulFreq/10000000 + '0');
	WriData(g_ulFreq%10000000/1000000 + '0');
	WriData(g_ulFreq%1000000/100000 + '0');
	WriData(g_ulFreq%100000/10000 + '0');
	WriData(g_ulFreq%10000/1000 + '0');
	WriData(g_ulFreq%1000/100 + '0');
	WriData(g_ulFreq%100/10 + '0');
	WriData(g_ulFreq%10 + '0');
	WriData(' ');
	WriData('H');
	WriData('z');
}
/***********************************************************/

#define d_keyPort P3		//定义按键的引脚端口
sbit keyP30 = P3^0;
sbit keyP31 = P3^1;
sbit keyP32 = P3^2;
sbit keyP33 = P3^3;

unsigned char GetKey(void)		//扫描键盘,取按键码
{
	d_keyPort = 0x0f;
	if(d_keyPort != 0x0f)		//下键按下吗?
	{
		delay(5000);			//等一会
		if(d_keyPort != 0x0f)	//确认有键按下
		{
			d_keyPort = ~0x10;
			if(!keyP30)
				return 0x11;
			if(!keyP31)
				return 0x12;
			if(!keyP32)
				return 0x13;
			if(!keyP33)
				return 0x14;

			d_keyPort = ~0x20;
			if(!keyP30)
				return 0x21;
			if(!keyP31)
				return 0x22;
			if(!keyP32)
				return 0x23;
			if(!keyP33)
				return 0x24;

			d_keyPort = ~0x40;
			if(!keyP30)
				return 0x31;
			if(!keyP31)
				return 0x32;
			if(!keyP32)
				return 0x33;
			if(!keyP33)
				return 0x34;	
		
			d_keyPort = ~0x80;
			if(!keyP30)
				return 0x41;
			if(!keyP31)
				return 0x42;
			if(!keyP32)
				return 0x43;
			if(!keyP33)
				return 0x44;
		}
	}
	return 0;
}	

void main(void)					//主函数
{
	unsigned char key;
	InitLcd();
	WriStr("init system ...");
	delay(60000);
	InitLcd();
	WriStr("init ok");
	delay(60000);
	InitLcd();
	WriStr("DDS");
	ResetDDS();					//复位DDS
	SetFreq();					//DDS初始频率设定
	Brush();
	while(1)
	{
		key = GetKey();			//扫描键盘
		if(key == 0x34)
			g_ulFreq ++;
		else if(key == 0x44)
			g_ulFreq --;
		else if(key == 0x33)
			g_ulFreq +=10;
		else if(key == 0x43)
			g_ulFreq -=10;
		else if(key == 0x32)
			g_ulFreq +=100;
		else if(key == 0x42)
			g_ulFreq -=100;
		else if(key == 0x31)
			g_ulFreq +=1000;
		else if(key == 0x41)
			g_ulFreq -=1000;
		else if(key == 0x14)
			g_ulFreq +=10000;
		else if(key == 0x24)
			g_ulFreq -=10000;
		else if(key == 0x13)
			g_ulFreq +=100000;
		else if(key == 0x23)
			g_ulFreq -=100000;
		else if(key == 0x12)
			g_ulFreq +=1000000;
		else if(key == 0x22)
			g_ulFreq -=1000000;
		else if(key == 0x11)
			g_ulFreq +=10000000;
		else if(key == 0x21)
			g_ulFreq -=10000000;


		if(key)				//如果不键按下,则重新设置频率
		{
			SetFreq();		//重设频率
			Brush();		//重刷LCD
		}
	
		delay(10000);		//延时
	}
}

⌨️ 快捷键说明

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