找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机+8255芯片实现简易电子琴程序与Proteus仿真

[复制链接]
跳转到指定楼层
楼主
1到7为7个音节,8为送别,在播放音乐时操作按键无效,只有复位或等歌曲放完

仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)



单片机源程序如下:
  1. #include "reg52.h"
  2. #include "absacc.h"
  3. #include<stdio.h>
  4. #include"intrins.h"
  5. sbit CS =P2^7;        //8255片选端口
  6. sbit SPK=P1^0;  //定义音乐输出端口
  7. #define PA XBYTE[0x0000]
  8. #define PB XBYTE[0x0401]
  9. #define PC XBYTE[0x0802]
  10. #define CN XBYTE[0x0C03]
  11. #define RS_CLR PB &= ~(1<<0)                                                
  12. #define RS_SET PB |= (1<<0)
  13. #define RW_CLR PB &= ~(1<<1)
  14. #define RW_SET PB |= (1<<1)
  15. #define EN_CLR PB &= ~(1<<2)
  16. #define EN_SET PB |= (1<<2)
  17. #define DataPort PA
  18. unsigned char state = 0 ;
  19. unsigned char temp,num,updat ;
  20. unsigned table[ ]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  21. unsigned char number=0;
  22. unsigned char W=0,T;        //用于选择音乐
  23. unsigned char Timer0_H,Timer0_L,Time;
  24. void DelayMs(unsigned char t);

  25.                                                 //送别 数据表        音谱,高中低音,音长
  26. code unsigned char MUSIC1[174]={        5,2,2,                3,2,1,                5,2,1,                1,3,4,        
  27.                                                                         6,2,2,                1,3,2,                5,2,4,
  28.                                                                         5,2,2,                1,2,1,                2,2,1,                3,2,2,                2,2,1,                1,2,1,
  29.                                                                         2,2,8,
  30.                                                                         5,2,2,                3,2,1,                5,2,1,                1,3,3,                7,2,1,
  31.                                                                         6,2,2,                1,3,2,                5,2,4,
  32.                                                                         5,2,2,                2,2,1,                3,2,1,                4,2,3,                7,1,1,
  33.                                                                         1,2,8,
  34.                                                                         6,2,2,                1,3,2,                1,3,4,
  35.                                                                         7,2,2,                6,2,1,                7,2,1,                1,3,4,
  36.                                                                         6,2,1,                7,2,1,                1,3,1,                6,2,1,                6,2,1,                5,2,1,                3,2,1,                1,2,1,
  37.                                                                         2,2,8,
  38.                                                                         5,2,2,                3,2,1,                5,2,1,                1,3,3,                7,2,1,
  39.                                                                         6,2,2,                1,3,2,                5,2,4,
  40.                                                                         5,2,2,                2,2,1,                3,2,1,                4,2,3,                7,1,1,
  41.                                                                         1,2,8
  42.                                                                 };
  43.                          // 音阶频率表 高八位
  44. code unsigned char FREQH[]={
  45.                                 0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0xF8,
  46.                                 0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,0xFC, //1,2,3,4,5,6,7,8,i
  47.                                 0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,
  48.                                 0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF,
  49.                                } ;
  50.                          // 音阶频率表 低八位
  51. code unsigned char FREQL[]={
  52.                                  0x42,0xC1,0x17,0xB6,0xD0,0xD1,0xB6,
  53.                                  0x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B,0x8F, //1,2,3,4,5,6,7,8,i
  54.                                  0xEE,0x44, 0x6B,0xB4,0xF4,0x2D,
  55.                                  0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16,
  56.                                 };
  57. /*------------------------------------------------
  58.                 节拍延时函数
  59. 各调1/4节拍时间:
  60. 调4/4  125ms
  61. 调2/4  250ms
  62. 调3/4  187ms
  63. ------------------------------------------------*/
  64. void delay(unsigned char t)
  65. {
  66.     unsigned char i;
  67.         for(i=0;i<t;i++)
  68.             DelayMs(250);
  69.     TR0=0;
  70. }
  71. /*------------------------------------------------
  72.                定时器0中断
  73. ------------------------------------------------*/
  74. void TIM0_ISR() interrupt 1
  75. {
  76.         TR0=0;      
  77.         SPK=!SPK;
  78.         TH0=Timer0_H;
  79.         TL0=Timer0_L;
  80.         TR0=1;
  81. }
  82. /*------------------------------------------------
  83.                 歌曲处理函数
  84. ------------------------------------------------*/
  85. void Song()
  86. {
  87.         TH0=Timer0_H;//赋值定时器时间,决定频率
  88.         TL0=Timer0_L;
  89.         TR0=1;       //打开定时器
  90.         delay(Time); //延时所需要的节拍                     
  91. }
  92. //微妙延时函数
  93. void DelayUs2x(unsigned char t)
  94. {   
  95. while(--t);
  96. }
  97. //毫秒延时函数
  98. void DelayMs(unsigned char t)
  99. {

  100. while(t--)
  101. {
  102.      DelayUs2x(245);
  103.          DelayUs2x(245);
  104. }
  105. }
  106. //液晶写指令函数
  107. void LCD_Write_Com(unsigned char com)
  108. {  
  109. DelayMs(5);                //延时5毫秒
  110. RS_CLR;                         //指令数据端口设置为低电平,指令模式
  111. RW_CLR;                         //读写端口设置为写模式
  112. EN_SET;
  113. DataPort= com;                //写数据到液晶数据端口
  114. _nop_();
  115. EN_CLR;                        //EN产生下降沿讲数据写入到液晶中
  116. }
复制代码


全部资料51hei下载地址,注意仿真工程只能用Proteus7.5打开:
基于8255的LCD显示简易电子琴.7z (121.57 KB, 下载次数: 46)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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