欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 單片機+8255芯片實現簡易電子琴程序與Proteus仿真 [打印本頁]

作者: 999888555    時間: 2021-10-13 22:54
標題: 單片機+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)






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