【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

相关推荐
老梁agent1 天前
MCP 协议实战:用标准化方式让 Agent 调用工业工具
物联网·agent·mcp
老梁agent4 天前
一个 Agent 不够用?工业场景下的多 Agent 路由模式实战
物联网·agent
老梁agent5 天前
从 0 到 22 篇:工业 Agent 的六大设计原则
物联网·agent
老梁agent7 天前
Agent 如何看懂时序数据?时间序列查询的 Tool 设计模式
物联网·agent
FreakStudio8 天前
W55MH32L-EVB 上手测评:硬件 TCP/IP 加持的以太网单片机,MicroPython 零门槛开发
python·单片机·嵌入式·大学生·面向对象·并行计算·电子diy·电子计算机
LDR00613 天前
Type-C 快充全面升级!LDR6601 赋能个人护理便携电机,重塑剃须刀 / 理发器新体验
c语言·开发语言
✎ ﹏梦醒͜ღ҉繁华落℘13 天前
单片机基础知识---stm32单片机的优先级
stm32·单片机·mongodb
Luminous.13 天前
C语言--day30
c语言·开发语言
Inhand陈工13 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
大鱼>13 天前
大语言模型+物联网:LLM理解物理世界
物联网·struts·语言模型·多模态·aiot