📄 dds9954.c
字号:
//***********************************************************************
// 液晶控制芯片ST7920驱动源文件 *
// *
//硬件连接说明: *
// *
// RS(CS) ----------------------------- P3^1 *
// R/W(STD) ----------------------------- P3^4 *
// E(SCLK) ----------------------------- P3^5 *
// PSB ----------------------------- P0^1 *
// RST ----------------------------- P0^0 *
// DB0 ----------------------------- P1^0 *
// DB1 ----------------------------- P1^1 *
// DB2 ----------------------------- P1^2 *
// DB3 ----------------------------- P1^3 *
// DB4 ----------------------------- P1^4 *
// DB5 ----------------------------- P1^5 *
// DB6 ----------------------------- P1^6 *
// DB7(BUSY) ----------------------------- P1^7 *
// *
//***********************************************************************
#include <reg52.h>
#include<intrins.h>
#include<string.h>
#define uchar unsigned char
#define uint unsigned int
#define COUNT 0x10
//每行的首地址,基于RT12864-4M型液晶
#define LINE_ONE_ADDRESS 0x80
#define LINE_TWO_ADDRESS 0x90
#define LINE_THREE_ADDRESS 0x88
#define LINE_FOUR_ADDRESS 0x98
//基本指令集预定义
#define DATA 1 //数据位
#define COMMAND 0 //命令位
#define CLEAR_SCREEN 0x01 //清屏
#define ADDRESS_RESET 0x02 //地址归零
#define BASIC_FUNCTION 0x30 //基本指令集
#define EXTEND_FUNCTION 0x34 //扩充指令集
//扩展指令集预定义
#define AWAIT_MODE 0x01 //待命模式
#define ROLLADDRESS_ON 0x03 //允许输入垂直卷动地址
#define IRAMADDRESS_ON 0x02 //允许输入IRAM地址
#define SLEEP_MODE 0x08 //进入睡眠模式
#define NO_SLEEP_MODE 0x0c //脱离睡眠模式
#define GRAPH_ON 0x36 //打开绘图模式
#define GRAPH_OFF 0x34 //关闭绘图模式
//并行位定义
sbit RS=P1^4;
sbit RW=P1^5;
sbit E= P1^6;
sbit BUSY=P2^7;
//控制位定义
sbit PSB = P1^7; //串并选择信号
sbit RST = P3^0; //复位信号
uchar code Tab1[]="扫频仪"; //显示在第一行
uchar code Tab2[]="起始频率: 3KHz";//显示在第二行
uchar code Tab3[]="终止频率: 7KHz";//显示在第三行
uchar code Tab4[]="扫描时间: 4s";//显示在第四行
uchar code Tab5[]={0x54,0xf4};
unsigned long CFR1 ;
unsigned long CFR2 = 0;
unsigned long FTW0;
unsigned long FTW1;
unsigned long NLSCW;
unsigned long PLSCW;
unsigned long multfreq = 0xFFFFFFFF; //计算频率控制字的系数
//51引脚定义
sbit IO_UPDATE = P0^0;
sbit PS1 = P0^1;
sbit PS0 = P0^2;
sbit IO_SYNC = P0^3;
sbit SDIO = P0^4;
sbit SCLK = P0^5;
sbit CS = P0^6;
sbit SDO = P0^7;
sbit CS2 = P1^0;
sbit PWR = P1^1;
sbit CLKMS = P1^2;
sbit RET = P1^3;
/***********************************************************************
** 函数名称: 端口操作
** 功能描述: AD9954端口基本操作
** 输 入: 无
** 输 出: 无
** 全局变量: 无
** 调用模块: 无
***********************************************************************/
void SCLK_0(void)
{
SCLK = 0;
}
void SCLK_1(void)
{
SCLK = 1;
}
void SDIO_0(void)
{
SDIO = 0;
}
void SDIO_1(void)
{
SDIO = 1;
}
void IO_UPDATE_0(void)
{
IO_UPDATE = 0;
}
void IO_UPDATE_1(void)
{
IO_UPDATE = 1;
}
/***********************************************************************
** 函数名称: IO9954_Init
** 功能描述: IO_Init
** 输 入: 无
** 输 出: 无
** 全局变量: 无
** 调用模块: 无
***********************************************************************/
void IO9954_Init()
{
CS2= 0;
PWR=0;
CLKMS=0;
RET=0;
IO_UPDATE = 0;
// PS1 = 0;
// PS0 = 0;
IO_SYNC = 0;
SDIO = 0;
SCLK = 0;
CS = 0;
// SDO = 0;
}
/***********************************************************************
** 函数名称: nNop
** 功能描述: US级软件延时(不精确)
** 输 入: 延时参数,值越大时延时越久
** 输 出: 无
** 全局变量: 无
** 调用模块: 无
***********************************************************************/
void nNop(unsigned long nValue)
{
unsigned long i;
for(i=nValue;i>0;i--);
}
/***********************************************************************
** 函数名称: WriteByte
** 功能描述: 向AD9954发送一字节数据 MSB FIRST
** 输 入: unsigned char data 发送的数据
** 输 出: 无
** 全局变量: 无
** 调用模块: 端口操作 nNop
***********************************************************************/
void WriteByte(unsigned char Data)
{
unsigned char k;
for(k=0;k<8;k++)
{
SCLK_0();
nNop(4); //延时很重要
if((Data&0x80) == 0x80)
SDIO_1();
else
SDIO_0();
Data = Data << 1;
nNop(2); //延时很重要
SCLK_1();
nNop(4); //延时很重要
}
}
/***********************************************************************
** 函数名称: 更新寄存器操作
** 功能描述: 每次更新寄存器的固定操作
** 输 入: 无
** 输 出: 无
** 全局变量: 无
** 调用模块: 无
***********************************************************************/
void AD9954_Update(void)
{
IO_UPDATE_0();
nNop(40);
IO_UPDATE_1();
}
void AD9954_LinearSweep_Init(void)
{
WriteByte(0x00);
WriteByte(0x00);
WriteByte(0x20);
WriteByte(0x00);
WriteByte(0x44);
AD9954_Update();
}
void AD9954_LinearSweep_Freq(void)
{
WriteByte(0x04);
WriteByte(0x00);
WriteByte(0x09);
WriteByte(0xD4);
WriteByte(0x95);
WriteByte(0x06);
WriteByte(0x00);
WriteByte(0x16);
WriteByte(0xF0);
WriteByte(0x06);
WriteByte(0x07);
WriteByte(0xFF);
WriteByte(0x00);
WriteByte(0x00);
WriteByte(0x00);
WriteByte(0x0B);
WriteByte(0x08);
WriteByte(0xFF);
WriteByte(0x00);
WriteByte(0x00);
WriteByte(0x00);
WriteByte(0x0B);
AD9954_Update();
}
//*******************************************
//*函数名称:void Parallel_Check_Busy(void) *
//*函数功能:并行方式查忙 *
//*形式参数:无 *
//*形参说明:无 *
//*返回参数:无 *
//*使用说明:无 *
//*******************************************
void Parallel_Check_Busy(void)
{
bit temp;
P2 = 0xff; //输入前置1
RS = 0; //指令
RW = 1; //读模式
do
{
E = 1; //使能
temp = BUSY;
E = 0;
}
while(temp);//等待不忙
}
//************************************************************************************
//*函数名称:void Parallel_Write_LCD( bit b_Data_Command , unsigned char uc_Content ) *
//*函数功能:并行模式向LCD发送数据或指令 *
//*形式参数:bit b_Data_Command , unsigned char uc_Content *
//*形参说明:数据或指令的标志位,指令或数据的内容 *
//*返回参数:无 *
//*使用说明:无 *
//************************************************************************************
void Parallel_Write_LCD( bit b_Data_Command , unsigned char uc_Content )
{
Parallel_Check_Busy();
if(b_Data_Command)
{
RS = 1; //数据
RW = 0; //写模式
}
else
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -