久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

16*16滾動點陣屏+音樂盒C語言源程序

 快樂讀書法 2015-12-06
    這個東西是09年剛學(xué)單片機時做的,,基于51單片機,。點陣屏用的是一個集成好的模塊,就是四個595兩兩級聯(lián)分別控制行和列,,屏可能有點老,所以不是很亮,。字摸直接用網(wǎng)上的字摸提取軟件就能提取,。另外用定時計數(shù)器產(chǎn)生方波做了一個音樂播放器(用了一個運放),放的是天空之城的音樂,,同時用一個兩位數(shù)碼管顯示當(dāng)前的音樂音階(第一位數(shù)碼管表示高中低音),。感覺里面用了不少51的資源,挺好的程序,,現(xiàn)在完全開源的給大家分享出來

作品圖片:
  1. #include<reg51.h>
  2. sbit RCK=P2^2;
  3. sbit SRCK_1=P2^3;
  4. sbit SRCK_2=P2^4;
  5. sbit SER_IN_1=P2^5;
  6. sbit SER_IN_2=P2^6;
  7. sbit DIG1=P2^0;
  8. sbit DIG2=P2^1;
  9. sbit buz=P2^7;
  10. unsigned char num=13;--字幕有多少個字

  11. unsigned int speed=85;--每狀態(tài)持續(xù)時間,,數(shù)字越小,字幕速度越快

  12. unsigned int  song_num=136;--音節(jié)個數(shù)


  13. unsigned char code song[]=--中音前綴為1,,低音為0,,高音為2+后位為歌譜
  14. {
  15.   16,17,21,17,21,23,17,13,13,16,15,16,21,15,10,13,13,14,13,14,21,
  16.   10,13,01,21,21,21,17,14,14,17,17,10,16,17,21,17,21,23,17,10,13,13,16,15,16,21,
  17.   15,10,13,14,21,17,17,21,22,22,23,21,10,21,17,16,16,17,15,16,10,21,22,23,22,23,
  18.   25,22,10,15,15,21,17,21,23,23,10,10,16,17,21,17,22,22,21,15,15,10,24,23,22,21,
  19.   23,23,10,23,26,25,25,23,22,21,10,21,22,21,22,22,25,23,10,23,26,25,23,22,21,10,
  20.   21,22,21,22,22,17,16,10,16,17,16
  21. };


  22. unsigned char code song_speed[]=--節(jié)拍,數(shù)目越大聲音持續(xù)時間越長,,與各曲譜位置對應(yīng)
  23. {
  24.   40,60,120,80,100,100,300,40,60,120,80,100,100,200,100,50,50,120,80,80,120,100,200,25,25,
  25.   25,25,120,80,105,95,200,100,50,50,120,80,100,100,200,100,50,50,120,80,100,100,300,50,50,
  26.   100,40,50,110,100,33,33,33,100,100,120,80,50,50,100,100,200,100,50,50,120,80,100,100,
  27.   200,100,50,50,110,90,100,100,200,100,100,45,55,100,100,50,50,110,80,110,100,100,100,100,100,
  28.   400,200,100,100,200,100,100,50,50,100,50,50,100,45,55,100,100,200,100,100,200,200,120,80,
  29.   200,50,50,100,60,40,50,100,200,100,50,50,400
  30. };


  31. unsigned char code hanzi[]=--字模提取BADC,右旋90度
  32. {
  33. 0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0xFF,0xFF,0x80,0x40,0x80,0x40,0xA0,0x23,--長
  34. 0x90,0x04,0x88,0x08,0x84,0x10,0x86,0x20,0x80,0x60,0xC0,0x20,0x80,0x00,0x00,0x00,

  35. 0x20,0x04,0x22,0x04,0x2A,0x02,0x2A,0x01,0xAA,0xFF,0x6A,0x49,0x3A,0x49,0x2F,0x49,--春
  36. 0x2A,0x49,0x6A,0x49,0xAA,0xFF,0x2A,0x01,0x2A,0x02,0x22,0x06,0x20,0x02,0x00,0x00,

  37. 0x44,0x10,0x44,0x30,0xFC,0x1F,0x46,0x08,0x44,0x48,0x00,0x48,0xFE,0x44,0x92,0x44,--理
  38. 0x92,0x44,0xFE,0x7F,0x92,0x44,0x92,0x46,0xFF,0x44,0x02,0x60,0x00,0x40,0x00,0x00,

  39. 0x00,0x20,0x04,0x20,0x04,0x20,0x04,0x20,0x04,0x20,0x04,0x20,0x04,0x20,0xFC,0x3F,--工
  40. 0x04,0x20,0x04,0x20,0x04,0x20,0x04,0x20,0x06,0x20,0x04,0x30,0x00,0x20,0x00,0x00,

  41. 0x80,0x00,0x80,0x40,0x40,0x40,0x20,0x4A,0x50,0x52,0x48,0x62,0x44,0x42,0xC3,0x7F,--姓   0x44,0x42,0x68,0x62,0x50,0x52,0x20,0x4A,0x40,0x60,0xC0,0x40,0x40,0x00,0x00,0x00,

  42. 0x10,0x00,0x10,0x80,0x10,0x40,0x10,0x30,0x10,0x0C,0x90,0x23,0x7F,0x20,0x10,0x10,--名0xF0,0x3F,0x12,0x44,0x14,0x42,0x10,0x41,0xD0,0x40,0x18,0x40,0x10,0x78,0x00,0x00,

  43. 0x80,0x00,0x40,0x00,0x20,0x00,0xF8,0xFF,0x87,0x00,0x40,0x00,0x30,0x00,0x0F,0x00,--作
  44. 0xF8,0xFF,0x88,0x08,0x88,0x08,0xC8,0x08,0x88,0x0C,0x0C,0x08,0x08,0x00,0x00,0x00,

  45. 0x00,0x00,0x00,0xFF,0x00,0x41,0x7E,0x41,0x22,0x41,0x22,0x41,0xA2,0xFF,0x22,0x01,--品
  46. 0x22,0xFF,0x22,0x41,0x22,0x41,0x7F,0x41,0x02,0x41,0x80,0xFF,0x00,0x01,0x00,0x00,

  47. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x7C,0x3B,0xFE,--!
  48. 0x3B,0xFE,0x10,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

  49. 0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,-圖
  50. 0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,

  51. 0x00,0x01,0x40,0x00,0x10,0x00,0x04,0x00,0x01,0x00,0x04,0x00,0x10,0x00,0x40,0x00,
  52. 0x00,0x01,0x00,0x04,0x00,0x10,0x00,0x04,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,

  53. 0x00,0x01,0x40,0x00,0x10,0x00,0x04,0x00,0x01,0x00,0x04,0x00,0x10,0x00,0x40,0x00,-案
  54. 0x00,0x01,0x00,0x04,0x00,0x10,0x00,0x04,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,

  55. 0xF0,0x00,0x08,0x01,0x14,0x02,0x52,0x04,0x12,0x08,0x12,0x10,0x24,0x22,0x58,0x55,
  56. 0x88,0x68,0x04,0x20,0x12,0x10,0x12,0x08,0x52,0x04,0x14,0x02,0x08,0x01,0xF0,0x00
  57. };


  58. unsigned char code  saomiao[]=--字幕掃描數(shù)組
  59. {
  60.   0x00,0x01,0x00,0x02,0x00,0x04,0x00,0x08,0x00,0x10,0x00,0x20,0x00,0x40,0x00,0x80,
  61.   0x01,0x00,0x02,0x00,0x04,0x00,0x08,0x00,0x10,0x00,0x20,0x00,0x40,0x00,0x80,0x00
  62. };
  63. unsigned char tone_l_h[]={0xf0,0xf9,0xf9,0xfa,0xfa,0xfb,0xfb,0xfc};--底音高8位頻率
  64. unsigned char tone_l_l[]={0xf0,0x21,0xe0,0x8b,0xd7,0x68,0xe8,0x5b};--底音低8位頻率
  65. unsigned char tone_m_h[]={0xf0,0xfc,0xfc,0xfd,0xfd,0xfd,0xfd,0xfe};--中音高8位頻率
  66. unsigned char tone_m_l[]={0xf0,0x8f,0xef,0x45,0x6c,0xb5,0xf5,0x2e};--中音低8位頻率
  67. unsigned char tone_h_h[]={0xf0,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xff};--高音高8位頻率
  68. unsigned char tone_h_l[]={0xf0,0x47,0x77,0xa2,0xb6,0xda,0xfa,0x16};--高音低8位頻率
  69. unsigned char code number[]={0xc0,0xf9,0xa4,0xb0,0X99,0X92,0X82,0Xf8,0X80,0X90};--數(shù)碼管顯示0~9
  70. unsigned char tone_yin[]={0xf7,0xbf,0xfe};--低中高音節(jié)數(shù)碼管顯示
  71. unsigned char *s=saomiao,*h=hanzi,*w,*t,flog1=0,flog2=0,x,m,count,TH_M0,TL_M0,n;
  72. unsigned int cx;

  73. void delay(unsigned int num)--普通延時函數(shù),,用于調(diào)整音調(diào)
  74. {
  75.   unsigned int z;
  76.   for(z=0;z<num;z++)
  77.   {;}
  78. }

  79. delay_1()--倒計時延時函數(shù),可控制執(zhí)行次數(shù),,用于控制字幕滾動速度
  80. {
  81.   cx--;
  82.   if(cx!=0) return(1);
  83.   if(cx==0) return(0);
  84.   }

  85. void write_1(unsigned char byte)--字模寄存器寫入(根據(jù)點陣特點,,調(diào)整輸出次序)
  86. {
  87.   unsigned char i;
  88.   for(i=0;i<8;i++)
  89.    {
  90.     SRCK_1=0;
  91.     if((byte&0x01)==0)
  92.       SER_IN_1=0;
  93.     else SER_IN_1=1;
  94.      SRCK_1=1;
  95.      byte=byte>>1;
  96.    }
  97.   SRCK_1=0;
  98. }


  99. void write_2(unsigned char byte)--掃描行寄存器寫入
  100. {
  101.   unsigned char i;
  102.   for(i=0;i<8;i++)
  103.    {
  104.     SRCK_2=0;
  105.     if((byte&0x80)==0)
  106.          SER_IN_2=0;
  107.     else SER_IN_2=1;
  108.     SRCK_2=1;
  109.     byte=byte<<1;
  110.     }
  111.   SRCK_2=0;
  112. }


  113. void scan()--執(zhí)行一次,掃描一行
  114.   {
  115.     unsigned char j;
  116.     flog1++;
  117.     if(flog1==17)
  118.       {
  119.         flog1=1;
  120.         s=saomiao;
  121.       }
  122.     for(j=0;j<2;j++)
  123.       {
  124.         write_2(*(s++));
  125.       }
  126.    
  127.   }

  128. void gundong(unsigned char n)--每次賦值是輸入2個值,n從1開始,產(chǎn)生滾動
  129. {
  130.   unsigned char j;
  131.   if(flog2==0)
  132.     {
  133.      t=&hanzi[2*(n-1)];
  134.      if(n<=((num-1)*16+1))
  135.        {
  136.          w=&hanzi[2*(n-1)+32];
  137.        }
  138.       else
  139.        {
  140.          w=&hanzi[2*(n-1)-2*(num-1)*16];--每次只顯示16位,,32個字節(jié),,w是尾地址
  141.        }
  142.      h=t;
  143.      flog2++;
  144.     }
  145.      if(h==w)--他和下面的IF不可調(diào)換次序
  146.     {
  147.      h=t;
  148.     }
  149.     if(h==(hanzi+num*32))
  150.     {
  151.      h=hanzi;
  152.     }
  153.   for(j=0;j<2;j++)
  154.     {
  155.      write_1(*(h++));
  156.     }
  157. }


  158. main()
  159. {
  160.   unsigned char i;
  161.   cx=speed;
  162.   SRCK_1=0;
  163.   SRCK_2=0;
  164.   RCK=0;--清零很重要?,?,?
  165.   n=0;
  166.   EA=1;--打開中斷
  167.   ET0=1;
  168.   ET1=1;--易錯點,定時器打開,,中斷也得開
  169.   TMOD=0x11;--打開定時器
  170.   TR0=1;
  171.   TR1=1;
  172.   PT0=1;--優(yōu)先級設(shè)定
  173.   while(1)
  174.     {
  175.      for(i=0;i<song_num;i++)
  176.        {
  177.          x=song[i];
  178.          m=song[i]/10;
  179.          switch(m)--分中底高位賦值
  180.            {
  181.              case 0:{TH_M0=tone_l_h[x];TL_M0=tone_l_l[x];break;}
  182.              case 1:{TH_M0=tone_m_h[x];TL_M0=tone_m_l[x];break;}
  183.              case 2:{TH_M0=tone_h_h[x];TL_M0=tone_h_l[x];break;}
  184.            }
  185.          TH0=TH_M0;
  186.          TL0=TL_M0;
  187.          delay(song_speed[i]*20);--節(jié)奏控制
  188.       }
  189.    }
  190. }

  191. void play_music(void) interrupt 1 --輸出音樂函數(shù)+數(shù)碼輸出函數(shù)
  192. {
  193. TH0=TH_M0;
  194. TL0=TL_M0;
  195. if(x!=0) buz=!buz;
  196. if(x==0) buz=0;
  197. count++;
  198. if(count==1)
  199.   {
  200.    DIG1=0;
  201.    DIG2=1;
  202.    P0=tone_yin[m];
  203.   }
  204. if(count==2)
  205. {
  206.   count=0;
  207.   DIG1=1;
  208.   DIG2=0;
  209.   P0=number[x];
  210. }
  211. }

  212. void play(void) interrupt 3

  213. {
  214.   if(n==(num*16))
  215.     {
  216.      n=0;
  217.     }
  218.   n++;   
  219.   while(delay_1())
  220.     {
  221.      gundong(n);
  222.      scan();   
  223.      RCK=0;
  224.      RCK=1;   
  225.     }
  226.   flog1=0;
  227.   flog2=0;
  228.   cx=speed;
  229.   s=saomiao;
  230.   TH1=0xEF;--放后面,,防止不準
  231.   TL1=0xEF;
  232.   TF1=0;
  233. }
復(fù)制代碼




    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,,謹防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多