基于51单片机的课程设计(毕业设计)——电子贺卡

2023-11-11

        本篇文章将介绍一个基于51单片机的电子贺卡,本作品可用于课程设计、毕业设计的参考。其所用到的外设硬件以及程序的代码量都是相对较少的,对于51单片机的初学者,通过本设计熟悉51单片机的使用是非常好的选择。

目录

一、实现功能

二、硬件准备

三、项目设计

 (一)基本原理

  (二)原理图

  (三)程序设计

四、图片展示

五、总结

资料下载: 基于51单片机的电子贺卡设计,课程设计,毕业设计


一、实现功能

  1. 通过喇叭播放《世上只有妈妈好》音乐曲调;
  2. 通过0.96寸的OLED显示图片;
  3. 通过按键切换图片

二、硬件准备

  1. 主控芯片:STC89C52(安装在最小系统板上)
  2. 显示装置:0.96寸4针OLED显示屏(IIC接口)
  3. 播放装置:喇叭、三极管
  4.  其他:杜邦线、电阻若干、按键*1

三、项目设计

 (一)基本原理

        图片的显示是通过0.96寸的OLED显示屏实现的,这个显示屏虽然小,但是显示内容相对较多,而且使用方便,连接非常简单,资料例程较为全面。通过IIC进行通信,本设计中时钟线定义为P1^0,数据线定义为P1^1。

        音乐的播放是通过一个三极管放大电路驱动一个喇叭实现的,当我们改变IO口的高低电平切换频率喇叭就会播放不同的曲调。本设计中喇叭控制端口我们定义为了P1^7,不同的音乐网上会有不同的数据,这个读者可自行参考。

        切换图片用一个按键即可。

  (二)原理图

  • 51单片机最小系统基本原理图 

  •  三极管放大电路

  •  显示电路

  (三)程序设计

  • 定义必要的变量的数组 
#define uchar unsigned char
unsigned char a, i, j, k;
int b;
int key = 0;
sbit speaker = P1 ^ 7;
unsigned char timer0h, timer01, time;
code unsigned char sszymmh1[] = {
    6, 2, 3, 5, 2, 1, 3, 2, 2, 5, 2, 2, 1, 3, 2, 6, 2,
	1, 5, 2, 1, 6, 2, 4, 3, 2, 2, 5, 2, 1, 6, 2, 1, 5, 
	2, 2, 3, 2, 2, 1, 2, 1, 6, 1, 1, 5, 2, 1, 3, 2, 1, 
	2, 2, 4, 2, 2, 3, 3, 2, 1, 5, 2, 2, 5, 2, 1, 6, 2, 
	1, 3, 2, 2, 2, 2, 2, 1, 2, 4, 5, 2, 3, 3, 2, 1, 2, 
	2, 1, 1, 2, 1, 6, 1, 1, 1, 2, 1, 5, 1, 6, 0, 0, 0
};
code unsigned char sszymmh[] = {
    6, 2, 3, 5, 2, 1, 3, 2, 2, 5, 2, 2, 1, 3, 2,
    6, 2, 1, 5, 2, 1, 6, 2, 4, 3, 2, 2, 5, 2, 1,
    6, 2, 1, 5, 2, 2, 3, 2, 2, 1, 2, 1, 6, 1, 1,
    5, 2, 1, 3, 2, 1, 2, 2, 2, 2, 3, 3, 2, 1, 5,
	2, 2, 5, 2, 1, 6, 2, 1, 3, 2, 2, 2, 2, 2, 1, 
	2, 4, 5, 2, 3, 3, 2, 1, 2, 2, 1, 1, 2, 1,
    6, 1, 1, 1, 2, 1, 5, 1, 6, 0, 0, 0
};
code unsigned char FREQH[] = {
    0xF2, 0xF3, 0xF5, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0xF9,
	0xFA, 0xFA, 0xFB, 0xFB, 0xFC, 0xFC, 0xFC, 0xFD, 0xFD, 
	0xFD, 0xFD, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0XFF
};

code unsigned char FREQL[] = { 
  0x42, 0xC1, 0x17, 0xB6, 0xD0, 0xD1, 0xB6, 0x21, 0xE1, 0x8C,
  0xD8, 0x68, 0xE9, 0x5B, 0x8F, 0xEE, 0x44, 0x6B, 0xB4, 0xF4,
  0x2D, 0x47, 0x77, 0xA2, 0xB6, 0xDA, 0xFA, 0x16 
};
  • 延时函数
void delay(unsigned char t)
{
  unsigned char t1;
  unsigned long t2;
  for (t1 = 0; t1 < t; t1++)
    for (t2 = 0; t2 < 8000; t2++)
      ;
}
void lcddelay(unsigned char c) 
{
  unsigned char a, b;
  for (; c > 0; c--)
    for (b = 142; b > 0; b--)
      for (a = 2; a > 0; a--)
        ;
}
  • 音乐播放函数 
void t0int() interrupt 1
{
  TR0 = 0;
  speaker = !speaker;
  TH0 = timer0h;
  TL0 = timer01;
  TR0 = 1;
}
void song() 
{
  TH0 = timer0h;
  TL0 = timer01;
  TR0 = 1;
  delay(time);
}
  • 按键中断函数 
void int0() interrupt 0
{
  EX0 = 0;
  lcddelay(40);
  EX0 = 1;
  key = !key;
}
  • 主函数 
int main(void)
{	 
	unsigned char k, i;
	OLED_Init();			//初始化OLED
	OLED_DrawBMP(0,0,128,8,BMP2);  //图片显示(图片显示慎用,生成的字表较大,会占用较多空间,FLASH空间8K以下慎用)
	Delay_1ms(3000);
	OLED_Clear();
	TMOD = 1; 
	ET0 = 1;
	EA = 1;
	EX0 = 1;
	IT0 = 1;  
	while(1) 
	{
		if (key == 0)
		{
			OLED_Clear();
			OLED_DrawBMP(0,0,128,8,BMP2);  //图片显示(图片显示慎用,生成的字表较大,会占用较多空间,FLASH空间8K以下慎用)
			i = 0;
			while (i < 100 && key == 0)
			{
				k = sszymmh[i] + 7 * sszymmh[i + 1] - 1;
				timer0h = FREQH[k];
				timer01 = FREQL[k];
				time = sszymmh[i + 2];
				i = i + 3;
				song();
			}
		}
		else
		{
			OLED_Clear();
			OLED_DrawBMP(0,0,128,8,BMP1);  //图片显示(图片显示慎用,生成的字表较大,会占用较多空间,FLASH空间8K以下慎用)
			i = 0;
			while (i < 100 && key == 1)
			{
				k = sszymmh1[i] + 7 * sszymmh1[i + 1] - 1;
				timer0h = FREQH[k];
				timer01 = FREQL[k];
				time = sszymmh1[i + 2];
				i = i + 3;
				song();
			}
		}
	}	  	
}

四、图片展示

五、总结

        笔者水平有限,必定有错误不当之处,希望大家不吝指正,共同进步,共同学习!博客到这里完成了~

如果此文章对你有帮助,欢迎点赞 关注 收藏 转发.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于51单片机的课程设计(毕业设计)——电子贺卡 的相关文章

随机推荐

  • 走得最慢的人,只要他不丧失目标,也比漫无目的地徘徊的人走得快。

    走得最慢的人 只要他不丧失目标 也比漫无目的地徘徊的人走得快 莱辛 有着坚定明确的目标 且知道如何做能达成目标 没有追求 未来迷茫 或许大家都想当第一种人 但可能在不知不觉中就成了第二种人 自己也不知道 或是因为目标太大 难以后继 最终失却
  • 1049 数列的片段和

    给定一个正数数列 我们可以从中截取任意的连续的几个数 称为片段 例如 给定数列 0 1 0 2 0 3 0 4 我们有 0 1 0 1 0 2 0 1 0 2 0 3 0 1 0 2 0 3 0 4 0 2 0 2 0 3 0 2 0 3
  • Xshell缺少.dll文件解决方案

    背景 安装Xshell时报错 由于找不到MSVCR110 dll文件 无法继续执行代码 重新安装程序可能会解决此问题 这种情况是缺少运行库 解决方案 微软常用运行库 https pan baidu com s 1kgJRky3cicOMxR
  • 计算机打不开excel表格,excel表格打不开怎么办?excel表格打不开的原因及解决方法...

    今天有网友反映 他昨天做的Excel表格打不开了 但其他Excel表格是可以打开的 非常郁闷 那么Excel表格打不开是什么原因呢 Excel表格打不开怎么办呢 下面脚本之家小编就来说说有关造成Excel表格打不开的几种原因及解决办法 一
  • 基于Loung Attention+LSTM的机器翻译模型

    目录 需要掌握的基础知识 1 Encoder Decoder架构 2 LSTM模型原理 3 Attention机制 基于Loung Attention LSTM的机器翻译模型 模型 数据 训练 基于Bahdanau Attention LS
  • 大数据安全治理平台建设方案

    近年来 随着大数据应用的普及 在新基建 智慧城市 云端应用等大背景趋势下 给我们日常生活便来了很多方便 同时也派生出更多网络安全风险 如企业数据泄露 欺诈 数据违规使用 个人隐私泄露以及企业内部各种威胁和潜在风险 数据是宝贵的资源和财富 当
  • LCD操作原理

    一 LCD原理介绍 LCD内部内部结构 1 lcd由Framebuffer lcd屏幕 信号线 电子枪 lcd控制器组成 2 Framebuffer提供显示数据 lcd屏幕显示 信号线传输Frambuffer中的数据和lcd控制器发出的信号
  • 【深度学习】Attention提速9倍!FlashAttention燃爆显存,Transformer上下文长度史诗级提升...

    转载自 新智元 继超快且省内存的注意力算法FlashAttention爆火后 升级版的2代来了 FlashAttention 2是一种从头编写的算法 可以加快注意力并减少其内存占用 且没有任何近似值 比起第一代 FlashAttention
  • Sqli-labs Less-1 报错注入

    Sqli labs Less 1 报错注入 1 首先打开less1后是一个页面 提示输入id作为参数 输入id 1试一下 然后会出现 name 和 password 添加一个单引号 测试一下注入点 输入单引号发现 会直接将报错结果显示在页面
  • 模拟IC设计——MOS计算及常见MOS管电路

    小生初入模拟IC 作此笔记在大佬面前实属班门弄斧 若有不当之处还请指正 1 MOSFET概述 场效应管与晶体管一样 也具有放大作用 但与普通晶体管是电流控制型器件相反 场效应管是电压控制型器件 它具有输入阻抗高 噪声低的特点 1 MOSFE
  • 使用OpenCV中的matchTemplate函数实现模板匹配【C++版】

    matchTemplate函数原型 void cv matchTemplate InputArray image InputArray templ OutputArray result int method InputArray mask
  • THREEJS - 动态标签(dom方式)

    在三维场景中 我们会有一种需求 需要给三维场景中的模型打上标签 例如展示模型的名称 性能展示等 三维场景打标签的方式很多 有dom sprite Mesh等等 这篇文章来给大家介绍的是一种比较常见的打标签方式 dom 这种方式我们可以自定义
  • WSL2和本地windows端口互通

    众所周知 WSL 默认安装后 只允许windows访问 Windows Subsystem for Linux 而WSL是不能反之访问本地windows 我之前用vmware的思路认为是nat的网络模式 于是改成了桥接 结果wsl的桥接模式
  • springboot日志配输出路径配置_SpringBoot输出日志到文件

    1 基本信息 SpringBoot版本2 2 5 日志框架SLF4J 日志框架的实现LockBack 2 输出文件的配置 2 1 logging file name 指定日志文件的位置 2 1 1 例1 使用相对路径 就会在项目根目录下生成
  • R 语言散点图矩阵

    多个变量之间的关系经常用散点图矩阵表示 ggplot2 包没有提供专门的散点图矩阵 基础 R 图形中提供了 pairs 函数作散点图矩阵 GGally 包提供了一个 ggscatmat 函数作散点图矩阵 例如 对 iris 数据的四个测量值
  • UE4 C++ FString乱码显示问号

    如果以 xxx 这种形式并且xxx为中文时 直接赋值给FString的变量会丢失数据导致系统无法识别 因此需要做特殊处理 第一种解决办法 引号前加L表示将字符串转为unicode的字符串 也就是每个字符占用两个字节 FString str
  • 【无标题】DEFI+NFT新玩法

    DeFi NFT 去中心金融 非同质化货币 NFT Defi就是将流动性挖矿的方法移植到到NFT领域 目前典型的代表有MEME SAND RARI等 区块链行业一直困于 圈内自嗨 无法真正走入大众市场 市场和用户规模的增量相比互联网行业是杯
  • 学习笔记-二叉排序树

    二叉排序树 对于二叉排序树的任何一个非叶子节点 要求左子节点的值比当前节点的值小 右子节点的值比当前节点的值大 如果有相同的值 可以将该节点放在左子节点或右子节点 二叉排序树的创建和遍历 思路 比较节点的值 小于就放在左子节点 大于就放在右
  • 使用 AJAX+JSON 实现用户查询/添加功能

    实现用户查询 添加功能 1 查询功能 准备 selectAllServlet brand html 2 添加功能 addBrand html 表单
  • 基于51单片机的课程设计(毕业设计)——电子贺卡

    本篇文章将介绍一个基于51单片机的电子贺卡 本作品可用于课程设计 毕业设计的参考 其所用到的外设硬件以及程序的代码量都是相对较少的 对于51单片机的初学者 通过本设计熟悉51单片机的使用是非常好的选择 目录 一 实现功能 二 硬件准备 三