📄 top.c
字号:
/*电子综合设计实验箱测试程序
说明:此程序为51单片机系统模块,键盘LED模块,LCD1602显示模块,LCD12864显示模块
万能板模块测试程序
插上跳线冒J104确保总线给其他模块供电
技术支持:qq:190189667 胡玉贵
*/
#include <reg51.h>
#include <absacc.h>
#include <string.h>
#include<INTRINS.H>
#include "lcd.h"
#include "serial.h"
//#include "lcd12864.h"
sbit sdata=P0^3;
sbit sclk=P0^4;
sbit load=P0^5;
sbit ldac=P0^6;
//注意跳线冒P13~P15插到右边
sbit ds=P1^3;
sbit sh=P1^4;
sbit st=P1^5;
//AD9850控制引脚,注意将P32~P35的跳线冒插到左边
sbit DDS_reset=P3^2;
sbit DDS_sclk=P3^3;
sbit DDS_load=P3^4; //FQUD
sbit DDS_sdata=P3^5; //DATA
typedef unsigned char uint8;
//extern uint8 code tab[13];
//extern uint8 d[8];
#define uchar unsigned char
/*************************AD9850初始化********************************/
void ad9850init()
{
DDS_reset=0;
DDS_reset=1;
DDS_reset=0;
DDS_load=0;
}
/*************************AD9850显示正弦波********************************/
AD9850(float freq)
{
float fw;
uchar temp;
uchar i,j;
uchar d[5];
// fw=freq*34.359738368; //d[4]中存放控制字最高位,即相位控制字
//Freq=MCLK*FW/2^32
fw=freq*85.89934592;
d[4]=0;
d[0]=(unsigned long)fw;
d[1]=(unsigned long)fw>>8;
d[2]=(unsigned long)fw>>16;
d[3]=(unsigned long)fw>>24;
DDS_load=0;
DDS_sclk=0;
DDS_sclk=1;
DDS_sclk=0;
DDS_load=1;
DDS_load=0;
for(i=0;i<5;i++)
{
temp=d[i];
for(j=0;j<8;j++)
{
DDS_sclk=0;
if(temp&1) DDS_sdata=1;
else DDS_sdata=0;
DDS_sclk=1;
temp=temp>>1;
}
}
DDS_load=1;
DDS_load=0;
DDS_load=0;
DDS_load=0;
}
void WriteSIOByte(unsigned char led,unsigned char sel,unsigned char seg)
{
unsigned char i;
for (i=0;i<8;i++)
{
led=led<<1; ds=CY; sh=1; sh=0;
}
_nop_();//延时
for (i=0;i<8;i++)
{
sel=sel<<1; ds=CY; sh=1; sh=0;
}
_nop_();//延时
for (i=0;i<8;i++)
{
seg=seg<<1; ds=CY; sh=1; sh=0;
}
//SER=1;//释放数据总线
//以下3条指令若在多字节时,应该移入多字节全发送完后在执行此3条指令
st=0;
// #asm("nop");//延时
//delay(2);
st=1;//打入并行数据
}
main()
{
unsigned char xdata i,str[]="freq:1K ";
unsigned char xdata str2[]="KeyValue:";
//unsigned int v;
ad9850init();
AD9850(1000);//AD9850输出1KHZ的正弦波
WriteSIOByte(1,0,0);//防止蜂鸣器乱叫
InitSerial();
//Timer0Init();
InitSerialBuffer();//初始化串口波特率:9600bps
LCDInit();
LCDWriteCommand(0x80);
for(i=0;i<strlen(str);i++)
LCDWriteData(str[i]);
LCDWriteCommand(0xC0);
for(i=0;i<strlen(str2);i++)
LCDWriteData(str2[i]);
while(1)
{
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -