仿真版本:Proteus8.6及以上版本
程序编译:Keil5 C51
编程语言:C语言
设计编号:【W03】
1. 简介
本文提出了一种基于51单片机的简易函数波形发生器设计。以AT89C51单片机作为系统的控制核心,其中P3口接DAC0832作为信号输入同时进行数模转换,P1口用来接键盘,P0口接LCD1602显示器,由程序来控制P3口产生的波形,再由按键和按键次数控制波形的种类、频率大小,并且能够通过按键来控制波形频率值。由运算放大器DAC0832来实现输出电流到电压的转换,即实现数字信号到模拟信号的转换。另外在LCD1602上显示实时的频率值,产生的波形在示波器显示。
2. 主要功能
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】百度网盘下载链接
更多单片机仿真设计合集:单片机仿真设计合集
1521