毕业论文
控制信息输入,单片机获取控制信号后处理,区别不同的状态,按照程序流程图,对系统进行控制,以达到题目要求。修改AD9851的频率控制字有并行和串行两种方式,由于系统由软件调频,要求频率变化的控制迅速,故采用并行方式控制AD9851, 提高速度,实现较好的调频效果。 4.2 软件流程图及程序
开始初始化否按键?显示对应按键状态界面是频率步进值加减最大频偏修改调频开始/停止调制度变换更新
DDS数据传送和启动时序如图4.2所示:
时间规格表如表5.2.1所示:
图4.2
时间规格表4.1:
毕业论文
根据上面的时序图,完成AD9851启动、送控制口使能和频率控制字,相位控制字的子程序如下: #include \
//定义DDS的引脚端口
#define DDS_port P0 sbit DDS_clk = P2^7; sbit DDS_reset = P2^5; sbit DDS_ud = P2^6;
void delay(unsigned int t) { }
/******************************DDS****************************/ unsigned long g_ulFreq = 100000; void SetFreq(void) {
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设置频率
for(;t>0;t--);
//通用延时程序
毕业论文
}
DDS_clk = 1; DDS_clk = 0; DDS_ud = 1; DDS_ud = 0;
//复位DDS
void ResetDDS(void) { }
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) { 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();
//LCD发一字节数据 毕业论文
}
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) {