51单片机可调幅度频率波形信号发生器( proteus仿真+程序+原理图+报告+讲解视频) 您所在的位置:网站首页 高频电炉原理视频讲解 51单片机可调幅度频率波形信号发生器( proteus仿真+程序+原理图+报告+讲解视频)

51单片机可调幅度频率波形信号发生器( proteus仿真+程序+原理图+报告+讲解视频)

2024-07-04 04:18| 来源: 网络整理| 查看: 265

51单片机可调幅度频率信号发生器( proteus仿真+程序+原理图+报告+讲解视频) 讲解视频1.主要功能:2.仿真3. 程序代码4. 原理图4. 设计报告5. 设计资料内容清单&&下载链接资料下载链接 51单片机可调幅度频率信号发生器( proteus仿真+程序+原理图+报告+讲解视频)

仿真图proteus7.8及以上

程序编译器:keil 4/keil 5

编程语言:C语言

设计编号:S0055

讲解视频

基于51单片机的可调幅度频率波形信号发生器

1.主要功能:

基于51单片机的三角波信号发生器

1、幅值在0-5V可以通过按键调整,频率在0-50Hz,可以通过按键调整

2、通过LCD1602显示幅值和频率

3、使用示波器查看波形

需注意仿真中51单片机芯片是兼容的,AT89C51,AT89C52是51单片机的具体型号,内核是一样的。相同的原理图里,无论stc还是at都一样,引脚功能都是一样的,程序是兼容的,芯片可以替换为STC89C52/STC89C51/AT89C52/AT89C51等51单片机芯片。 以下为本设计资料展示图:

2.仿真

开始仿真

打开仿真工程,双击proteus中的单片机,选择hex文件路径,然后开始仿真。

经以上调试,确认程序没有问题时,加载到Proteus软件中进行仿真,所得仿真结果如下。

刚开始运行程序,没有按键操作时,仿真结果如图25所示。

img

图25 仿真初始化结果

(2)通过按键调整振幅频率选择时,四个按键操作的仿真结果如下。

img

图26 频率调低到1HZ

img

图27 频率加到50HZ,振幅不变

img

图27 振幅减到2.5V,频率不变

以上仿真结果均符合设计要求。

3. 程序代码

使用keil4或者keil5编译,代码有注释,可以结合报告理解代码含义。

main函数

#include #include"absacc.h" #include"intrins.h" #include "lcd1602.h" #define uchar unsigned char #define uint unsigned int #define out XBYTE[0xfeff] /* XBYTE 的作用,可以用来定义绝对地址,是P0口和P2口的,其中P2口对应的是高位,P0口对应的是地位 如 XBYTE[0x1234] = 0x56; 则等价于 mov dptr,#1234h mov @dptr,#56h P0口和P2口共同作用,可以作为外部存储器的地址线 P2接地址总线的高8位(A15~A8),P0接地址总线的低8位(A7~A0)同时接数据总线,对片外地址由P2P0构成 ,当dac0832的cs'接p2^7时低电平有效,所 以P2最大为01111111=0x7f(最大为P2^6~P2^0=1),P0最大为11111111=0xff, 所以为XBYTE[0x7fff],若cs'接p2^6则为XBYTE[0xbfff],若cs'接p2^6则为XBYTE[0xbfff]。 */ sbit k1=P3^0;//按钮 sbit k2=P3^1; sbit k3=P3^2; sbit k4=P3^7; uint freq=25,set=0; //频率 uchar amp=255;//振幅 uchar time=0,sec=0;//计时 uchar hang1[]="fre:025Hz"; uchar hang2[]="Amp:5.0V ";//振幅 void main() { uint i; //设置定时器 TMOD|=0X02;//选择为定时器0模式,工作方式2,8位自动重装载,仅用TR0打开启动。 TH0=156;//给定时器赋初值 TL0=156; ET0=1;//打开定时器0中断允许 TR0=0;//打开定时器 EA=1;//打开总中断 init_1602();//初始化LCD write_string(1,0,hang1); write_string(2,0,hang2); while(1) { if(!k1)//频率加 { if(freq0) set--; hang1[4]=freq/100+0x30; hang1[5]=freq%100/10+0x30; hang1[6]=freq%10+0x30; write_string(1,0,hang1); while(!k1); } if(!k2)//频率减 { if(freq>1) freq--; set=50/freq;//50HZ-1HZ if(set>0) set--; hang1[4]=freq/100+0x30; hang1[5]=freq%100/10+0x30; hang1[6]=freq%10+0x30; write_string(1,0,hang1); while(!k2); } if(!k3)//振幅加 { amp+=3; i=amp*10/51; hang2[4]=i/10+0x30; hang2[6]=i%10+0x30; write_string(2,0,hang2); while(!k3); } if(!k4)//振幅减 { amp-=3; i=amp*10/51; hang2[4]=i/10+0x30; hang2[6]=i%10+0x30; write_string(2,0,hang2); while(!k4); } } } void Timer0() interrupt 1//定时器中断 { uint i; /* if(time i=(99-time)*amp/50; out=i; } if(sec


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有