• 方案介绍
  • 附件下载
  • 相关推荐
申请入驻 产业图谱

基于51单片机的简易函数波形发生器(一)!!!

04/27 09:39
1521
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

单片机仿真设计合集资料获取.pdf

共1个文件

资料清单:C程序+仿真+设计报告+使用说明+元件清单+操作视频

仿真版本:Proteus8.6及以上版本

程序编译:Keil5 C51

编程语言:C语言

设计编号:【W03】

1.  简介

  本文提出了一种基于51单片机的简易函数波形发生器设计。以AT89C51单片机作为系统的控制核心,其中P3口接DAC0832作为信号输入同时进行数模转换,P1口用来接键盘,P0口接LCD1602显示器,由程序来控制P3口产生的波形,再由按键和按键次数控制波形的种类、频率大小,并且能够通过按键来控制波形频率值。由运算放大器DAC0832来实现输出电流到电压的转换,即实现数字信号模拟信号的转换。另外在LCD1602上显示实时的频率值,产生的波形在示波器显示。

2.  主要功能

a.支持按键设置产生方波正弦波锯齿波三角波

b.支持按键控制频率的加减,频率范围1Hz到100Hz

c.支持LCD1602显示当前输出波形的频率。

d.支持示波器显示当前输出波形的形状、幅度。

3.  源程序(Keil5)

本设计采用keil5 C51软件(内附安装包)实现程序设计。如需用keil4打开程序,可自行通过.c和.h文件新建工程即可。

#include "reg51.h" 
#include <data.h>
#include <LCD1602.h>
#define uchar unsigned char   
#define uint unsigned int   
#define key P1   
#define dataout P3   
uchar fre[5] ="001Hz";							//初始显示
uint data THHL=65536-3906;
uchar data keyword,n=0;   
uchar data Signal_chose = 0; 
uchar data div = 1; 

void keyscan()   								//键盘扫描函数
{    
 keyword=key&0x3f;   
 if(keyword!=0x3f)   
 {   
  while((key&0x3f)!=0x3f);	//等待按键松开   
  switch(keyword)   
  {   
		case 62: {
							if(div>=100) THHL=65536-39; else {div++;THHL=65536-3906/div;}//频率up
							fre[0]=div/100 + '0';fre[1]=div/10%10 + '0';fre[2]=div%10 + '0';
							TR1=0;LCD_send(2,11,fre,5);TR1=1; break;
							}   
		case 61: {
							if(div<=1) THHL=65536-3906; else {div--;THHL=65536-3906/div;}//频率down
							fre[0]=div/100 + '0';fre[1]=div/10%10 + '0';fre[2]=div%10 + '0';
							TR1=0;LCD_send(2,11,fre,5);TR1=1; break;
							}   			
		

		case 59: {Signal_chose=0;TR1=0;LCD_send(1,5,"Sin       ",10);TR1=1; break;}  	//正弦波
		case 55:	{Signal_chose=1;TR1=0;LCD_send(1,5,"Triangular",10);TR1=1; break;}		//三角波	
		case 47:	{Signal_chose=2;TR1=0;LCD_send(1,5,"Square    ",10);TR1=1; break;}		//方波
		case 31: {Signal_chose=3;TR1=0;LCD_send(1,5,"Sawtooth  ",10);TR1=1; break;}		//锯齿波
		default:{break;}   
   }   
 }   
}   
   
void init()	//初始化 
{   
 key=0x3f;P2=0x00;dataout=0x00;THHL=65536-3906;  ///初始频率为1Hz
 TH1=THHL/256;TL1=THHL%256;   
 TMOD=0x11;ET1=1;TR1=1;EA=1;   
}   
   
void main()   
{   
	LCD_init();
	LCD_send(1,0,"Type:Sin",8);
	LCD_send(2,0,"frequency:",10);
	LCD_send(2,11,fre,5);
	init();
	while(1)   
	{   
		keyscan(); 
		switch(Signal_chose)   
			{   
				case 0: {dataout=sin_tab[n]; break;}  //正弦波
				case 1: {dataout=thr_tab[n]; break;}  //三角波
				case 2: {dataout=squ_tab[n]; break;}  //方波
				case 3: {dataout=255-n;break;}				//锯齿波
				default:{break;}   
			 }   		
	}   
}   
 

4.  仿真proteus8.6

  本设计采用proteus8.6软件(内附安装包)实现仿真设计,如下图所示。proteus软件一般存在高低版本兼容问题,该仿真是通过proteus8.6导出的,所以请尽量使用proteus8.6打开文件,低于proteus8.6的版本不能够正常使用,高于proteus8.6的版本除了proteus8.8/8.9理论上可以正常使用。

矩形波

锯齿波:

三角波:

正弦波:

5.  设计报告

设计报告主要包括硬件电路、软件设计、仿真调试等等,仅供参考

6.  资料清单

设计资料主要包括C程序+仿真+设计报告+使用说明+元件清单+操作视频等。

7.  资料获取链接

百度网盘下载链接:【W03】百度网盘下载链接

更多单片机仿真设计合集:单片机仿真设计合集

  • 单片机仿真设计合集资料获取.pdf
    下载

相关推荐