📄 dds9851main.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 + -