找回密码
 立即注册

QQ登录

只需一步,快速开始

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

32路摇摇棒制作资料下载

[复制链接]
跳转到指定楼层
楼主
32路摇摇棒制作。


所有制作资料打包下载:
32灯摇摇棒资料.rar (7.83 MB, 下载次数: 143)

以下是部分源程序预览:
  1. /****************************************************************************************
  2. /*硬件制作:07电气工程 张国荣
  3. /*软件调试:07电气工程 付春平  
  4. /*描    述: 摇摇棒程序,通过滚珠开关检测周期,摇动时间自适应,图像始终保持在中间。开机后每摇晃10次切换下一组字模
  5. /* 按了一下按键后变成了手动切换,直到回到第一组字的时候再自动切换
  6. 如有问可直接加我QQ:77554971
  7. 技术交流群:120069344
  8. 套件出售
  9. 详细制作在里面了!
  10. 最后祝各位制作成功!学习进步!        
  11. /*****************************************************************************************/
  12. #include <STC11F60XE.h>
  13. /*********外部接口定义**********/
  14. #define uchar unsigned char
  15. #define uint unsigned int    //宏定义
  16. #define out P1        //数据输出端口
  17. sbit led1=P3^0;        //第1组LED
  18. sbit led2=P3^1;        //第2组LED
  19. sbit led3=P3^3;        //第3组LED
  20. sbit led4=P3^4;        //第4组LED
  21. sbit key1=P3^5;         //按键输入
  22. sbit p3_2=P3^2;
  23. uchar KY,num;      //KY作用在后面说明
  24. uchar BUFF;                                   //缓存
  25. /*********全局变量定义**********/
  26. unsigned long int TimeCount=0;
  27. unsigned int         DelayN=80,                //延时临时计数
  28.                                 DelayTime=80;        //每次延时的周期个数
  29. unsigned char key,keyy;               
  30. /**********************************************/
  31. void delay(unsigned char n);
  32. void DelayMs(void);
  33. /*******************************************/

  34. unsigned char code text0[]={


  35. 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,/*" ",0*/

  36. 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0xB7,0xBB,0xB7,0xBB,0xB3,0xBB,0xB4,0xBB,0xB5,0xBB,0xB7,0xBB,0xB7,0xBB,0xB7,0xBB,0x07,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,/*"自",1*/

  37. 0xBF,0xBF,0xBE,0xDF,0x39,0xE0,0xFF,0xDF,0xEF,0xBF,0xEF,0xBF,0x6D,0xB0,0x6D,0xB7,0x6D,0xB7,0x01,0xB7,0x6E,0xB7,0x6E,0xB7,0x6E,0xB0,0xEF,0xBF,0xEF,0xBF,0xFF,0xFF,/*"适",2*/

  38. 0xFF,0xBF,0xFF,0xC7,0x03,0xF8,0xBB,0xDF,0x7B,0xDF,0xFB,0xD0,0xEB,0xDB,0xDA,0xDF,0x39,0xDC,0x7B,0xCF,0xFB,0xD3,0xFB,0xDC,0x1B,0xDF,0xBB,0xDF,0xFF,0xDF,0xFF,0xFF,/*"应",3*/

  39. 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,/*" ",4*/

  40. 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,/*" ",5*/

  41. 0xEF,0xFB,0xEF,0xBB,0xEF,0x7D,0x00,0x80,0x6F,0xFF,0xAF,0xFD,0x75,0x05,0x8D,0xBD,0xB9,0xBD,0xA5,0xBD,0x3D,0x80,0x9E,0xBD,0xAE,0xBD,0xB6,0xBD,0xFF,0x05,0xFF,0xFF,/*"摇",6*/

  42. 0xEF,0xFB,0xEF,0xBB,0xEF,0x7D,0x00,0x80,0x6F,0xFF,0xAF,0xFD,0x75,0x05,0x8D,0xBD,0xB9,0xBD,0xA5,0xBD,0x3D,0x80,0x9E,0xBD,0xAE,0xBD,0xB6,0xBD,0xFF,0x05,0xFF,0xFF,/*"摇",7*/

  43. 0xEF,0xFC,0x2F,0xFF,0x00,0x00,0xAF,0xFF,0x6F,0xFD,0xBB,0xF5,0xAB,0xF6,0x2B,0xF5,0x8B,0xF5,0xA0,0x00,0x2B,0xF5,0xAB,0xF4,0xAB,0xF6,0xBB,0xF5,0xBF,0xFD,0xFF,0xFF,/*"棒",8*/

  44. 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,/*" ",9*/



  45. };

  46. unsigned char code text1[]={
  47. 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,/*" ",0*/

  48. 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,/*" ",1*/

  49. 0xF7,0xFD,0xF7,0xFE,0x76,0xFF,0x31,0x00,0x57,0xFF,0xE7,0x7C,0xFF,0xBF,0x01,0xCF,0x7D,0xF0,0x7D,0xFF,0x7D,0xFF,0x7D,0x80,0x01,0x7F,0xFF,0x7F,0xFF,0x0F,0xFF,0xFF,/*"祝",2*/

  50. 0x7F,0xFF,0xBF,0xFF,0x0F,0x80,0xD3,0xFF,0xBC,0xEF,0xDF,0xF3,0x67,0xFC,0xF0,0xDE,0xF5,0xBF,0x17,0xC0,0xF7,0xFF,0x77,0xFF,0xD7,0xFC,0xE3,0xE3,0xF7,0xF7,0xFF,0xFF,/*"你",3*/

  51. 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,/*" ",4*/

  52. 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,/*" ",5*/

  53. 0xFF,0xFF,0xBF,0x7F,0xBD,0xBF,0xBD,0xDF,0xBD,0xEF,0xBD,0xF7,0xBD,0xF9,0x01,0xFE,0xBD,0xFD,0xBD,0xFB,0xBD,0xF7,0xBD,0xEF,0xBD,0xCF,0xBD,0x9F,0xBF,0xDF,0xFF,0xFF,/*"天",6*/

  54. 0xFF,0xFF,0xBF,0x7F,0xBD,0xBF,0xBD,0xDF,0xBD,0xEF,0xBD,0xF7,0xBD,0xF9,0x01,0xFE,0xBD,0xFD,0xBD,0xFB,0xBD,0xF7,0xBD,0xEF,0xBD,0xCF,0xBD,0x9F,0xBF,0xDF,0xFF,0xFF,/*"天",7*/

  55. 0xBF,0xFF,0xBD,0xBF,0xBD,0xDF,0xBD,0xEF,0xBD,0xF3,0x01,0xFC,0xBD,0xFF,0xBD,0xFF,0xBD,0xFF,0xBD,0xFF,0x01,0x80,0xBD,0xFF,0xBD,0xFF,0xBD,0xFF,0xBD,0xFF,0xFF,0xFF,/*"开",8*/

  56. 0xFF,0xFB,0x7F,0xFC,0xFF,0xFF,0xFF,0xFF,0x0F,0xC0,0xFF,0xBF,0xFE,0xBF,0xFD,0xBF,0xE3,0xBF,0xF7,0xBF,0xFF,0xBF,0xBF,0x87,0x7F,0xFF,0xFF,0xF8,0xFF,0xFD,0xFF,0xFF,/*"心",9*/

  57. };
  58. unsigned char code text2[]={

  59. 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF9,0xFF,0xFF,0x9F,0xF9,0xFF,0xFF,0x9F,0xF9,0xFF,0xFF,0x9F,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x80,0xF9,0xFF,0xFF,0x9F,
  60. 0xF9,0xFF,0xFF,0x9F,0xF9,0xFF,0xFF,0x9F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x87,0xFF,0xFF,0xFF,0x01,0xFE,0xFF,
  61. 0x7F,0x00,0xF8,0xFF,0x3F,0x00,0xF0,0xFF,0x1F,0x00,0xE0,0xFF,0x0F,0x00,0xC0,0xFF,0x07,0x00,0x80,0xFF,0x03,0x00,0x00,0xFF,0x03,0x00,0x00,0xFF,0x03,0x00,0x00,0xFE,
  62. 0x03,0x00,0x00,0xFC,0x03,0x00,0x00,0xF8,0x07,0x00,0x00,0xF0,0x0F,0x00,0x00,0xE0,0x1F,0x00,0x00,0xE0,0x3F,0x00,0x00,0xC0,0x3F,0x00,0x00,0x80,0x1F,0x00,0x00,0xC0,
  63. 0x0F,0x00,0x00,0xE0,0x07,0x00,0x00,0xF0,0x03,0x00,0x00,0xF8,0x03,0x00,0x00,0xFC,0x03,0x00,0x00,0xFE,0x03,0x00,0x00,0xFF,0x07,0x00,0x80,0xFF,0x0F,0x00,0xC0,0xFF,
  64. 0x1F,0x00,0xE0,0xFF,0x3F,0x00,0xE0,0xFF,0xFF,0x00,0xF8,0xFF,0xFF,0x01,0xFC,0xFF,0xFF,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  65. 0x07,0x00,0x00,0xE0,0x07,0x00,0x00,0xC0,0x07,0x00,0x00,0xC0,0xFF,0xFF,0xFF,0xC7,0xFF,0xFF,0xFF,0xCF,0xFF,0xFF,0xFF,0xCF,0xFF,0xFF,0xFF,0xCF,0xFF,0xFF,0xFF,0xCF,
  66. 0xFF,0xFF,0xFF,0xCF,0xFF,0xFF,0xFF,0xCF,0xFF,0xFF,0xFF,0xCF,0xFF,0xFF,0xFF,0xC7,0x07,0x00,0x00,0xC0,0x07,0x00,0x00,0xC0,0x07,0x00,0x00,0xE0,0xFF,0xFF,0xFF,0xFF,/*"未命名文件",0*/


  67. };
  68. /***********n(us)延时子程序***************/
  69. void DelayUs(uint N)
  70. {
  71. uint x;
  72. for(x=0; x<=N;x++);
  73. }
  74. /******************************************/
  75. void main()
  76. {       
  77.         AUXR=0x80;       
  78.         CLK_DIV=1;       
  79.         EX0=1;        //开放外部中断0
  80.         IT0=1;        //中断0为边沿触发方式
  81.         IP=0x02;        //设置中断优先级
  82.         TMOD=0x02;        //定时器0方式2,8位重装载
  83.         TH0=0x80;        //设定定时器初值
  84.         TL0=0x80;                  
  85.         KY=0;
  86.         EA=1;        //开放中断
  87.         ET0=1;        //开放定时器0中断
  88.         TR0=1;        //启动定时器0,开始计时*/
  89.         key=0;        //初始化显示第一组文字
  90.         keyy=0;
  91.         P1M0=0x55;        //0101 0101        /P1.0  P1 .2 P1.4 P1.6推挽输出
  92.     P1M1=0xAA;

  93.         while(1){//等待中断
  94.           
  95.         if(key1==0){        //有键按下
  96.          DelayUs(50);
  97.          if(key1==0){                       
  98.                 key++;                                //更换下一幅图片               
  99.                 if(key>2) key=0;        //图片循环显示 根据显示的组数来定义 这里有9组 所以就要keyy>9
  100.                 while(key1==0);                //等待按键释放                       
  101.                 }
  102.                 }
  103.         if(num>10) //每中断10次切换
  104.                 {
  105.                 keyy++;
  106.                 num=0;
  107.                 }     
  108.         if(keyy>2)keyy=0;        //图片循环显示 根据显示的组数来定义 这里有9组 所以就要keyy>9
  109.         }       
  110. }
  111.    
  112. /*********文字显示子程序**********/

  113. void display_word(unsigned char code *text)
  114. {
  115.    unsigned        char i,j=2;                        //j为图片起始位置 3 为第3个开始是图片 如果要显示高时32的大字 也属于图片格式
  116.     DelayUs(6400);       
  117.        
  118.         for(i=0;i<64;i++)
  119.         {
  120.                
  121.         P3M0=0x00;                        //0000 0000        //P3.0推挽输出 P3 .1 P3.3 P3.4输入高阻
  122.             P3M1=0x1B;
  123.                 if((key>=j)||(keyy>=j))
  124.                 BUFF=(*(text+i*4+3));
  125.                 else                        
  126.                 BUFF=(*(text+128+i*2+1));
  127.                 led4=0;
  128.                 P1=~BUFF>>1;
  129.                 P3M0=0x10;                        //0001 0000        //P3.4推挽输出 P3 .0 P3.3 P3.1输入高阻
  130.             P3M1=0x0B;          //0000 1011
  131.                  delay(1);
  132.                 P3M0=0x00;                        //0000 0000        //P3.0推挽输出 P3 .1 P3.3 P3.4输入高阻
  133.             P3M1=0x1B;                         //0001 1011
  134.                 led4=1;
  135.              P1=BUFF;             //01010101  1357
  136.                 P3M0=0x10;                        //0001 0000        //P3.4推挽输出 P3 .0 P3.3 P3.1输入高阻
  137.             P3M1=0x0B;          //0000 1011
  138.                  delay(1);
  139.                 P3M0=0x00;                        //0000 0000        //P3.0推挽输出 P3 .1 P3.3 P3.4输入高阻
  140.             P3M1=0x1B;                         //0001 1011
  141.                 if((key>=j)||(keyy>=j))
  142.                 BUFF=(*(text+i*4+2));
  143.                 else
  144.                 BUFF=(*(text+128+i*2));
  145.                 led3=0;
  146.                 P1=~BUFF>>1;
  147.                 P3M0=0x08;                        //0000 1000        //P3.3推挽输出 P3 .0 P3.1 P3.4输入高阻
  148.             P3M1=0x13;          //0001 0011
  149.                 delay(1);
  150.                 P3M0=0x00;                        //0000 0000        //P3.0推挽输出 P3 .1 P3.3 P3.4输入高阻
  151.             P3M1=0x1B;                         //0001 1011
  152.                 led3=1;
  153.              P1=BUFF;             //01010101  1357
  154.                 P3M0=0x08;                        //0000 1000        //P3.3推挽输出 P3 .0 P3.1 P3.4输入高阻
  155.             P3M1=0x13;          //0001 0011
  156.                  delay(1);
  157.                 P3M0=0x00;                        //0000 0000        //P3.0推挽输出 P3 .1 P3.3 P3.4输入高阻
  158.             P3M1=0x1B;
  159.                 if((key>=j)||(keyy>=j))
  160.                 BUFF=(*(text+i*4+1));
  161.                 else
  162.                 BUFF=(*(text+i*2+1));
  163.                 led2=0;
  164.             P1=~BUFF>>1;
  165.                 P3M0=0x02;                        //0000 0010        //P3.1推挽输出 P3 .0 P3.3 P3.4输入高阻
  166.             P3M1=0x19;                        //0001 1001
  167.                 delay(1);
  168.                 P3M0=0x00;                        //0000 0000        //P3.0推挽输出 P3 .1 P3.3 P3.4输入高阻
  169.             P3M1=0x1B;                         //0001 1011
  170.                 led2=1;      
  171.              P1=BUFF;            //01010101  1357
  172.                 P3M0=0x02;                        //0000 0010        //P3.1推挽输出 P3 .0 P3.3 P3.4输入高阻
  173.             P3M1=0x19;                        //0001 1001
  174.                  delay(1);
  175.                 P3M0=0x00;                        //0000 0000        //P3.0推挽输出 P3 .1 P3.3 P3.4输入高阻
  176.             P3M1=0x1B;                         //0001
  177.                 if((key>=j)||(keyy>=j))
  178.                 BUFF=(*(text+i*4));
  179.                 else
  180.                 BUFF=(*(text+i*2));
  181.                 led1=0;
  182.                 P1=~BUFF>>1;
  183.                 P3M0=0x01;                        //0000 0001        //P3.0推挽输出 P3 .1 P3.3 P3.4输入高阻
  184.             P3M1=0x1A;                         //0001 1010
  185.                 delay(1);
  186.             P3M0=0x00;                        //0000 0000        //P3.0推挽输出 P3 .1 P3.3 P3.4输入高阻
  187.             P3M1=0x1B;                         //0001 1011
  188.                 led1=1;                      
  189.              P1=BUFF;            //01010101  1357
  190.                 P3M0=0x01;                        //0000 0001        //P3.0推挽输出 P3 .1 P3.3 P3.4输入高阻
  191.             P3M1=0x1A;                         //0001 1010
  192.                  delay(1);

  193. } }
  194. /*********显示内容选择子程序**********/
  195. void display(unsigned char t)
  196. {        keyy=0;
  197.         switch (t){                //通过按键选择显示内容
  198.                 case 0:        {display_word(text0);}break;
  199.                 case 1:        {display_word(text1);}break;
  200.                 case 2:        {display_word(text2);}break;
  201. //                case 3:        {display_word(text3);}break;
  202. //                case 4:        {display_word(text4);}break;
  203. //                case 5:        {display_word(text5);}break;
  204. //                case 6:        {display_word(text6);}break;
  205. //                case 7:        {display_word(text7);}break;
  206.         //        case 8:        {display_word(text8);}break;               
  207.         //        case 9:        {display_word(text9);}break;
  208.         //        case 10:{display_word(text10);}break;
  209.                 //default:{display_word(text1);}
  210.                
  211.                
  212.                 }}
  213. /*****************************************/
  214. void display1(unsigned char y)
  215. {
  216.         switch (y){                //通过按键选择显示内容
  217.                 case 0:        {display_word(text0);}break;
  218.                 case 1:        {display_word(text1);}break;
  219.                 case 2:        {display_word(text2);}break;
  220. //                case 3:        {display_word(text3);}break;
  221. //                case 4:        {display_word(text4);}break;
  222. //                case 5:        {display_word(text5);}break;
  223. //                case 6:        {display_word(text6);}break;
  224. //                case 7:        {display_word(text7);}break;
  225.         //        case 8:        {display_word(text8);}break;
  226.         //        case 9:        {display_word(text9);}break;
  227.         //        case 10:{display_word(text10);}break;
  228.                 }
  229.                 }
  230. /***************************************/
  231. /*********延时子程序**********/
  232. void delay(unsigned char n)
  233. {
  234.         for(;n>0;n--){
  235.                 DelayN=DelayTime;
  236.                 while (DelayN);
  237.         }
  238. }
  239. /*********中断子程序**********/
  240. void int0() interrupt 0        //使用外部中断0
  241. {
  242. KY=~KY;
  243. if(KY==0)
  244. {                       
  245.         DelayTime=TimeCount/1580;       
  246.         TimeCount=0;        //延时周期计数清零
  247.         if(key==0)
  248.         {
  249.          num++;
  250.          display1(keyy);        //根据按键选择循环显示文字
  251.         }
  252.         else
  253.         {
  254.         display(key);        //根据按键选择循环显示文字
  255.         }
  256. }
  257. }
  258. void timer0() interrupt 1                //定时器0中断子程序
  259. {
  260.         TimeCount++;
  261.         if (DelayN!=0)
  262.         DelayN--;
  263. }
复制代码


评分

参与人数 2黑币 +58 收起 理由
雪落有声 + 8 看了几个,就这个资料全
admin + 50 共享资料的积分奖励!

查看全部评分

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

使用道具 举报

沙发
ID:86389 发表于 2015-7-31 14:46 | 只看该作者
好东西,下来看看
回复

使用道具 举报

板凳
ID:153428 发表于 2016-12-13 19:23 | 只看该作者
谢谢楼主的分享,正需要,谢谢
回复

使用道具 举报

地板
ID:421308 发表于 2019-8-7 18:14 | 只看该作者
资料很全,很好
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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