【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

相关推荐
布莱克6051 小时前
数组详解:定义、作用、应用场景及与链表的区别(C/C++ 代码讲解)
c语言·开发语言·c++·数组
hongmai6668881 小时前
MP2348GTL-Z:这颗24V/4A同步降压芯片,把性能和体积平衡得恰到好处
c语言·开发语言·arm开发·单片机·5g
多弗朗皮卡丘2 小时前
C语言梦开始的地方19:文件操作
c语言·开发语言
笨笨饿2 小时前
#135_代码中的类型重定义艺术:从基础封装到函数类型设计
开发语言·stm32·单片机·嵌入式硬件·mcu·物联网·嵌入式实时数据库
西城微科方案开发2 小时前
高精度低功耗胎压计方案——气压表解决方案
单片机·嵌入式硬件
万法若空2 小时前
C/C++ 类型别名定义方式对比
java·c语言·c++
VALENIAN瓦伦尼安教学设备4 小时前
设备状态检测振动分析实训台案例分析
大数据·数据库·人工智能·嵌入式硬件·算法
米饭不加菜4 小时前
一些常用模块简介
经验分享·笔记·嵌入式硬件
令狐少侠20114 小时前
物联网mqtt
物联网
佳児素花痴╮5 小时前
STM32U575RIT6(USART)学习
stm32·嵌入式硬件·学习