?? 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 + -