单片机教案 2.2 ATmega2560单片机闪烁灯的制作和编程

news2024/10/12 7:43:16

2.1 

单片机教案 2.1 ATmega2560单片机最小应用系统-CSDN博客


2.2 ATmega2560单片机闪烁灯的制作和arduino编程

ATmega2560单片机闪烁灯的制作和Arduino编程是一个经典的嵌入式系统设计案例。以下将分别介绍使用ATmega2560单片机直接编程和使用Arduino平台(基于ATmega2560)编程来实现LED闪烁的方法。

一、ATmega2560单片机直接编程实现LED闪烁

材料准备
  • ATmega2560单片机
  • LED灯
  • 电阻(通常220Ω或330Ω)
  • 面包板或PCB板
  • 连接线
电路连接
  1. 将LED的长脚(正极)通过电阻连接到ATmega2560的某个I/O口(例如PB0)。
  2. 将LED的短脚(负极)连接到ATmega2560的GND。
编程实现

使用AVR-GCC或类似工具链编写C代码,并烧录到ATmega2560中。以下是一个简单的示例代码:

#define F_CPU 16000000UL  
#include <avr/io.h>  
#include <util/delay.h>  
  
int main(void) {  
    // 配置PB0为输出引脚  
    DDRB |= (1 << PB0);  
  
    // 在一个无限循环中,PB0的电平每1秒翻转一次  
    while (1) {  
        PORTB |= (1 << PB0);  // 将PB0设为高电平,LED亮  
        _delay_ms(1000);      // 延时1秒  
        PORTB &= ~(1 << PB0); // 将PB0设为低电平,LED灭  
        _delay_ms(1000);      // 延时1秒  
    }  
  
    return 0;  
}

c复制代码

#define F_CPU 16000000UL
#include <avr/io.h>
#include <util/delay.h>
int main(void) {
// 配置PB0为输出引脚
DDRB |= (1 << PB0);
// 在一个无限循环中,PB0的电平每1秒翻转一次
while (1) {
PORTB |= (1 << PB0); // 将PB0设为高电平,LED亮
_delay_ms(1000); // 延时1秒
PORTB &= ~(1 << PB0); // 将PB0设为低电平,LED灭
_delay_ms(1000); // 延时1秒
}
return 0;
}

编译并烧录代码到ATmega2560后,LED应该会以1秒的间隔闪烁。

二、使用Arduino平台(基于ATmega2560)编程实现LED闪烁

Arduino平台提供了更简单、更直观的编程环境,非常适合初学者。

材料准备
  • Arduino Mega 2560开发板(基于ATmega2560)
  • LED灯
  • 电阻(通常220Ω或330Ω)
  • 面包板或PCB板
  • 连接线
电路连接
  1. 将LED的长脚(正极)通过电阻连接到Arduino Mega 2560的数字引脚(例如D13,该引脚通常带有板载LED)。
  2. 将LED的短脚(负极)连接到Arduino的GND。
编程实现

使用Arduino IDE编写代码,并上传到Arduino Mega 2560中。以下是一个简单的示例代码:

void setup() {  
    // 设置D13引脚为输出模式  
    pinMode(13, OUTPUT);  
}  
  
void loop() {  
    // 将D13引脚设为高电平,LED亮  
    digitalWrite(13, HIGH);  
    delay(1000); // 延时1秒  
    // 将D13引脚设为低电平,LED灭  
    digitalWrite(13, LOW);  
    delay(1000); // 延时1秒  
}

cpp复制代码

void setup() {
// 设置D13引脚为输出模式
pinMode(13, OUTPUT);
}
void loop() {
// 将D13引脚设为高电平,LED亮
digitalWrite(13, HIGH);
delay(1000); // 延时1秒
// 将D13引脚设为低电平,LED灭
digitalWrite(13, LOW);
delay(1000); // 延时1秒
}

将代码上传到Arduino Mega 2560后,板载LED或外接LED应该会以1秒的间隔闪烁。

注意事项

  1. 在连接电路时,确保电源稳定且极性正确。
  2. 在编写代码时,注意选择合适的引脚和延时时间。
  3. 在烧录或上传代码前,确保开发板与计算机正确连接,并选择正确的开发板和端口。

通过以上步骤,你可以使用ATmega2560单片机或Arduino平台(基于ATmega2560)轻松实现LED闪烁的效果。这不仅是学习嵌入式系统和Arduino编程的基础,也是进一步探索更复杂项目的起点。

2.2.1 闪烁灯的制作

闪烁灯的制作是一个简单而有趣的电子项目,它可以帮助我们理解基本的电子电路和编程概念。以下是一个基于ATmega2560单片机(或Arduino Mega 2560开发板)的闪烁灯制作的详细步骤:

一、材料准备

  1. ATmega2560单片机(或Arduino Mega 2560开发板)
  2. LED灯:至少一个,数量可根据需要增加。
  3. 电阻:通常使用220Ω或330Ω的电阻来限制LED的电流,保护LED不被烧毁。
  4. 面包板PCB板:用于搭建电路。
  5. 连接线:用于连接各个元件。
  6. 电源:为单片机和LED提供稳定的+5V电源。

二、电路连接

  1. 连接LED

    • 将LED的长脚(正极)通过电阻连接到ATmega2560的某个I/O口(例如PB0,如果使用Arduino Mega 2560,则可以选择数字引脚D13,因为该引脚通常带有板载LED)。
    • 将LED的短脚(负极)连接到ATmega2560的GND(接地)。
  2. 连接电源

    • 将电源的+5V端连接到ATmega2560的VCC引脚。
    • 将电源的GND端连接到ATmega2560的GND引脚。

三、编程实现

使用ATmega2560直接编程
  1. 编写代码:使用AVR-GCC或类似工具链编写C代码,控制LED的闪烁。
#define F_CPU 16000000UL  
#include <avr/io.h>  
#include <util/delay.h>  
  
int main(void) {  
    // 配置PB0为输出引脚(如果使用其他引脚,请相应修改)  
    DDRB |= (1 << PB0);  
  
    // 在一个无限循环中,PB0的电平每1秒翻转一次  
    while (1) {  
        PORTB |= (1 << PB0);  // 将PB0设为高电平,LED亮  
        _delay_ms(1000);      // 延时1秒  
        PORTB &= ~(1 << PB0); // 将PB0设为低电平,LED灭  
        _delay_ms(1000);      // 延时1秒  
    }  
  
    return 0;  
}

c复制代码

#define F_CPU 16000000UL
#include <avr/io.h>
#include <util/delay.h>
int main(void) {
// 配置PB0为输出引脚(如果使用其他引脚,请相应修改)
DDRB |= (1 << PB0);
// 在一个无限循环中,PB0的电平每1秒翻转一次
while (1) {
PORTB |= (1 << PB0); // 将PB0设为高电平,LED亮
_delay_ms(1000); // 延时1秒
PORTB &= ~(1 << PB0); // 将PB0设为低电平,LED灭
_delay_ms(1000); // 延时1秒
}
return 0;
}
  1. 编译并烧录代码:使用AVR-GCC编译代码,并使用适当的编程器将代码烧录到ATmega2560中。
使用Arduino平台编程
  1. 编写代码:使用Arduino IDE编写代码,控制LED的闪烁。
void setup() {  
    // 设置D13引脚为输出模式(如果使用其他引脚,请相应修改)  
    pinMode(13, OUTPUT);  
}  
  
void loop() {  
    // 将D13引脚设为高电平,LED亮  
    digitalWrite(13, HIGH);  
    delay(1000); // 延时1秒  
    // 将D13引脚设为低电平,LED灭  
    digitalWrite(13, LOW);  
    delay(1000); // 延时1秒  
}

cpp复制代码

void setup() {
// 设置D13引脚为输出模式(如果使用其他引脚,请相应修改)
pinMode(13, OUTPUT);
}
void loop() {
// 将D13引脚设为高电平,LED亮
digitalWrite(13, HIGH);
delay(1000); // 延时1秒
// 将D13引脚设为低电平,LED灭
digitalWrite(13, LOW);
delay(1000); // 延时1秒
}
  1. 上传代码:使用USB线将Arduino Mega 2560连接到计算机,选择正确的开发板和端口,然后将代码上传到Arduino Mega 2560中。

四、测试与调试

  1. 检查电路连接:确保所有元件都已正确连接,没有短路或断路。
  2. 观察LED闪烁:上电后,观察LED是否以预期的频率闪烁。如果LED不闪烁或闪烁频率不正确,请检查代码和电路连接是否正确。

通过以上步骤,你就可以成功制作一个基于ATmega2560单片机(或Arduino Mega 2560开发板)的闪烁灯了。这个项目不仅可以帮助你理解基本的电子电路和编程概念,还可以作为进一步探索更复杂项目的起点。


2.2.2 Arduino Mega 2560单片机编程的基本方法

Arduino Mega 2560单片机编程的基本方法主要涉及使用Arduino IDE进行代码编写、上传和调试。以下是一个详细的步骤指南:

一、准备工作

  1. 安装Arduino IDE
    • 从Arduino官方网站下载并安装Arduino IDE。这是进行Arduino编程的基础工具。
  2. 连接Arduino Mega 2560
    • 使用USB线将Arduino Mega 2560连接到计算机。
    • 在Arduino IDE中,选择正确的开发板(Arduino Mega 2560)和端口(通常是COMx,其中x是具体的数字)。

二、编写代码

  1. 打开Arduino IDE
    • 启动Arduino IDE,它将显示一个包含菜单栏、工具栏、代码编写区域和调试结果显示区的窗口。
  2. 编写程序
    • 在代码编写区域中,输入或粘贴你的Arduino程序。例如,一个简单的LED闪烁程序可能如下所示:
void setup() {  
  // 初始化数字引脚13为输出模式  
  pinMode(13, OUTPUT);  
}  
  
void loop() {  
  // 将数字引脚13设为高电平,点亮LED  
  digitalWrite(13, HIGH);  
  // 延时1秒  
  delay(1000);  
  // 将数字引脚13设为低电平,熄灭LED  
  digitalWrite(13, LOW);  
  // 延时1秒  
  delay(1000);  
}

cpp复制代码

void setup() {
// 初始化数字引脚13为输出模式
pinMode(13, OUTPUT);
}
void loop() {
// 将数字引脚13设为高电平,点亮LED
digitalWrite(13, HIGH);
// 延时1秒
delay(1000);
// 将数字引脚13设为低电平,熄灭LED
digitalWrite(13, LOW);
// 延时1秒
delay(1000);
}
  1. 保存程序
    • 在保存程序时,确保文件名和文件夹名一致,以避免运行时出现错误。

三、上传代码

  1. 编译代码
    • 在Arduino IDE中,点击“对勾”图标或选择“文件”>“验证/编译”来编译你的代码。如果代码没有错误,IDE底部的状态栏将显示“已编译”。
  2. 上传代码
    • 点击“箭头”图标或选择“文件”>“上传”来将代码上传到Arduino Mega 2560。上传过程中,IDE底部的状态栏将显示上传进度和结果。

四、调试与测试

  1. 观察结果
    • 上传代码后,观察Arduino Mega 2560上的LED是否按预期闪烁。如果LED不闪烁或闪烁频率不正确,请检查代码和电路连接是否正确。
  2. 调试代码
    • 如果出现问题,可以使用Arduino IDE的串口监视器来调试代码。在“工具”>“串口监视器”中打开串口监视器,并设置正确的波特率(通常是9600)。然后,你可以在代码中添加Serial.print()Serial.println()语句来输出调试信息。
  3. 修改代码
    • 根据调试结果,修改代码并重新上传进行测试。

五、注意事项

  1. 选择正确的引脚
    • 在编写代码时,确保选择了正确的引脚。Arduino Mega 2560有多个数字引脚和模拟引脚,每个引脚都有特定的功能。
  2. 注意电源和接地
    • 确保Arduino Mega 2560正确连接到电源,并且所有元件都已正确接地。
  3. 避免短路和断路
    • 在搭建电路时,注意避免短路和断路。使用适当的电阻来限制电流,保护LED和其他元件不被烧毁。
  4. 参考官方文档和教程
    • Arduino官方网站提供了丰富的文档和教程,可以帮助你更好地了解Arduino编程和硬件使用。

通过以上步骤,你可以掌握Arduino Mega 2560单片机编程的基本方法,并制作出各种有趣的电子项目。


2.2.3 arduino程序设计

Arduino程序设计是基于Arduino平台进行的,它允许用户通过简单的编程语言(类似于C++的一个子集)来编写代码,以控制Arduino开发板上的硬件。以下是关于Arduino程序设计的一些关键点:

一、Arduino程序结构

Arduino程序主要由两个部分组成:setup() 函数和 loop() 函数。

  1. setup() 函数
    • setup() 函数在Arduino板上电或重置后自动运行一次。
    • 它通常用于初始化变量、引脚模式(输入或输出)、启动库等。
  2. loop() 函数
    • loop() 函数在 setup() 函数执行完毕后开始运行,并且会不断重复执行。
    • 它是Arduino程序的主循环,用于放置连续运行的代码。

二、基本编程元素

  1. 变量和数据类型
    • Arduino支持多种数据类型,包括整数(int)、浮点数(float)、字符(char)和布尔值(boolean)等。
    • 变量用于存储数据,可以在 setup() 或 loop() 函数中声明和使用。
  2. 控制结构
    • Arduino支持条件语句(如 if 语句和 switch 语句)和循环语句(如 for 循环、while 循环和 do-while 循环)。
    • 这些控制结构允许程序根据条件执行不同的代码块或重复执行代码块。
  3. 函数
    • 用户可以定义自己的函数来封装特定的功能,使代码更加模块化和易于维护。
    • Arduino库函数也是基于这种思想设计的,它们提供了对硬件的抽象和控制。

三、常见库和函数

  1. 数字I/O
    • pinMode(pin, mode):设置引脚模式(输入或输出)。
    • digitalWrite(pin, value):向数字引脚写入高电平或低电平。
    • digitalRead(pin):读取数字引脚的状态(高电平或低电平)。
  2. 模拟I/O
    • analogRead(pin):读取模拟引脚上的电压值(0到1023之间的整数)。
    • analogWrite(pin, value):向PWM引脚写入模拟值(0到255之间的整数,具体取决于Arduino型号和引脚)。
  3. 串口通信
    • Serial.begin(baud):初始化串口通信并设置波特率。
    • Serial.print() 和 Serial.println():向串口发送数据。
    • Serial.read():从串口读取数据。

四、程序示例

以下是一个简单的Arduino程序示例,它演示了如何使用数字I/O来控制一个LED的闪烁:

// 定义LED引脚  
const int ledPin = 13;  
  
void setup() {  
  // 初始化LED引脚为输出模式  
  pinMode(ledPin, OUTPUT);  
}  
  
void loop() {  
  // 点亮LED  
  digitalWrite(ledPin, HIGH);  
  // 延时1秒  
  delay(1000);  
  // 熄灭LED  
  digitalWrite(ledPin, LOW);  
  // 延时1秒  
  delay(1000);  
}

cpp复制代码

// 定义LED引脚
const int ledPin = 13;
void setup() {
// 初始化LED引脚为输出模式
pinMode(ledPin, OUTPUT);
}
void loop() {
// 点亮LED
digitalWrite(ledPin, HIGH);
// 延时1秒
delay(1000);
// 熄灭LED
digitalWrite(ledPin, LOW);
// 延时1秒
delay(1000);
}

五、编程技巧

  1. 模块化设计
    • 将代码拆分成多个函数,每个函数实现一个特定的功能。
    • 这有助于代码的复用和调试。
  2. 注释
    • 在代码中添加注释来解释每个部分的功能和目的。
    • 这有助于他人理解你的代码,也有助于你自己在未来回顾和修改代码。
  3. 调试
    • 使用 Serial.print() 和 Serial.println() 函数来输出调试信息。
    • 使用LED或LCD等显示设备来指示程序的状态。
  4. 优化
    • 避免在 loop() 函数中使用长时间的 delay(),因为这会使Arduino无法响应其他中断或输入。
    • 考虑使用非阻塞代码(如使用定时器中断)来优化程序性能。

通过以上知识点和技巧,你可以开始编写自己的Arduino程序,并控制Arduino开发板上的各种硬件。随着经验的积累,你可以逐渐掌握更高级的功能和技巧,以创建更复杂和有趣的电子项目。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2207433.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[已解决]DockerTarBuilder永久解决镜像docker拉取异常问题

前阵子发现阿里云的docker加速镜像失效了&#xff08;甚至连nginx都拉取不了&#xff09;&#xff0c;重新换了并且加多了网络上比较常用的dokcer加速源&#xff0c;可以解决一部分问题&#xff0c;但仍然有一些镜像的某个版本或一些比较冷的镜像就是拉取不了&#xff0c;原因未…

分组相关 -- VPLS

VPLS&#xff08;Virtual Private LAN Service&#xff0c;虚拟专用局域网服务&#xff09;是IETF定义的以太网多点到多点业务模型&#xff0c;其通过MPLS-TP网络连接地域上相互隔离的多个LAN网络&#xff0c;为用户提供MP2MP和P2MP业务。 业务模型 VPLS是以MPLS技术实现传送…

Java创建型模式(二)——工厂模式(简单工厂模式、工厂方法模式、抽象工厂模式、工厂模式扩展等完整详解,附有代码——案例)

文章目录 五.工厂模式5.1 概述5.2简单工厂模式5.2.1 概述5.2.2 结构5.2.3 实现5.2.4 优缺点5.2.5 扩展—静态工厂 5.3 工厂方法模式5.3.1概述5.3.2 结构5.3.3 实现5.3.4 优缺点 5.4 抽象工厂模式5.4.1 概述5.4.2 结构5.4.3 实现5.4.4 优缺点5.4.5 使用场景 5.5 工厂模式扩展 五…

基于YOLO11/v10/v8/v5深度学习的安检X光危险品检测与识别系统设计与实现【python源码+Pyqt5界面+数据集+训练代码】

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

深度学习之常用数据集下载

在复现他人代码的过程中&#xff0c;有时需要下载数据集&#xff0c;才可跑通模型&#xff0c;但部分数据集在网上难以收集或是通过翻墙的手段才可获取。于是&#xff0c;在此总结了一些数据集的收集。 1、方法一&#xff1a;Kaggle官网下载 之前有推荐kaggle(Kaggle官网网址…

每日论文19-10GHz处相噪能达到-138dBc/Hz@1MHz串联谐振VCO

《Series-Resonance BiCMOS VCO with Phase Noise of -138dBc/Hz at 1MHz Offset from 10GHz and -190dBc/Hz FoM 》2022ISSCC 不用并联谐振了&#xff0c;用串联谐振&#xff0c;能在相噪性能上获得更极端地提升。 假设有源电路的噪声因子F相同&#xff0c;LC-tank的质量因子…

QD1-P17 HTML 下拉框标签(select、option)

本节学习 HTML 常用标签&#xff1a;select和option ‍ 本节视频 www.bilibili.com/video/BV1n64y1U7oj?p17 ‍ 知识点1&#xff1a;select标签用法 演示 ​​ HTML <select name"city"><option>北京</option><option>上海</opti…

【STM32CubeMX开发】-1-GPIO:点亮一个LED,以及按键KEY的捕获

案例背景&#xff1a; 我们将实现这样一个效果&#xff1a;按下按键KEY&#xff0c;点亮LED灯&#xff1b;松开按键KEY&#xff0c;熄灭LED灯。 KEY需配置为上拉输入&#xff1b;LED需配置为推挽输出。 目录 1 STM32CubeMX中配置 – GPIO 1.1 PIN引脚配置 1.2 GPIO配置 1…

三款GIS工具多角度对比:免费的倾斜摄影OSGB/3Dtiles编辑转换发布平台

GIS数据处理工具在现代技术与应用中扮演着至关重要的角色&#xff0c;它们不仅是连接原始地理信息与可分析、可视化数据的桥梁&#xff0c;更是推动地理信息系统&#xff08;GIS&#xff09;在各个行业领域深入发展与应用不可或缺的关键工具。选择一款合适的工具直接关系到数据…

电汽车充电革命:充电桩的过去现在与未来

电动汽车充电革命&#xff1a;中国充电桩行业的过去、现在与未来 一、发展历程概述 中国充电桩行业的发展历程可划分为以下几个阶段&#xff1a; 1. 初始期&#xff08;2006-2008年&#xff09;&#xff1a;在此阶段&#xff0c;国家队主导市场&#xff0c;主要参与者包括国…

《智慧博物馆:科技与文化的完美融合》

《智慧博物馆&#xff1a;科技与文化的完美融合》 一、智慧博物馆的兴起与发展 随着科技的飞速发展&#xff0c;智慧博物馆应运而生。进入新时代&#xff0c;大数据、人工智能、信息化的进步以及智能产品的应用&#xff0c;改变了人们接收信息和学习的习惯。为顺应社会变革&am…

alter system reset scope sid不要随便加 查询视图

全局变量 写全比较稳妥 set的时候自动加both &#xff0c; reset时不是自动both Applies to: Oracle Database - Enterprise Edition - Version 11.2.0.4 and later Information in this document applies to any platform. Symptoms When the OPTIMIZER_FEATURES_ENABLE p…

Apifox「动态值」全新升级:灵活mock类型的数据

在使用 Apifox 进行接口测试时&#xff0c;你可能不希望将接口参数的值固定&#xff0c;也不想每次发送请求时手动修改数据&#xff0c;而是希望参数值能够自动变化&#xff0c;并且这个参数值能够符合真实场景中的数据需求。比如&#xff0c;你可能需要随机生成数字、字符串、…

90、Python之鸭子类型:for循环的本质,进一步解析迭代协议

引言 在前面的文章中&#xff0c;我们简单介绍了Python中的可迭代对象、迭代器、以及迭代协议的概念。今天就for这个用得特别多&#xff0c;觉得很熟悉很简单的语法结构&#xff0c;稍微展开一下&#xff0c;从而更好地加深对迭代协议的理解。 本文的主要内容有&#xff1a; …

<<迷雾>> 第11章 全自动加法计算机(1)--比特单元 示例电路

具有唯一输入/输出线的存储器 info::操作说明 读取时, 将 读R 开关闭合即可, Q 的输出将通过传输门 G 到达输出 DB 处 写入时, 首先将 写W 开关闭合, 再将上方为测试引入的开关闭合, 此时此高电平将写入 Q 之后断开 写W 的开关, 写入状态结束, 之后可将上方为测试引入的开关断开…

使用MySQL API 进行多线程数据库增删改查操作

使用MySQL API 进行多线程数据库增删改查操作 准备工作安装MySQL Connector/C包含必要的头文件初始化MySQL连接增删改查处理插入数据删除数据更新数据查询数据主函数注意事项在现代的应用程序中,数据库操作往往是性能的关键瓶颈之一。为了提高数据库操作的效率,多线程技术被广…

LeCun数十年经验之谈:视觉是建立AGI的核心,视频理解难点在哪?语言模型技术为何难以复用于视觉?

文字来源 | 夕小瑶科技说 AI寒武纪 大语言模型&#xff08;LLM&#xff09;已经接近人类水平&#xff0c;但视觉理解在世界范围似乎尚未突破&#xff0c;那么为何不能直接将LLM技术用于视觉&#xff1f;让AI看视频的难点在哪&#xff1f;如果语言是AGI必要的能力&#xff0c;为…

Flink 批作业如何在 Master 节点出错重启后恢复执行进度?

摘要&#xff1a;本文撰写自阿里云研发工程师李俊睿&#xff08;昕程&#xff09;&#xff0c;主要介绍 Flink 1.20 版本中引入了批作业在 JM failover 后的进度恢复功能。主要分为以下四个内容&#xff1a; 背景解决思路使用效果如何启用 Tips&#xff1a;点击「阅读原文」跳转…

数据结构实验:用栈求解迷宫问题的所有路径及最短路径

用栈求解迷宫问题的所有路径及最短路径 题目描述 编写一个程序exp3-5.cpp,改进《教程》3.1.4节中的求解迷宫问题程序,要求输 如图3.9所示的迷宫的所有路径,并求第一条最短路径及其长度。 在本实验中用mg作为迷宫数组,用St数组作为顺序栈,Path数组保存一条迷宫径,将它们都设置为…

47 C 语言实战项目——家庭收支记账软件

目录 1 需求说明 1.1 菜单显示 1.2 登记收入 1.3 登记支出 1.4 显示收支明细 1.5 退出 2 流程分析 2.1 总流程图 2.2 登记收入流程图 2.3 登记支出流程图 2.4 收支明细流程图 2.5 退出流程图 3 代码实现 3.1 框架搭建 3.2 收支明细功能 3.3 登记收入功能 3.4 …