找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4449|回复: 6
打印 上一主题 下一主题
收起左侧

单片机生日快乐的8*8点阵显示和电子琴

  [复制链接]
跳转到指定楼层
楼主
仿真开始后,8*8点阵先依次显示牛、大、哥、生、日、快、乐,然后蜂鸣器播放祝你生日快乐的曲子。
PS:电子琴所要播放的乐曲,可以从网上找到相应的乐谱,然后从我所上传附件里的软件输入乐谱得到电子琴所需要的十六进制数组。



仿真图如下:



主程序代码如下:
#include<reg51.h>
#include "SoundPlay.h"

#define u8 unsigned char //宏定义
#define u16 unsigned int

//void delay_1ms(u16 k)
//{
//        u16 i,j;
//        for(i=0;i<k;i++)
//        for(j=0;j<120;j++);
//}

void delay(u16 i) //延时函数
{
  u16 k;
  for(k=0;k<i;k++);
}

//***************************************Music********************************************

u8 Music_Code[]={ 0x0F,0x03, 0x0F,0x03, 0x10,0x02, 0x0F,0x02, 0x15,0x02,
                  0x11,0x01, 0x0F,0x03, 0x0F,0x03, 0x10,0x02, 0x0F,0x02,
                  0x16,0x02, 0x15,0x01, 0x0F,0x03, 0x0F,0x03, 0x19,0x02,
                  0x17,0x02, 0x15,0x02, 0x11,0x02, 0x10,0x02, 0x18,0x03,
                  0x18,0x03, 0x17,0x02, 0x15,0x02, 0x16,0x02, 0x15,0x02,
                  0x00,0x00 }; //生日快乐歌曲

//****************************************************************************************

//***************************************LED8*8********************************************

u8 code led[7][8]={{0x18,0x3e,0x48,0x7f,0x08,0x08,0x08,0x08},        //牛
                   {0x08,0x08,0x7f,0x08,0x08,0x14,0x22,0x41},        //大
                                   {0x3e,0x1a,0x1a,0x7f,0x1a,0x1a,0x06,0x02},        //哥
                                   {0x08,0x28,0x7f,0x88,0x1c,0x08,0x08,0x7f},        //生
                                   {0x00,0x3e,0x22,0x22,0x3e,0x22,0x22,0x3e},        //日
                                   {0x48,0x5e,0xea,0x7f,0x48,0x4c,0x52,0x61},        //快
                                   {0x18,0x28,0x48,0x7e,0x08,0x08,0x3a,0x49},        //乐
                  };//定义二维数组,依次显示牛、大、哥、生、日、快、乐

//****************************************************************************************

void main()
{
        u8 w;
         u16 j,k,m;
        InitialSound();        
        while(1)
        {        
           for(k=0;k<7;k++)        //第一维下标取值范围为牛、大、哥、生、日、快、乐,7个字符
            {for(m=0;m<200;m++)        //每个字符扫描显示200次,控制每个字符显示汉字
                  {         w=0x01; //行初值
                     for(j=0;j<8;j++) //第二维下标取值范围为0~7,控制8行
                          {P3=w; //行控制
                           P0=~led[k][j]; //列控制,将指定数组元素取反后赋值给P0口,显示码
                           delay(60);
                           w<<=1; //行变量左移指向下一行
                           P0=0xff;
                          }
                  }
                }
                Play(Music_Code,0,3,360); //播放音乐
                delay(100000);
        }
}

88点阵和电子琴.zip (279.76 KB, 下载次数: 113)

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏5 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:84791 发表于 2020-10-8 04:01 | 只看该作者
很不错,我准备把点阵改成16*16的,这样显示汉字就好看点。不过目前在学习,把8*8搞清楚了再搞16*16的。
回复

使用道具 举报

板凳
ID:887271 发表于 2021-3-1 14:15 | 只看该作者
下了  但是点阵不行,8*8像素显示汉字还是差了点
回复

使用道具 举报

地板
ID:1001969 发表于 2022-1-15 00:53 | 只看该作者
请问为什么我烧录进去后没有反应呢
回复

使用道具 举报

5#
ID:262 发表于 2022-1-15 02:25 | 只看该作者
本帖最后由 heicad 于 2022-1-15 02:27 编辑
Ariel_0926 发表于 2022-1-15 00:53
请问为什么我烧录进去后没有反应呢

估计是你io口不对,或者是你电路没搭建好解决方法是,先仿真,确定软件有没有问题,确定后,再检查硬件连接
回复

使用道具 举报

6#
ID:1088576 发表于 2023-7-15 15:49 | 只看该作者
老师,请教个问题,0x48,0x5e,0xea,0x7f,0x48,0x4c,0x52,0x61},        //快  这个16进制,转成2进制后,怎么定义LED通电与否的? 谢谢。刚学,麻烦您了
回复

使用道具 举报

7#
ID:1088383 发表于 2023-7-16 15:59 | 只看该作者
zkmeng1 发表于 2023-7-15 15:49
老师,请教个问题,0x48,0x5e,0xea,0x7f,0x48,0x4c,0x52,0x61},        //快  这个16进制,转成2进制后,怎 ...

这个要看原理图的吧,我的是把P0口都拉成低电平,然后要亮哪一行就给哪一行高电平
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表