找回密码
 立即注册

QQ登录

只需一步,快速开始

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

基于51单片机的摇摇棒制作 原理图PCB文件程序

[复制链接]
跳转到指定楼层
楼主
当时做着玩,现在分享出来给大家


单片机源程序如下:
  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为按键次数;num为中断次数

  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. /*****函数声明*****/                                         
  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. /*****中断服务程序*****/
  59. void intersvr0(void) interrupt 0 using 1
  60. {
  61. KY=~KY;      //每个摇动来回水银开关会在摆幅两端分别产生下降沿中断,只提取其中一次(左右摇动才显示)
  62. if(KY==0)
  63. {
  64.   num++;     //计算终中断次数
  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. /*****主函数*****/
  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. }
复制代码

所有资料51hei附件下载:
原理图PCB.7z (3.26 MB, 下载次数: 21)
程序:
6.摇摇棒 - 设计.zip (36.2 KB, 下载次数: 15)


评分

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

查看全部评分

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

使用道具 举报

沙发
ID:53621 发表于 2022-1-12 16:48 | 只看该作者
很经典的东西,程序很好懂,做一个挺好玩的。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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