//头文件名
//-----------------------------------------------------------------------------
#include <c8051f020.h>
#include<math.h>
#include<stdio.h>
#include<intrins.h>
//十六位寄存器声明
sfr16 DP = 0x82; // data pointer
sfr16 TMR3RL = 0x92; // Timer3 reload value
sfr16 TMR3 = 0x94; // Timer3 counter
sfr16 ADC0 = 0xbe; // ADC0 data
sfr16 ADC0GT = 0xc4; // ADC0 greater than window
sfr16 ADC0LT = 0xc6; // ADC0 less than window
sfr16 RCAP2 = 0xca; // Timer2 capture/reload
sfr16 T2 = 0xcc; // Timer2
sfr16 RCAP4 = 0xe4; // Timer4 capture/reload
sfr16 T4 = 0xf4; // Timer4
sfr16 DAC0 = 0xd2; // DAC0 data
sfr16 DAC1 = 0xd5; // DAC1 data
//宏定义
#define ulong unsigned long
#define uint unsigned int
#define uchar unsigned char
#define VREF 2.45
#define SYSCLK 24000000
//-----------------------------------------------------------------------------
// 液晶接口定义
//-----------------------------------------------------------------------------
#define lcddata P5 //P5口作为LCD12864的数据口
#define busy 0x80 //用于检测忙信号
/*
sbit rs=P6^2; //并行的指令/数据选择信号
sbit rw=P6^1; //读写信号
sbit e=P6^0; //液晶使能信号
sbit PSB =P4^7;//高电平
sbit RST =P4^6;//高电平
*/
#define EH P6|=0x01 //P6^0=1
#define EL P6&=0xfe //P6^0=0
#define RWH P6|=0x02 //P6^1=1
#define RWL P6&=0xfd //P6^1=0
#define RSH P6|=0x04 //P6^2=1
#define RSL P6&=0xfb //P6^2=0
#define PSB P4|=0x80 //P4^7=1
#define RST P4|=0x40 //P4^6=1
//****************AD9851接口定义*************//
#define AD9851_DATA P3 //定义P3口为AD9851的数据口
sbit RESET=P2^1;
sbit FQ_UD=P2^2;
sbit W_CLK=P2^0; //控制线定义
uchar W0=0x01; //开6倍频
uchar W1,W2,W3,W4; //改是个存储频率字的大小
//函数声明
void Oscillator_Init(void); //系统时钟晶振初始化配置
void Port_IO_Init(void); //I/O口的初始化
void Timer_Init(void); //定时器初始化
void INT_Init(void); //中断初始化
void ADC0_Init(void); //ADC0初始化
void AD9851_Init(); //AD9851初始化
void wr_d_lcd(uchar content); //12864写数据
void wr_c_lcd(uchar content); //12864写指令
void clrram_lcd (void); //12864液晶清屏
void lcd_Init(void); //12864液晶初始化
void busy_lcd(void); //12864检测忙信号
void clc_lcd(void); //12864清屏
void gotoxy(uchar y,uchar x); //指定显示位置
void showstr(uchar *str); //显示字符串程序
void display(uchar n,uchar *a); //显示数字
void showint(void);
void jpsm(void); //键盘扫描
void wr_freword(ulong fre); //通过频率计数所需的频率字,并并行写入;
void delay(uint t); //延时
void delay1us(uint t); //1us延时
void delay1ms(uint t); //1ms延时
//变量和数组声明
uint ADC0DATA=0;
uchar DA0DATA;
uint jad; //计电压采样个数
uint xdata getv[40]=0; //电压采集存储
ulong int Fre=15455000; //32位的频率字
uchar freq[9]=0;
uchar W0,W1,W2,W3,W4; //AD9851的5个频率寄存器构成频率字
void choosefs(uchar j); //判断调制方式,是否需要继续扫频
void showf(ulong f); //显示载波频率
/**********************************主程序****************************/
void main ( )
{
WDTCN =0xde;
WDTCN =0xad; //禁止看门狗定时器
Oscillator_Init();
Port_IO_Init();
lcd_Init();
INT_Init(); //中断初始化
ADC0_Init(); //ADC0初始化
AD9851_Init(); //AD9851初始化
showint();
TR0=1;
TR1=1; //TR0=1.TR1=1;启动计数器0和定时器1
wr_freword(Fre); //输入频率为15.455MHz
while(1)
{
jpsm();
}
}
/****************F020初始化程序配置**************/
/***********************************************/
void Oscillator_Init(void) //系统时钟晶振初始化配置
{
uint i;
OSCXCN=0x67;
for (i=0;i<256;i++); // Wait 1ms for initialization
while(!(OSCXCN&0x80));
OSCICN =0x88;
}
void Port_IO_Init(void) //I/O口的初始化
{
XBR1=0x02; //P0^0;连接T0
XBR2=0x40; // 交叉开关使能
P2MDOUT=0x00;
P3MDOUT=0xFF; //P2,P3口设置为推挽输出
P74OUT=0xf3; //12864的数据口P5^7必须要设置成漏极开路才可以读忙信号
}
void Timer_Init(void) //定时器初始化
{
CKCON=0x28; //计数器0系统时钟,定时器1,2使用系统时钟的12分频
TCON=0x00; //禁止定时器0,1,TR0=0,TR1=0;
T2CON=0x00; //16位自动重载
TMOD=0x15; //计数器0 16位,定时器1 16位
TH1=(65536-50000)/256;
TL1=(65536-50000)%256; //25ms
TH0=TL0=0x00;
TH2=(65536-1875)/256;
TL2=(65536-1875)%256; //定时100us
RCAP2H=(65536-1875)/256;
RCAP2L=(65536-1875)%256; //自动重载定时100us
}
void INT_Init() //中断初始化
{
EA=1; //开总中断
ET0=0;
ET1=0; //允许定时器0.1中断
EIE2=0x02; //允许ADC0转换中断
}
void ADC0_Init() //ADC0初始化
{
REF0CN=0x03; //使用内部参考电压2.4V
ADC0CN=0x80;
AMX0CF=0x00; //8个模拟口均单端输入
AMX0SL=0x01;
ADC0CF=((SYSCLK/125000)-1)<<3; //采样频率为125KHz
ADC0CN&=~0x07; //ADC0在AD0BUSY写1启动,采样数据格式右对齐
}
void AD9851_Init() //AD9851初始化
{
RESET=1;
delay1ms(10);//延时10ms进行清寄存器
RESET=0;
W_CLK=0;
FQ_UD=0;
}
/***********************延时子程序****************************/
void delay(uint t)
{ unsigned int k,j;
for(k=0;k<t;k++)
for(j=0;j<10;j++) ;
}
void delay1us(uint t) //1us延时
{
uint i;
for(i=0;i<t;i++)
{
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
}
void delay1ms(uint t) //延时1ms
{
uint i,j;
for (i=0;i<t;i++)
{
for(j=0;j<1240;j++);
}
}
/**************************液晶子程序*********************************/
void busy_lcd(void) //检测液晶忙信号
{
lcddata=0xff; //端口拉高读数据
RSL;
RWH; //01读忙信号
EH;
while(lcddata&0x80); //e高电平读入
EL;
}
void wr_d_lcd(uchar content) //12864写数据
{
busy_lcd();
RSH ;
RWL; //10写数据
EH;
lcddata=content;
delay(50);
delay(60); //延时写入
EL;
delay(50);
delay(60);
}
void wr_c_lcd(uchar content) //12864写指令
{
busy_lcd();
RSL;
RWL; //00写指令
EH;
lcddata=content;
delay(50);
delay(60); //延时写入
EL;
delay(50);
delay(60);
}
void lcd_Init(void) //12864液晶初始化
{
PSB;
RST;
wr_c_lcd(0x30); //功能设定为基本指令集
wr_c_lcd(0x0c); //开显示关游标
wr_c_lcd(0x01); //清除显示
wr_c_lcd(0x06); //设定游标移动方向
delay(100);
}
void clc_lcd(void) //12864清屏
{
wr_c_lcd(0x30);
wr_c_lcd(0x01);
}
void gotoxy(unsigned char y, unsigned char x) //指定显示位置
{
if(y==1)
wr_c_lcd(0x80|x); //第一行
if(y==2)
wr_c_lcd(0x90|x); //第二行
if(y==3)
wr_c_lcd((0x80|x)+8); //第三行
if(y==4)
wr_c_lcd((0x90|x)+8); //第四行
}
void showstr(uchar *str) //显示字符串程序
{
while(*str!='\0')
{
wr_d_lcd(*str);
str++;
delay(50);
delay(100);
}
}
void display(uchar n,uchar *a) //显示数字字符
{
uchar i;
for(i=0;i<n;i++)wr_d_lcd(a[i]);
}
void showint()
{
gotoxy(1,0);
showstr(" 按K0启动");
gotoxy(2,0);
showstr(" 按K1返回复位");
}
/*********************键盘扫描子程�
DDS.rar_DDS高频_c8051f02
版权申诉
78 浏览量
2022-09-24
18:52:02
上传
评论
收藏 45KB RAR 举报
APei
- 粉丝: 63
- 资源: 1万+
最新资源
- postgresql-42.7.3.jar
- 2024-05-21 20-36-43.mkv
- 基于QT+C++的智能云监护仪项目,能够实时显示使用者心电、血氧、血压波形及其它各种参数+源码(毕业设计&课程设计&项目开发)
- 基于java开发的app接收硬件端传输的心音信号,具有显示心音波形,发出心音的功能+源码(毕业设计&课程设计&项目开发)
- Python 程序语言设计模式思路-行为型模式:职责链模式:将请求从一个处理者传递到下一个处理者
- 9241703124789646.16健身系统2.apk
- postgresql-16.3-1-windows-x64.exe
- Python 程序语言设计模式思路-结构型模式:装饰器讲解及利用Python装饰器模式实现高效日志记录和性能测试
- 基于YOLOv5和DeepSORT的多目标跟踪仿真与记录
- Python 程序语言设计模式思路-创建型模式:原型模式:通过复制现有对象来创建新对象,面向对象编程
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈