標(biāo)題: 單片機(jī)生日快樂的8*8點(diǎn)陣顯示和電子琴 [打印本頁]

作者: 一路的花田    時(shí)間: 2020-5-9 16:51
標(biāo)題: 單片機(jī)生日快樂的8*8點(diǎn)陣顯示和電子琴
仿真開始后,8*8點(diǎn)陣先依次顯示牛、大、哥、生、日、快、樂,然后蜂鳴器播放祝你生日快樂的曲子。
PS:電子琴所要播放的樂曲,可以從網(wǎng)上找到相應(yīng)的樂譜,然后從我所上傳附件里的[attach]233173[/attach]軟件輸入樂譜得到電子琴所需要的十六進(jìn)制數(shù)組。



仿真圖如下:



主程序代碼如下:
#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) //延時(shí)函數(shù)
{
  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},        //樂
                  };//定義二維數(shù)組,依次顯示牛、大、哥、生、日、快、樂

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

void main()
{
        u8 w;
         u16 j,k,m;
        InitialSound();        
        while(1)
        {        
           for(k=0;k<7;k++)        //第一維下標(biāo)取值范圍為牛、大、哥、生、日、快、樂,7個(gè)字符
            {for(m=0;m<200;m++)        //每個(gè)字符掃描顯示200次,控制每個(gè)字符顯示漢字
                  {         w=0x01; //行初值
                     for(j=0;j<8;j++) //第二維下標(biāo)取值范圍為0~7,控制8行
                          {P3=w; //行控制
                           P0=~led[k][j]; //列控制,將指定數(shù)組元素取反后賦值給P0口,顯示碼
                           delay(60);
                           w<<=1; //行變量左移指向下一行
                           P0=0xff;
                          }
                  }
                }
                Play(Music_Code,0,3,360); //播放音樂
                delay(100000);
        }
}

88點(diǎn)陣和電子琴.zip (279.76 KB, 下載次數(shù): 118)


作者: 537224    時(shí)間: 2020-10-8 04:01
很不錯(cuò),我準(zhǔn)備把點(diǎn)陣改成16*16的,這樣顯示漢字就好看點(diǎn)。不過目前在學(xué)習(xí),把8*8搞清楚了再搞16*16的。
作者: cdqwin    時(shí)間: 2021-3-1 14:15
下了  但是點(diǎn)陣不行,8*8像素顯示漢字還是差了點(diǎn)
作者: Ariel_0926    時(shí)間: 2022-1-15 00:53
請(qǐng)問為什么我燒錄進(jìn)去后沒有反應(yīng)呢
作者: heicad    時(shí)間: 2022-1-15 02:25
本帖最后由 heicad 于 2022-1-15 02:27 編輯
Ariel_0926 發(fā)表于 2022-1-15 00:53
請(qǐng)問為什么我燒錄進(jìn)去后沒有反應(yīng)呢

估計(jì)是你io口不對(duì),或者是你電路沒搭建好解決方法是,先仿真,確定軟件有沒有問題,確定后,再檢查硬件連接

作者: zkmeng1    時(shí)間: 2023-7-15 15:49
老師,請(qǐng)教個(gè)問題,0x48,0x5e,0xea,0x7f,0x48,0x4c,0x52,0x61},        //快  這個(gè)16進(jìn)制,轉(zhuǎn)成2進(jìn)制后,怎么定義LED通電與否的? 謝謝。剛學(xué),麻煩您了

作者: Snowmaker    時(shí)間: 2023-7-16 15:59
zkmeng1 發(fā)表于 2023-7-15 15:49
老師,請(qǐng)教個(gè)問題,0x48,0x5e,0xea,0x7f,0x48,0x4c,0x52,0x61},        //快  這個(gè)16進(jìn)制,轉(zhuǎn)成2進(jìn)制后,怎 ...

這個(gè)要看原理圖的吧,我的是把P0口都拉成低電平,然后要亮哪一行就給哪一行高電平




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1