【51单片机】【protues仿真】 基于51单片机波形发生器系统

目录

一、主要功能

二、使用步骤

三、硬件资源

四、软件设计

五、实验现象

一、主要功能

1、LCD1602液晶显示波形、频率

2、按键切换波形、频率、占空比​

3、正弦波、方波、三角波、锯齿波

二、使用步骤

本项目使用Proteus8仿真以51系列单片机为核心控制器结合数模转换(DAC)电路、运放芯片和按键输入模块和显示单元,在Proteus等仿真环境中实现多种波形的生成与频率、占空比参数调节功能。

三、硬件资源

1、51单片机核心模块

2、按键模块

3、运算放大芯片

4、DAC数模转换芯片

5、LCD1602显示模块

四、软件设计

#include <reg51.h>

#include<string.h>

#define uchar unsigned char

#define uint unsigned int

sbit RS=P3^0;

sbit RW=P3^1;

sbit EN=P3^3;

sbit K1=P2^0;

sbit K2=P2^1;

sbit K3=P2^2;

sbit K4=P2^3;

sbit K5=P2^4;

uchar WaveChoice=1;

uchar ys=30;

uchar i,a=0;

uchar sqar_num=128;

uint freq;

uchar code Sin\[\]={"Sine "};

uchar code Squ\[\]={"Square "} ;

uchar code Tri\[\]={"Triangle "};

uchar code Saw\[\]={"Sawtooth "} ;

uchar code No\[\]={"No Signal out "};

uchar code Wave\[\]={"Wave :"};

uchar code Fre\[\]={"Freq :"};

void DelayMS(uchar ms)

{

uchar i;

while(ms--) for(i=0;i<120;i++);

}

void Delay1(uint y)

{

uint i;

for(i=y;i>0;i--);

}

uchar Busy_Check()

{

uchar LCD_Status;

RS=0; // 寄存器选择

RW=1; //读状态寄存器

EN=1; // 开始读

DelayMS(1);

LCD_Status=P1;

EN=0;

return LCD_Status;

}

void Write_LCD_Command(uchar cmd)

{

while((Busy_Check()&0x80)==0x80); //忙等待

RS=0; //选择命令寄存器

RW=0; //写

EN=0;

P1=cmd;EN=1;DelayMS(1);EN=0;

}

void Write_LCD_Data(uchar dat)

{

while((Busy_Check()&0x80)==0x80); //忙等待

RS=1; RW=0; EN=0; P1=dat;EN=1;DelayMS(1);EN=0;

}

void Init_LCD()

{

Write_LCD_Command(0x38);

DelayMS(1);

Write_LCD_Command(0x01);

DelayMS(1);

Write_LCD_Command(0x06);

DelayMS(1);

Write_LCD_Command(0x0C);

DelayMS(1);

}

void Write_freq(uint k)

{

uchar qian,bai,shi,ge;

qian=k/1000;

bai=k/100%10;

shi=k/10%10;

ge=k%10;

Write_LCD_Command(0x86+0x40);

Write_LCD_Data(0x30+qian);

Write_LCD_Data(0x30+bai);

Write_LCD_Data(0x30+shi);

Write_LCD_Data(0x30+ge);

Write_LCD_Data(0x48);

Write_LCD_Data(0x5a);

}

void main()

{

Init_LCD();

IE=0X81;

IT0=1;

Write_LCD_Command(0x80);

DelayMS(5);

while (1)

{

keyscanf();

Out_Wave(WaveChoice);

if(!(K1&K2&K3))

Xianshi_f();

}

}

void EX_INT0() interrupt 0

{

WaveChoice++;

if(WaveChoice==5) WaveChoice=1;

Write_wave(WaveChoice);

}

五、实验现象

演示视频:基于51单片机波形发生器仿真https://www.bilibili.com/video/BV1esYyzSE4X/?share_source=copy_web&vd_source=40fca7082622de442c326ebbcf72b8c6

相关推荐
会周易的程序员5 小时前
5 节点边缘冗余方案(上):基于 aiRaft 的物联网高可用控制面设计
c++·分布式·物联网·raft·iot·共识
朝发如雪5 小时前
快速掌握单片机基础(3)(PWM)(通信协议基础)(串口通信时序与参数)(电气特性与电平标准)(51单片机UART寄存器配置)(串口应用层协议)
单片机
AISenz5 小时前
AIMesh 2.5 vs SmartMesh IP:6TiSCH 工业无线协议对比与选型指南
物联网·工业物联网·物联网协议
天空'之城7 小时前
单片机基础核心知识点汇总(四十)
单片机·嵌入式硬件
当下新鲜事7 小时前
空调机房冷冻泵与冷却泵技术分析:赛莱默B&G背包式智能变频管道泵的工程应用
运维·物联网·业界资讯
smartpi_ai7 小时前
离线语音模块误识别问题全面解决方案:命令词设计、防误触与灵敏度调优指南
人工智能·单片机·语音识别
free-elcmacom7 小时前
C语言字符指针与字符串字面量——从一道“剑指 Offer”笔试题说起
c语言·visual studio
LCG元7 小时前
STM32F103 驱动 HX711 称重实战:DOUT 就绪时序、增益切换陷阱与两点标定精度实测
stm32·单片机·嵌入式硬件
小李不想当小白10 小时前
DMA直接存储器存取(STM32标准库学习笔记)
笔记·stm32·单片机·嵌入式硬件·学习·分享
朝发如雪10 小时前
快速掌握单片机基础(6)(数据处理与传送指令)(跳转与分支指令)(栈操作与混合编程)(程序状态寄存器操作指令)(内存映射)
单片机·arm