標(biāo)題: 基于51單片機(jī)的搖搖棒制作 原理圖PCB文件程序 [打印本頁]

作者: LemonSea丶    時間: 2022-1-11 23:17
標(biāo)題: 基于51單片機(jī)的搖搖棒制作 原理圖PCB文件程序
當(dāng)時做著玩,現(xiàn)在分享出來給大家


單片機(jī)源程序如下:
  1. #include <AT89X52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int    //宏定義
  4. #define KEY P1_0      //定義畫面切換按鍵
  5. uchar KY;      //KY見后面   
  6. uchar disp;     //顯示漢字指針
  7. uchar pic=0,num=0;     //pic為按鍵次數(shù);num為中斷次數(shù)

  8. uchar code love[] = {
  9. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  10. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x3F,0x00,0x20,0x00,0x20,0x00,0x20,
  11. 0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x0F,
  12. 0x04,0x10,0x02,0x20,0x02,0x20,0x02,0x20,0x02,0x20,0x04,0x10,0xF8,0x0F,0x00,0x00,
  13. 0x00,0x00,0x00,0x00,0xFE,0x07,0x00,0x08,0x00,0x10,0x00,0x20,0x00,0x20,0x00,0x10,
  14. 0x00,0x08,0xFE,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x3F,0x82,0x20,0x82,0x20,
  15. 0x82,0x20,0x82,0x20,0x82,0x20,0x82,0x20,0x82,0x20,0x00,0x00,0x00,0x00,0x00,0x00,
  16. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*LOVE*/
  17. };

  18. uchar code loveyou[] = {
  19. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  20. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  21. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  22. 0x78,0x00,0xFC,0x00,0xFE,0x01,0xFE,0x03,0xFE,0x07,0xFE,0x0F,0xFE,0x1F,0xFC,0x3F,
  23. 0xF8,0x7F,0xFC,0x3F,0xFE,0x1F,0xFE,0x0F,0xFE,0x07,0xFE,0x03,0xFE,0x01,0xFC,0x00,
  24. 0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  25. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  26. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*心形圖案*/
  27. };

  28. uchar code hehe[] = {
  29. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  30. 0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x01,0x40,0x01,0xC0,0x01,0x00,0x00,0x00,0x00,
  31. 0xF0,0x0F,0x08,0x10,0x04,0x20,0x00,0x00,0x00,0x00,0xF0,0x3F,0x08,0x00,0x04,0x00,
  32. 0x04,0x00,0x04,0x00,0x08,0x00,0xF0,0x3F,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x20,
  33. 0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x00,0x00,0x00,0xF0,0x3F,0x08,0x00,0x04,0x00,
  34. 0x04,0x00,0x04,0x00,0x08,0x00,0xF0,0x3F,0x00,0x00,0x00,0x00,0x04,0x20,0x08,0x10,
  35. 0xF0,0x0F,0x00,0x00,0x00,0x00,0xC0,0x01,0x40,0x01,0xC0,0x01,0x00,0x00,0x00,0x00,
  36. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*哈哈o(n_n)o圖案*/
  37. };

  38. unsigned char code lbw[] = {

  39. 0x80,0x00,0x9F,0x10,0x90,0x10,0x90,0x08,0x90,0x04,0x9E,0x02,0x82,0x00,0xE2,0x7F,
  40. 0x82,0x02,0x9E,0x04,0x90,0x04,0x90,0x08,0x90,0x10,0x90,0x22,0x8A,0x41,0x84,0x00,


  41. 0x00,0x01,0x00,0x01,0x1E,0x3D,0xD2,0x03,0x12,0x0A,0x12,0x24,0x12,0x2B,0xDE,0x30,
  42. 0x12,0x00,0xD2,0x7F,0x12,0x09,0x12,0x09,0x9E,0x48,0x92,0x48,0x40,0x70,0x20,0x00,


  43. 0x80,0x08,0xE0,0x3F,0x0F,0x02,0xC9,0x1F,0x09,0x02,0xE9,0x3F,0x09,0x00,0xCF,0x2B,
  44. 0x89,0x48,0xE9,0x7F,0xC9,0x0A,0xA9,0x2C,0xCF,0x31,0x09,0x51,0x40,0x69,0x80,0x40,

  45. };
  46.                                                                                                                                                                                                                               
  47. /*****函數(shù)聲明*****/                                         
  48. void display1(void);
  49. void display2(void);
  50. void display3(void);
  51. void display4(void);

  52. /*****n(us)延時子程序*****/
  53. void DelayUs(uint N)
  54. {
  55. uint x;
  56. for(x=0; x<=N;x++);
  57. }

  58. /*****中斷服務(wù)程序*****/
  59. void intersvr0(void) interrupt 0 using 1
  60. {
  61. KY=~KY;      //每個搖動來回水銀開關(guān)會在擺幅兩端分別產(chǎn)生下降沿中斷,只提取其中一次(左右搖動才顯示)
  62. if(KY==0)
  63. {
  64.   num++;     //計(jì)算終中斷次數(shù)
  65.   switch(pic)      //選擇畫面
  66.   {
  67.    case 0:{display1();     DelayUs(100);}break;
  68.    case 1:{display2();}break;
  69.    case 2:{display3();}break;
  70.    case 3:{display4();}break;
  71.    default:{display1();}  
  72.   }
  73.     }
  74. }

  75. /*****顯示子程序1(漢字)*****/
  76. void display1(void)
  77. {
  78. uchar i;
  79. DelayUs(4200);
  80. for(i=0;i<56;i++)
  81. {
  82.      P0=~lbw[i*2];
  83.      P2=~lbw[i*2+1];
  84.      DelayUs(60);
  85.         P0 = 0XFF;
  86.         P2 = 0XFF;
  87. }
  88. }


  89. /*****顯示子程序2(LOVE)*****/
  90. void display2(void)
  91. {
  92. uchar i;
  93. DelayUs(4000);
  94. for(i=0;i<64;i++)
  95. {
  96.      P0=~love[i*2];
  97.      P2=~love[i*2+1];
  98.      DelayUs(120);
  99. }
  100. }

  101. /*****顯示子程序3(心形圖案)*****/
  102. void display3(void)
  103. {
  104. uchar i;
  105.   DelayUs(4000);
  106. for(i=0;i<64;i++)
  107. {
  108.      P0=~loveyou[i*2];
  109.      P2=~loveyou[i*2+1];
  110.      DelayUs(120);
  111. }
  112. }

  113. /*****顯示子程序4(哈哈o(n_n)o圖案)*****/
  114. void display4(void)
  115. {
  116. uchar i;
  117. DelayUs(4000);
  118. for(i=0;i<64;i++)
  119. {
  120.      P0=~hehe[i*2];
  121.      P2=~hehe[i*2+1];
  122.      DelayUs(120);
  123. }
  124. }

  125. /*****主函數(shù)*****/
  126. void main(void)
  127. {
  128. IT0=1;
  129. EX0=1;
  130. EA=1;      //開中斷,下降沿中斷
  131. KY=0;
  132. while(1)     //主程序中只檢測按鍵
  133. {
  134.   if(KEY==0)     //畫面切換鍵按下
  135.   {
  136.   DelayUs(10000);     //按鍵去抖
  137.   if(KEY==0);
  138.   pic++;
  139.         }
  140.   if(pic>3)pic=0;
  141. }
  142. }
復(fù)制代碼

所有資料51hei附件下載:
原理圖PCB.7z (3.26 MB, 下載次數(shù): 28)
程序:
6.搖搖棒 - 設(shè)計(jì).zip (36.2 KB, 下載次數(shù): 22)



作者: 羅斯德隆    時間: 2022-1-12 16:48
很經(jīng)典的東西,程序很好懂,做一個挺好玩的。




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