设为首页收藏本站淘宝杂货铺

从F到0 - From F to 0

 找回密码
 注册已关闭
搜索
查看: 1630|回复: 3
收起左侧

6灯迷你摇摇棒 闪字棒制作 采用片内Eeprom切换图像 每次上电会有不同图像产生。

[复制链接]
发表于 2017-6-28 14:00:25 | 显示全部楼层 |阅读模式

  1. /*
  2. 6灯迷你摇摇棒 闪字棒制作 采用片内Eeprom切换图像 每次上电会有不同图像产生。
  3. P3.0~P3.5分别连接6个LED 电阻 与VCC即可,片内存储有10组图像,采用片内Eeprom切换图像,每次上电会有不同图像产生。
  4. 电阻根据供电电压决定,可以不接,最好接上。
  5. */
  6. #include<reg52.h>
  7. #define uchar unsigned char
  8. #define EN_EPROM 0x83;  //使能EEPROM
  9. #define S_MODE  0x00;  //待机模式
  10. #define R_MODE  0x01;  //读模式
  11. #define W_MODE  0x02;  //写模式
  12. #define F_MODE  0x03;  //擦除模式
  13. sfr IAP_DATA  =  0xC2;
  14. sfr IAP_ADDRH =  0xC3;
  15. sfr IAP_ADDRL =  0xC4;
  16. sfr IAP_CMD   =  0xC5;
  17. sfr IAP_TRIG  =  0xC6;
  18. sfr IAP_CONTR =  0xC7;
  19. void init();
  20. uchar num=0,m=0;
  21. uchar read_dat(uchar addr_h,uchar addr_l);
  22. void erase_dat(uchar addr_h,uchar addr_l);
  23. void write_dat(uchar addr_h,uchar addr_l,uchar w_dat);
  24. unsigned char code tab[10][32]={
  25. {
  26.   0xe7,0xc3,0xc1,0xe0,0xc1,0xc3,0xe7,0xff,
  27.   0xff,0xff,0xff,0xe7,0xc3,0xc1,0xe0,0xc1,
  28.   0xc3,0xe7,0xff,0xff,0xff,0xff,0xe7,0xc3,
  29.   0xc1,0xe0,0xc1,0xc3,0xe7,0xff,0xff,0xff   //心
  30. },
  31. {
  32.   0xff,0xff,0xde,0xc0,0xde,0xff,0xff,0xff,
  33.   0xff,0xff,0xff,0xe7,0xc3,0xc1,0xe0,0xc1,
  34.   0xc3,0xe7,0xff,0xff,0xff,0xff,0xff,0xc1,
  35.   0xfe,0xfe,0xfe,0xfe,0xc1,0xff,0xff,0xff  //I LOVE U
  36. },
  37. {
  38.    0xde,0xed,0xf3,0xf3,0xed,0xde,0xff,0xff,
  39.   0xff,0xff,0xff,0xde,0xed,0xf3,0xf3,0xed,
  40.   0xde,0xff,0xff,0xff,0xff,0xff,0xff,0xde,
  41.   0xed,0xf3,0xf3,0xed,0xde,0xff,0xff,0xff  //xxx
  42. },
  43. {
  44.   0xfb,0xfd,0xd6,0xe8,0xd6,0xfd,0xfb,0xff,
  45.   0xff,0xff,0xff,0xfb,0xfd,0xd6,0xe8,0xd6,
  46.   0xfd,0xfb,0xff,0xff,0xff,0xff,0xfb,0xfd,
  47.   0xd6,0xe8,0xd6,0xfd,0xfb,0xff,0xff,0xff   //花
  48. },
  49. {
  50.    0xea,0xd5,0xea,0xd5,0xea,0xd5,0xea,0xd5,
  51.   0xea,0xd5,0xea,0xd5,0xea,0xd5,0xea,0xd5,
  52.   0xea,0xd5,0xea,0xd5,0xea,0xd5,0xea,0xd5,
  53.   0xea,0xd5,0xea,0xd5,0xea,0xd5,0xea,0xd5  //格子
  54. },

  55. {
  56.    0xfa,0xfd,0xfa,0xff,0xef,0xd7,0xef,0xff,
  57.   0xfa,0xfd,0xfa,0xff,0xef,0xd7,0xef,0xff,
  58.   0xfa,0xfd,0xfa,0xff,0xef,0xd7,0xef,0xff,
  59.   0xfa,0xfd,0xfa,0xff,0xef,0xd7,0xef,0xff  //伪格子
  60. },

  61. {
  62.   0xf0,0xed,0xdd,0xed,0xf0,0xff,0xff,0xdf,
  63.   0xdf,0xc0,0xdf,0xdf,0xff,0xff,0xc1,0xfe,
  64.   0xfe,0xfe,0xc1,0xff,0xff,0xc1,0xfe,0xf1,
  65.   0xfe,0xc1,0xff,0xff,0xe1,0xde,0xde,0xe1    //ATUWO
  66. },

  67. {
  68.   0xc0,0xfb,0xfb,0xfb,0xc0,0xff,0xff,0xff,
  69.   0xff,0xff,0xde,0xed,0xf3,0xf3,0xed,0xde,
  70.   0xff,0xff,0xff,0xff,0xff,0xff,0xcf,0xf7,
  71.   0xf8,0xf7,0xcf,0xff,0xff,0xff,0xff,0xff   //HXY
  72. },

  73. {
  74.   0xc0,0xde,0xd2,0xda,0xda,0xc2,0xfe,0xc0,
  75.   0xdf,0xd0,0xd6,0xd6,0xd2,0xde,0xc0,0xff,
  76.   0xc0,0xde,0xd2,0xda,0xda,0xc2,0xfe,0xc0,
  77.   0xdf,0xd0,0xd6,0xd6,0xd2,0xde,0xc0,0xff
  78. },

  79. {
  80.   0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xfd,0xfb,
  81.   0xf7,0xef,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,
  82.   0xfd,0xfb,0xf7,0xef,0xdf,0xef,0xf7,0xfb,
  83.   0xfd,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xff
  84. },
  85. };                                      
  86. void delay(uchar xms)
  87. {
  88. char i,j;
  89. for(i=0;i<xms;i++)
  90. for(j=0;j<50;j++);
  91. }
  92. void main()
  93. {
  94. init();
  95. num=read_dat(0x00,0x01);
  96. ++num;
  97. if(num>=11)
  98. {
  99.   num=1;
  100. };
  101. erase_dat(0x00,0x01);
  102. write_dat(0x00,0x01,num);
  103. while(1)
  104. {
  105.   uchar i=0;
  106.   
  107.   for(i=0;i<32;i++)
  108.   {
  109.    P3=tab[num-1][i];
  110.    delay(100);
  111.   }   
  112. }
  113. }

  114. void init()
  115. {
  116. IAP_CONTR = EN_EPROM;  //把第7位置1允许EEPROM可以读写
  117. IAP_CMD  = S_MODE;  //待机模式无ISP操作
  118. IAP_ADDRH = 0x00;
  119. IAP_ADDRL = 0x00;
  120. }
  121. uchar read_dat(uchar addr_h,uchar addr_l)
  122. {
  123. uchar E_dat = 0x00;
  124. IAP_CMD  = R_MODE;  //模式选择为读EEPROM
  125. IAP_ADDRH = addr_h;
  126. IAP_ADDRL = addr_l;
  127. IAP_TRIG = 0x5A;  //使命令有效
  128. IAP_TRIG = 0xA5;  //使命令有效
  129. E_dat  = IAP_DATA;
  130. return E_dat;
  131. }
  132. void write_dat(uchar addr_h,uchar addr_l,uchar w_dat)
  133. {
  134. IAP_CMD  = W_MODE;  //模式选择为写EEPROM
  135. IAP_ADDRH = addr_h;
  136. IAP_ADDRL = addr_l;
  137. IAP_DATA = w_dat;
  138. IAP_TRIG = 0x5A;  //使命令有效
  139. IAP_TRIG = 0xA5;  //使命令有效
  140. }
  141. void erase_dat(uchar addr_h,uchar addr_l)
  142. {
  143. IAP_CMD  = F_MODE;  //模式选择为擦除EEPROM
  144. IAP_ADDRH = addr_h;
  145. IAP_ADDRL = addr_l;
  146. IAP_TRIG = 0x5A;  //使命令有效
  147. IAP_TRIG = 0xA5;  //使命令有效
  148. }
复制代码

发表于 2017-6-30 08:18:27 | 显示全部楼层
呵呵,这个不错
发表于 2017-6-30 08:18:36 | 显示全部楼层
呵呵,这个不错
发表于 2018-4-10 10:43:48 | 显示全部楼层
图形那啥转换的
您需要登录后才可以回帖 登录 | 注册已关闭

本版积分规则

QQ|手机版|Archiver|从F到0 ( 蒙ICP备17002595号-1 )
蒙公网安备15010402000325号

腾讯云安全认证

GMT+8, 2024-4-27 09:07 , Processed in 0.911052 second(s), 17 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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