基于单片机的多功能信号发生器的源程序及电路图

上传人:热**** 文档编号:125330796 上传时间:2020-03-17 格式:DOC 页数:11 大小:639KB
返回 下载 相关 举报
基于单片机的多功能信号发生器的源程序及电路图_第1页
第1页 / 共11页
基于单片机的多功能信号发生器的源程序及电路图_第2页
第2页 / 共11页
基于单片机的多功能信号发生器的源程序及电路图_第3页
第3页 / 共11页
基于单片机的多功能信号发生器的源程序及电路图_第4页
第4页 / 共11页
基于单片机的多功能信号发生器的源程序及电路图_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《基于单片机的多功能信号发生器的源程序及电路图》由会员分享,可在线阅读,更多相关《基于单片机的多功能信号发生器的源程序及电路图(11页珍藏版)》请在金锄头文库上搜索。

1、程序源代码#include #include #include void Delay1ms(WORD count);/软件延时函数void display_freq(void); /更新频率函数BYTE code Cursor=0xC3,0XC4,0XC6,0XC7,0XC8,0XCA,0XCB,0XCC,0x85;/换算光标位置unsigned int a;/控制长时间不操作隐藏光标unsigned char step=4;/移动光标bit flag=0;/控制光标闪烁unsigned long int code Data =10000000,1000000,100000,10000,100

2、0,100,10,1; /换算加减值unsigned long int Freqency_Out=1000; /初始化频率输出值unsigned char Wave_Out=1;unsigned char data DY3 = 0x00,0x00,0x00 ;unsigned char DA;unsigned long int XS;sbit KEY1 = P10;sbit KEY2 = P11;sbit KEY3 = P12;sbit KEY4 = P13;sbit KEY5 = P14;sbit KEY6 = P15;sbit BEEP = P37;sbit din = P34;sbit

3、clk = P35;sbit cs = P36;/*us级延时函数 */*/void DelayuS(unsigned int num) while( -num ) ; /* 软件延时 1*m毫秒 */void Delay1ms(WORD count) BYTE i, j;for( ; count0; count-)for(i=2; i0; i-)for(j=248; j0; j-); void display_freq(void) /显示频率 unsigned char j; unsigned long int temp; temp=Freqency_Out; tab23=temp/1000

4、0000+0x30;/ tab24=temp%10000000/1000000+0x30; tab26=temp%10000000%1000000/100000+0x30; tab27=temp%10000000%1000000%100000/10000+0x30; tab28=temp%10000000%1000000%100000%10000/1000+0x30; tab210=temp%10000000%1000000%100000%10000%1000/100+0x30; tab211=temp%10000000%1000000%100000%10000%1000%100/10+0x3

5、0; tab212=temp%10000000%1000000%100000%10000%1000%100%10+0x30; WriteLCD(0,0xC0);/设置显示位置为第二行第一个字 for(j=0; j15; j+) WriteLCD(1,tab2j); switch(Wave_Out) case 1:Load_wave(0x2000,Freqency_Out,0xD000);break; case 2:Load_wave(0x2002,Freqency_Out,0xD000);break; case 3:Load_wave(0x2028,Freqency_Out,0xD000);b

6、reak; void display_Wave(void) /变换波形 unsigned char j; switch(Wave_Out) case 1:WriteLCD(0,0x80);Load_wave(0x2000,Freqency_Out,0xD000); for(j=0; j10; j+) WriteLCD(1,tab1_1j);break; case 2:WriteLCD(0,0x80);Load_wave(0x2002,Freqency_Out,0xD000); for(j=0; j10; j+) WriteLCD(1,tab1_2j);break; case 3:WriteLC

7、D(0,0x80);Load_wave(0x2028,Freqency_Out,0xD000); for(j=0; j10; j+) WriteLCD(1,tab1_3j);break; /设置显示位置为第二行第一个字 void initTimer(void) /定时器初始化初值 TMOD=0x2; /方式二 TH0=0x49;/200us TL0=0x49; /*/* 蜂鸣器响一声 */*/void beep() unsigned char y ; for (y=0 ;y100 ;y+) DelayuS(60) ; BEEP=!BEEP ; /BEEP取反 BEEP=1 ; /关闭蜂鸣器 D

8、elayuS(40000) ; void TLC5615(DA) unsigned char y; DA=6; /舍弃前6 位 for(y=0;y12;y+) /从高到低发送 if(DA&0x8000)=0) din=0; else din=1; /din = x&0x8000; /此处不能用din = x&0x8000; cs=0; clk=1; ; clk=0; DA = DA1; cs=1; /* 电压转换与显示 */*/ Disp_dianya() DY2=XS/100+0x30 ; DY0=XS%100 ; DY1=DY0/10+0x30 ; DY0=DY0%10+0x30 ; Wr

9、iteLCD(0,0x8B); WriteLCD(1,DY2);/十位数显示 WriteLCD(0,0x8D); WriteLCD(1,DY1);/个位数显示 WriteLCD(0,0x8E); WriteLCD(1,DY0);/小数显示 void main(void) /主函数 unsigned char i; initTimer();/定时器初始化 TR0=1; ET0=1; DA=175;/DA初始电压 XS=5;/显示初始电压 TLC5615(DA); LCD_Initial();/液晶初始化 WriteLCD(0,0x80);/设置显示位置为第一行第一个字 for(i=0; i16;

10、 i+) WriteLCD(1,tab1_1i);/每行16个字,且光标自动右移 WriteLCD(0,0xC0);/设置显示位置为第二行第一个字 for(i=0; i16; i+) WriteLCD(1,tab2i); /每行16个字,且光标自动右移 Disp_dianya(); DDSIni();/初始化AD9833 Load_wave(0x2000,Freqency_Out,0xD000);/1KHz正弦信号 display_freq(); EA=1; /开启总中断 WriteLCD(0,Cursorstep);/设置显示位置为第二行第一个字while(1) if(KEY2=0)/Rig

11、ht 光标右移 Delay1ms(50); if(KEY2=0) if(a!=0)/在没有光标时,第一次按下向左,向右按键时,光标不移动,只是显示出光标,并闪烁 step+;if(step=9) step=0; WriteLCD(0,0x0F);/ 开显示,开光标,闪烁 WriteLCD(0,Cursorstep);/显示出当前光标的位置 EA=1;a=0;/当有按键按下时,开启定时器,计时开始。 beep(); while(KEY2=0); if(KEY1=0)/Left 光标左移 Delay1ms(50); if(KEY1=0) if(a!=0)/在没有光标时,第一次按下向左,向右按键时,光标不移动,只是显示出光标,并闪烁 if(step=0) step=9; ste

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 医学/心理学 > 基础医学

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号