📄 text1.c
字号:
//www.pudn.com > AD9850_DDS_89C51.rar > DDS_MAIN.C
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
#define FALSE 0
#define TRUE 1
#include <ABSACC.H>
#include <AT89X051.H>
#include <INTRINS.H>
//晶体为12MHZ
uchar mucTime5ms;
uchar mucTime100ms;
uchar mucTime1s;
//uchar mucTime60s;
uchar muc1msDelay;
uchar muc100msDelay;
uchar muc1sDelay;
uchar muc60sDelay;
uchar mucFlashBit;
ulong mulFreq;
uchar mucInputNumber[MAX_INPUT_NUMBERS];
bit mbDispUpdateFlag;
bit mbFreqUpdateFlag;
//12MHz晶振
//i delay time/us
//1 5
//2 7
//3 9
void delay_3add_2i_us(unsigned char i)
{
while(--i);
}
//i delay time/us
//0 6+4
//1 12
//2 18
/*
void delay_6us(unsigned char i)
{
for(; i != 0; i--);
}
*/
//定时器0中断延时n*1ms,最大值为256ms
void delay_ms(uchar n)
{
for(muc1msDelay=0;muc1msDelay<N;); if(mucTime5ms muc1msDelay+="5;" mucTime5ms++; TH0="-(5000/256);" TL0="-(5000%256);//5ms中断一次" 定时器0时常数为50mS { 1 using interrupt time0(void) void 晶体为11.0592MHZ } 秒计数器 mucTime1s="0;" 100毫秒计数器 mucTime100ms="0;" 5毫秒计数器 mucTime5ms="0;" EA="1;" 允许定时器0中断 ET0="1;" 启动定时器0 TR0="1;" TMOD="0x01;" 定时器0工作在方式1,作为16位定时器 晶体为12MHZ init_device(void) * for(muc1sDelay="0;muc1sDelay<n;);" n) delay_1s(uchar 定时器0延时n*1s,最大值为256s="约4.27分钟" for(muc100msDelay="0;muc100msDelay<n;);" delay_100ms(uchar 定时器0延时n*100ms,最大值为25600ms="25.6s">=20)
{
mucTime5ms=0;
mucTime100ms++;
muc100msDelay++;
if(mucTime100ms>=10)
{
mucTime100ms=0;
//mucTime1s++;
muc1sDelay++;
/*if(mucTime1s>=60)
{
mucTime1s=0;
mucTime60s++;
}*/
}
}
}
/*
void write_freq(void)
{
uchar i;
ulong ulDDSWord;
ulong ulTemp;
uchar ucTemp;
ulDDSWord=(float)mulFreq*65536/DDS_CLK_IN*65536;
DDS_UPDATE=0;
for(i=0;i<32;i++)
{
DDS_CLK=0;
ulTemp=ulDDSWord>>i;
ucTemp=(uchar)(ulTemp&0x1);
if(ulTemp) DDS_DATA=1;
else DDS_DATA=0;
DDS_CLK=1;
}
for(i=0;i<8;i++)
{
DDS_CLK=0;
DDS_DATA=0;
DDS_CLK=1;
}
DDS_UPDATE=1;
DDS_CLK=0;
DDS_UPDATE=0;
}
*/
void DDS_set_freq (void)
{
unsigned char byte_temp;
unsigned long freq_word =0x0505AAFF ;//频率控制字
float fTemp;
fTemp=mulFreq;
fTemp=fTemp*65536/DDS_CLK_IN*65536;
freq_word =fTemp;
//freq_word =(float)mulFreq*65536/DDS_CLK_IN*65536;
_nop_(); _nop_(); _nop_(); _nop_();
DDS_UPDATE = 0;
_nop_(); _nop_(); _nop_(); _nop_();
DDS_CLK = 0;
_nop_(); _nop_(); _nop_(); _nop_();
for ( byte_temp = 0; byte_temp < 32; byte_temp++ )
{
freq_word = freq_word >> 1;
DDS_DATA = CY;
DDS_CLK = 1;
_nop_(); _nop_(); _nop_(); _nop_(); //实际应用应在延迟
DDS_CLK = 0;
}
for ( byte_temp = 0; byte_temp < 8; byte_temp++ )
{
DDS_DATA = 0;
DDS_CLK = 1;
_nop_(); _nop_(); _nop_(); _nop_();
DDS_CLK = 0;
}
DDS_UPDATE = 1;
_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
DDS_UPDATE = 0;
}
void init_dds(void)
{
DDS_RESET=0;
delay_3add_2i_us(2);
DDS_RESET=1;
delay_3add_2i_us(2);
DDS_RESET=0;
DDS_DATA=0;
DDS_CLK=0;
DDS_UPDATE=0;
DDS_UPDATE=1;
DDS_UPDATE=0;
DDS_CLK=1;
DDS_CLK=0;
DDS_UPDATE=1;
DDS_UPDATE=0;
mulFreq=0;
DDS_set_freq();
}
void write_disp_command(uint uiWord)
{
uchar i;
//uchar ucTemp;
DISP_LOAD=0;
_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
for(i=0;i<12;i++)
{
DISP_CLK=0;
uiWord=uiWord>>1;
_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
DISP_DATA=CY;
_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
DISP_CLK=1;//上升沿写入数据
_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
}
_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
DISP_LOAD=1;
_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
DISP_CLK=0;
_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
DISP_DATA=0;
}
void disp_Led(uchar ucLedNo,uchar ucDispNumberBCD)
{
uint uiDispCode;
uiDispCode=ucLedNo+8;
uiDispCode<<=8;
uiDispCode+=ucDispNumberBCD;
write_disp_command(uiDispCode);
}
void init_disp(void)
{
//使能串行接口
DISP_DATA=1;
_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
DISP_DATA=0;
_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
DISP_DATA=1;
//芯片内部复位
write_disp_command(0x201);
//只启用显示驱动
write_disp_command(0x401);
//设定显示参数:BCD
write_disp_command(0x58A);
//下面写数码管对应数据
disp_Led(7,8);
disp_Led(6,8);
disp_Led(5,8);
disp_Led(4,8);
disp_Led(3,8);
disp_Led(2,8);
disp_Led(1,8);
disp_Led(0,8);
}
void flash_led(uchar ucLedNo)
{
uint uiDispCode;
uiDispCode=6;
uiDispCode<<=8;
if(ucLedNo<8) uiDispCode+=(1<<UCLEDNO); { void } ucTemp="mucInputNumber[mucFlashBit];" && if(mucFlashBit="=0" ucTemp++; else if(ucTemp="=9)" mbDispUpdateFlag="TRUE;" mbFreqUpdateFlag="TRUE;" ucTemp; uchar number_add(void) mulFreq="ulFreq;" ulFreq+="mucInputNumber[i];" ulFreq*="10;" for(i="0;i<MAX_INPUT_NUMBERS;i++)" ulFreq="mulFreq;" ulFreq; ulong i; get_freq(void) disp_Led(0,mucInputNumber[0]); disp_Led(1,mucInputNumber[1]); disp_Led(2,mucInputNumber[2]); disp_Led(3,mucInputNumber[3]); disp_Led(4,mucInputNumber[4]); disp_Led(5,mucInputNumber[5]); disp_Led(6,mucInputNumber[6]); disp_Led(7,mucInputNumber[7]); value_to_bcd(); disp_freq(void) ="10;" mucInputNumber[MAX_INPUT_NUMBERS-1-i]="ulFreq%10;" value_to_bcd(void) write_disp_command(uiDispCode);>2) ucTemp=0;
mucInputNumber[mucFlashBit]=ucTemp;
get_freq();
}
void number_dec(void)
{
uchar ucTemp;
mbFreqUpdateFlag=TRUE;
mbDispUpdateFlag=TRUE;
ucTemp=mucInputNumber[mucFlashBit];
if(ucTemp==0)
{
if(mucFlashBit==0) ucTemp=2;
else ucTemp=9;
}
else ucTemp--;
mucInputNumber[mucFlashBit]=ucTemp;
get_freq();
}
uchar key_scan(void)
{
uchar ucKey;
//按键接在P3.2,P3.3,P3.4,P3.5
P3=0x3c;
ucKey=P3&0x3c;
if(ucKey!=0x3c)
{
delay_ms(20);
ucKey=P3&0x3c;
}
if(ucKey==0x3c) ucKey=KEY_NULL;
return ucKey;
}
void key_process(uchar ucKey)
{
mbDispUpdateFlag=FALSE;
mbFreqUpdateFlag=FALSE;
switch(ucKey)
{
case KEY_LEFT:
if(mucFlashBit==MAX_INPUT_NUMBERS) mucFlashBit=0;
else mucFlashBit++;
flash_led(mucFlashBit);
//mbDispUpdateFlag=TRUE;
break;
case KEY_RIGHT:
if(mucFlashBit==0) mucFlashBit=MAX_INPUT_NUMBERS;
else mucFlashBit--;
flash_led(mucFlashBit);
//mbDispUpdateFlag=TRUE;
break;
case KEY_UP:
if(mucFlashBit!=MAX_INPUT_NUMBERS) number_add();
break;
case KEY_DOWN:
if(mucFlashBit!=MAX_INPUT_NUMBERS) number_dec();
break;
}
if(mbDispUpdateFlag==TRUE) disp_freq();
if(mbFreqUpdateFlag==TRUE)
{
//write_freq();
DDS_set_freq();
}
delay_100ms(3);
}
void main(void)
{
uchar ucKey;
//SP=0x60;
init_device();
delay_100ms(20);
init_dds();
init_disp();
mulFreq=5000000;//20KHz
value_to_bcd();
mucFlashBit=3;
//flash_led(mucFlashBit);
disp_freq();
//write_freq();
DDS_set_freq();
while(1)
{
ucKey=key_scan();
if(ucKey!=KEY_NULL) key_process(ucKey);
}
}
/*1
void main(void)
{
init_device();
delay_100ms(20);
while(1)
{
//P3_0=1;P3_1=1;P3_2=1;P3_3=1;P3_4=1;P3_5=1;P3_7=1;
//P3_0=0;P3_1=0;P3_2=0;P3_3=0;P3_4=0;P3_5=0;P3_7=0;
P1_0=1;P1_1=1;P1_2=1;P1_3=1;P1_4=1;P1_5=1;P1_6=1;P1_7=1;
P1_0=0;P1_1=0;P1_2=0;P1_3=0;P1_4=0;P1_5=0;P1_6=0;P1_7=0;
//P1=1;
_nop_(); _nop_(); _nop_(); _nop_(); _nop_();
//P3=0;
//P1=0;
_nop_(); _nop_(); _nop_(); _nop_(); _nop_();
//delay_ms(2);
}
}
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -