基于单片机与12864显示屏的多种函数波形信号发生器设计

1. 基于单片机与12864显示屏的多种函数波形信号发生器设计

点击链接下载protues仿真设计资料:https://download.csdn.net/download/m0_51061483/91926332

1.1 系统功能概述

随着电子测量技术、通信技术以及自动控制技术的快速发展,函数信号发生器已经成为电子实验、产品调试、工业控制以及科研开发过程中不可缺少的重要仪器。传统函数信号发生器通常采用专用模拟电路实现,存在结构复杂、参数调整困难、扩展能力差等问题。为提高系统灵活性与智能化程度,本设计采用单片机作为核心控制器,通过查表法结合DA数模转换技术实现多种标准函数波形输出,并采用12864液晶显示屏进行参数显示与人机交互。

本系统主要实现以下功能:

(1)支持方波、三角波、锯齿波和正弦波四种波形输出;

(2)用户可通过按键选择输出波形类型;

(3)用户可通过按键调节波形输出频率;

(4)采用查表方式生成波形数据,提高输出波形精度;

(5)通过DA转换器输出连续模拟波形信号;

(6)采用LCD12864液晶实时显示当前波形类型及频率参数;

(7)系统具有结构简单、运行稳定、成本低、扩展方便等优点。

整个系统能够满足电子实验教学、嵌入式开发调试以及信号分析等应用需求。


2. 系统总体设计方案

2.1 系统组成结构

系统主要由以下几个部分组成:

  1. 单片机主控制模块;
  2. LCD12864液晶显示模块;
  3. 独立按键输入模块;
  4. DA数模转换模块;
  5. 波形数据存储模块;
  6. 信号输出模块;
  7. 电源管理模块。

系统工作时,用户首先通过按键选择波形种类和输出频率。单片机根据用户设置调用相应波形数据表,并按照设定频率不断向DA转换器发送数据。DA转换器将数字量转换为模拟电压信号输出,最终形成所需函数波形。同时LCD12864实时显示当前工作状态。


3. 系统电路设计

3.1 单片机最小系统设计

单片机是整个系统的控制核心,负责波形数据输出、按键扫描、频率计算以及液晶显示控制等任务。

最小系统主要包括:

3.1.1 时钟振荡电路

系统采用11.0592MHz晶振作为单片机时钟源。

晶振电路为CPU提供稳定时钟信号,保证波形输出频率的准确性。由于函数信号发生器对时间精度要求较高,因此时钟稳定性直接影响输出波形质量。

3.1.2 复位电路

复位电路由电阻、电容和按键组成。

系统上电后自动复位,使程序从起始地址开始执行;当系统出现异常时,用户也可通过手动按键完成系统复位。

3.1.3 电源电路

系统采用5V稳压供电。

电源模块负责为单片机、DA转换器以及液晶显示模块提供稳定工作电压。

为了降低噪声影响,在电源输入端加入滤波电容和去耦电容,提高系统稳定性。


3.2 按键控制模块设计

按键模块用于实现用户参数设置。

系统设置多个独立按键:

3.2.1 波形选择按键

用于切换波形种类:

  • 方波
  • 三角波
  • 锯齿波
  • 正弦波

用户每按一次按键,系统自动切换到下一种波形。

3.2.2 频率增加按键

用于提高输出频率。

每次按下后频率按照预设步进值增加。

3.2.3 频率减小按键

用于降低输出频率。

用户可根据实验需求进行精确调节。

3.2.4 功能确认按键

用于确认当前设置参数。

按键采用软件消抖方式处理,提高识别准确率。


3.3 LCD12864液晶显示模块设计

LCD12864是一种图形点阵液晶显示器,具有显示信息丰富、界面友好等优点。

3.3.1 显示内容

系统主要显示:

  • 当前波形类型
  • 输出频率
  • 系统运行状态
  • 参数调整界面

例如:

text 复制代码
Wave:SINE

Freq:1000Hz

Output:ON

3.3.2 显示特点

相比LCD1602:

  • 显示内容更多
  • 显示界面更美观
  • 可扩展波形图形显示
  • 用户操作更加直观

LCD12864通过并行接口与单片机连接,实现数据和命令传输。


3.4 DA数模转换模块设计

DA转换器是系统产生模拟波形的重要部分。

单片机输出的是数字信号,而示波器和测试设备需要连续模拟电压信号,因此需要利用DA芯片完成转换。

3.4.1 工作原理

单片机按照一定时间间隔向DA芯片发送数字数据。

DA芯片根据输入数据输出对应模拟电压:

text 复制代码
数字量 → DA转换 → 模拟电压

通过连续输出多个数据点形成完整波形。

3.4.2 输出精度

采用8位DA转换器时:

text 复制代码
分辨率 = 256级

采用12位DA转换器时:

text 复制代码
分辨率 = 4096级

分辨率越高,输出波形越平滑。


3.5 波形输出模块设计

波形输出模块主要负责将DA输出信号送至外部设备。

为了提高波形质量,输出端增加:

  • RC低通滤波器
  • 运算放大器缓冲电路

其作用包括:

  • 消除阶梯波失真
  • 提高驱动能力
  • 提高波形平滑度

最终输出标准模拟波形。


3.6 电源管理模块设计

电源模块负责系统供电。

主要包括:

  • 稳压芯片
  • 滤波电容
  • 去耦电容
  • 电源指示电路

良好的电源设计能够有效降低噪声对波形输出质量的影响。


4. 系统程序设计

4.1 软件总体设计

系统软件采用模块化结构设计。

程序主要包括:

  1. 系统初始化模块;
  2. 按键扫描模块;
  3. 波形生成模块;
  4. DA输出模块;
  5. LCD显示模块;
  6. 定时器控制模块。

程序运行流程如下:

text 复制代码
系统初始化
      ↓
按键扫描
      ↓
参数设置
      ↓
选择波形
      ↓
查表输出
      ↓
DA转换
      ↓
LCD显示
      ↓
循环运行

4.2 主程序设计

主程序负责整个系统调度。

c 复制代码
void main()
{
    System_Init();

    while(1)
    {
        Key_Scan();

        Wave_Output();

        LCD_Display();
    }
}

程序运行后持续检测用户输入并更新输出波形。


4.3 波形数据表设计

系统采用查表法产生波形。

4.3.1 正弦波数据表

c 复制代码
unsigned char Sin_Table[32]={
128,153,177,199,218,234,245,252,
255,252,245,234,218,199,177,153,
128,103,79,57,38,22,11,4,
1,4,11,22,38,57,79,103
};

查表法优点:

  • 运算速度快
  • CPU负担小
  • 波形精度高

适用于实时波形输出系统。


4.3.2 三角波数据表

c 复制代码
unsigned char Tri_Table[16]={
0,32,64,96,
128,160,192,224,
255,224,192,160,
128,96,64,32
};

通过线性递增和递减形成三角波。


4.3.3 锯齿波数据表

c 复制代码
unsigned char Saw_Table[16]={
0,16,32,48,
64,80,96,112,
128,144,160,176,
192,208,224,240
};

数据逐渐增加形成锯齿波。


4.3.4 方波数据表

c 复制代码
unsigned char Square_Table[16]={
255,255,255,255,
255,255,255,255,
0,0,0,0,
0,0,0,0
};

输出高低电平实现方波。


4.4 波形输出程序设计

系统根据当前波形类型选择对应数据表。

c 复制代码
void Wave_Output()
{
    DA_Write(Wave_Table[index]);

    index++;

    if(index >= Table_Size)
    {
        index = 0;
    }
}

不断循环输出数据即可形成周期波形。


4.5 频率控制程序设计

频率控制通过定时器实现。

频率计算公式:

text 复制代码
输出频率 = 定时器中断频率 ÷ 波形采样点数

例如:

text 复制代码
中断频率 = 32000Hz

采样点数 = 32

输出频率 = 1000Hz

程序如下:

c 复制代码
void Timer0_ISR() interrupt 1
{
    TH0 = Timer_H;
    TL0 = Timer_L;

    Wave_Output();
}

通过改变定时器重装值即可调整输出频率。


4.6 按键扫描程序设计

按键扫描实现波形和频率设置。

c 复制代码
void Key_Scan()
{
    if(KEY_WAVE == 0)
    {
        DelayMs(10);

        if(KEY_WAVE == 0)
        {
            Wave_Mode++;

            if(Wave_Mode > 3)
            {
                Wave_Mode = 0;
            }
        }
    }

    if(KEY_ADD == 0)
    {
        Frequency += 100;
    }

    if(KEY_SUB == 0)
    {
        Frequency -= 100;
    }
}

采用软件消抖提高系统可靠性。


4.7 LCD显示程序设计

实时更新当前参数。

c 复制代码
void LCD_Display()
{
    LCD_ShowString(0,0,"Wave:");

    LCD_ShowString(0,6,WaveName);

    LCD_ShowString(2,0,"Freq:");

    LCD_ShowNum(2,6,Frequency);

    LCD_ShowString(2,12,"Hz");
}

显示内容与用户设置保持同步。


5. 系统运行过程分析

系统上电后首先完成硬件初始化,并在LCD12864显示默认波形及默认频率。

用户通过波形选择按键切换不同波形类型,单片机自动切换对应查找表。频率调整按键用于改变定时器中断周期,从而改变波形输出频率。系统实时将参数显示在LCD12864液晶屏上,同时将波形数据通过DA转换器输出到外部接口。

当用户选择正弦波时,系统读取正弦波数据表并依次输出;选择三角波时则调用三角波数据表;选择锯齿波和方波时同理。整个过程完全由单片机控制,实现数字化波形产生。系统具有输出稳定、频率可调、波形丰富、操作简单等特点,能够满足电子实验与信号测试的实际需求。

6. 系统总结

本设计采用单片机作为控制核心,通过查表法结合DA数模转换技术实现方波、三角波、锯齿波和正弦波四种标准函数波形输出。系统利用LCD12864液晶显示模块实现波形类型与频率参数的实时显示,并通过按键实现人机交互控制。整个系统具有结构简单、成本低、运行稳定、扩展方便以及输出波形精度较高等特点,可广泛应用于电子实验教学、仪器仪表开发、嵌入式系统调试以及自动控制领域,具有良好的工程应用价值和推广意义。

相关推荐
瓢儿菜20181 小时前
51 单片机-LED 点灯程序
单片机·嵌入式硬件
linbaiwan6661 小时前
输入反接保护OVP保护芯片:集成反接、过压、过流、过温四重保护
嵌入式硬件
wangduqiang7471 小时前
stm32写sd卡
stm32·单片机·嵌入式硬件
wangduqiang7471 小时前
stm32休眠和唤醒,和内部flash
stm32·单片机·嵌入式硬件
羊羊小栈2 小时前
停车场管理系统(基于前后端Web开发)
前端·人工智能·毕业设计·大作业
点灯小铭2 小时前
基于51单片机的LED点阵汉字显示系统设计
数据库·单片机·嵌入式硬件·毕业设计·51单片机·课程设计·期末大作业
橡木树的叶子2 小时前
STM32单片机+RGB三色灯模块+七色灯颜色数据发送到串口调试助手+源代码(使用cubuemx+vscode实现操作)
stm32·单片机·计算机外设
踏着七彩祥云的小丑2 小时前
嵌入式测试学习第 30 天:功耗测试、待机电流、工作电流测试
单片机·嵌入式硬件·学习
潜创微科技2 小时前
2026年专业创作KVM方案服务商选型指南:技术、场景与服务的全维度评估
嵌入式硬件·音视频