找回密码
 立即注册

QQ登录

只需一步,快速开始

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

四个8*8点阵上下左右移动单片机程序与Proteus仿真

[复制链接]
跳转到指定楼层
楼主
8*8点阵移动仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)





单片机源程序如下:
  1. /************************************************************
  2. 名称: 四个8*8点阵移动实验
  3. ************************************************************/
  4. #include<reg52.h>
  5. #define uchar unsigned char
  6. #define uint unsigned int      
  7. uchar i,j,k,a,b;
  8. char kk;
  9. uchar code tabwe[]={ //0~9的字模(每个数字高8点,宽5点,下面一点为高位,一个数字用5个字节表示)
  10. 0x7E,   0x91,   0x89,   0x85,   0x7E,//0
  11. 0x00,   0x82,   0xFF,   0x80,   0x00,//1
  12. 0x86,   0xC1,   0xA1,   0x91,   0x8E,//2
  13. 0x41,   0x89,   0x8D,   0x8B,   0x71,//3
  14. 0x38,   0x24,   0x22,   0xFF,   0x20,//4
  15. 0x4F,   0x89,   0x89,   0x89,   0x71,//5
  16. 0x7E,   0x89,   0x89,   0x89,   0x72,//6
  17. 0x01,   0x01,   0xF9,   0x05,   0x03,//7
  18. 0x76,   0x89,   0x89,   0x89,   0x76,//8
  19. 0x4E,   0x91,   0x91,   0x91,   0x7E, //9
  20. 0//空位
  21. };

  22. uchar table[]={        //显存8*4=32个字节,一个字节8位,四个8*8点阵的分辨率就是32*8
  23. 0,0,0,0,0,0,0,0,0,0,
  24. 0,0,0,0,0,0,0,0,0,0,
  25. 0,0,0,0,0,0,0,0,0,0,
  26. 0,0
  27. };
  28. void delay(uint ms)      //延时500us
  29. {      
  30.         uchar a,b;                                      
  31.         while(ms--)
  32.                 {
  33.                 for(b=71;b>0;b--)
  34.                 for(a=2;a>0;a--);
  35.                 }
  36. }
  37. void xh1(kk)//左移子程序
  38. {
  39.         for(k=0;k<32;k++)
  40.                 {
  41.                         a=kk+k-32;
  42.                         if(a>50||a<0){a=50;}
  43.                         table[k]=tabwe[a];
  44.                 }               
  45. }
  46. void xh2(kk)//右移子程序
  47. {
  48.         for(k=0;k<32;k++)
  49.                 {
  50.                         a=50-kk+k;
  51.                         if(a>50||a<0){a=50;}
  52.                         table[k]=tabwe[a];
  53.                 }               
  54. }

  55. void xh3(kk)//向下移进,向上移出
  56. {
  57.                 for(k=0;k<32;k++)
  58.                 {
  59.                 table[k]=(tabwe[k]>>kk);
  60.                 }
  61. }
  62. void xh4(kk)//向上移进,向下移出
  63. {
  64.                 for(k=0;k<32;k++)
  65.                 {
  66.                 table[k]=(tabwe[k]<<kk);
  67.                 }
  68. }


  69. void dsplay()
  70. {
  71. for(j=0;j<5;j++) //j是每幅图象显示的次数,j越小移动得越快;j越大移动得越慢。
  72.         {
  73.         for(i=0;i<16;i++)//一幅图象32个字节,因为分P1和P2口同时显示,所以只要16次。
  74.                 {
  75.                         P0=i;
  76.                         P1=table[i];
  77.                         P2=table[i+16];
  78.                         delay(2);        
  79.                 }
  80.         }
  81. }


  82. void main()
  83. {
  84.         while (1)
  85.         {
  86.                 for(kk=0;kk<82;kk++)//左移(从32位空屏,到0-9进入,再到全部移出共要32+50次)
  87.                 {        
  88.                         dsplay();
  89.                          xh1(kk);
  90.          }
  91.                 for(kk=0;kk<82;kk++)//右移(从32位空屏,到9-0进入,再到全部移出共要32+50次)
  92.                 {        
  93.                         dsplay();
  94.                          xh2(kk);
  95.          }
  96.                 for(kk=8;kk>=0;kk--)//向下移进
  97.                 {        
  98.                         dsplay();
  99.                          xh3(kk);
  100.          }
  101.                  for(kk=0;kk<8;kk++)//向下移出
  102.                 {        
  103.                         dsplay();
  104.                          xh4(kk);
  105. ……………………

  106. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
88点阵上下左右移动.rar (19.34 KB, 下载次数: 115)


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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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