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

news/2024/11/6 13:56:50/

        本篇文章将介绍一个基于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();			//初始化OLEDOLED_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();}}}	  	
}

四、图片展示

五、总结

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

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


http://www.ppmy.cn/news/350697.html

相关文章

Javaweb学习路线(3)——SpringBoot入门、HTTP协议与Tomcat服务器

一、SpringBoot入门 &#xff08;一&#xff09;第一个Springboot案例 1、创建Springboot工程&#xff0c;添加依赖。 2、定义类&#xff0c;添加方法并添加注释 3、运行测试。 pom.xml&#xff08;框架自动生成&#xff09; <?xml version"1.0" encoding&quo…

Linux之通配符、引号的使用

目录 Linux之通配符、引号的使用 通配符 定义 范围 用法及含义 案例 引号使用 案例 Linux之通配符、引号的使用 通配符 定义 通配符是一种特殊语句&#xff0c;主要有星号(*)、问号(?)等表示&#xff0c;用来模糊搜索文件&#xff0c;当查找目录或文件时&#xff0c;…

Python面试必知100题【1~5题】

Python面试必知100例。收集整理了目前Python岗位常见的面试题&#xff0c;希望大家通过学习理解相关知识点。下面介绍的是1~5道题。 一、请说下Python有哪些特点 Python是一种解释型语言&#xff0c;这意味着开发过程中没有了编译这个环节。面向对象&#xff1a;Python支持面向…

如何在素材中心中下载字体并安装?

前置准备&#xff1a; 文本组件 具体步骤&#xff1a; 进入 字体素材中心 下载安装字体 应用字体 步骤分解&#xff1a; 进入字体素材中心 选中文本组件 点击检查器面板的样式 选择字体设置 点击字体素材中心 下载安装字体 进入字体素材页面 点击 Install 安装 应…

【3DsMAX】从零开始建房(7)

目录 1. 制作屋顶小船剩余部分 2. 制作小广告牌 1. 制作屋顶小船剩余部分 新建一个平面 长度分段设置为1 转换成可编辑多边形后&#xff0c;对边进行缩放 同样的方法再添加一个平面 添加“壳” 新建一个圆柱体作为桅杆 选中圆柱的底面&#xff0c;点击插入 挤出 将顶部的点缩…

字体压缩工具

方法1&#xff1a;sfnttool sfnttool.jar是Google开源项目sfntly中的一个工具可以对指定字体提取出想要的文字&#xff0c;导出更小体积的字体 下载地址&#xff1a;https://github.com/googlefonts/sfntly 这个必须在有java环境中去允许。所以没有java环境的可以先安装java环…

谷歌字体下载安装(感觉没有很好用)

此教程为谷歌字体下载教程。 结论总结&#xff1a; 不好用原因主要是中文字体库不全&#xff0c;其他语言字体还是可以的。 步骤&#xff1a; 前提&#xff1a;科学上网 1、打开https://fonts.google.com/&#xff0c;语言选择为【Chinese(simplified)】即简体中文&#x…

wine设置中文字体(解决中文字体丢失或白方块)

注意字无法显示和显示为乱码是不同的症状&#xff0c;如果看到乱码&#xff0c;请确保系统语言和运行Wine时的语言环境一致。如果有汉字丢失或显示为方框&#xff0c;请继续阅读本文。 中文 解决中文无法显示问题有三种思路&#xff1a;字体链接、字体替换或直接提供相应字体。…