找回密码
 立即注册

QQ登录

只需一步,快速开始

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

关于单片机16x32点阵左右移动的程序问题

[复制链接]
跳转到指定楼层
楼主
50黑币
最近自己在学习点阵,点阵显示也可以显示自己想要的,可是左右移动实在是搞得不明不白,参考了许多的网上资料,还是丈二的和尚摸不着头脑,自己的知识水平还是欠缺,自己写的程序还是有问题的,希望大神给予文献资料帮助,不胜感激!!!
MCU;STC12C5616AD晶振24.576MHZ,行列使用的是74HC595级联,


单片机源程序如下:
  1. #include<STC12C5630AD.H>
  2. #include<intrins.h>


  3. #define uchar unsigned char
  4. #define uint  unsigned int
  5.         
  6. #define  SP   5 //移动速度,数字越小越快,数字越大越慢

  7. sbit HSER=P1^4;     //14数据
  8. sbit HSCK=P1^3;     //12锁存                //行
  9. sbit HRCK=P1^2;     //11时钟

  10. sbit LSER=P1^7;     //14数据
  11. sbit LSCK=P1^6;     //12锁存                        //列
  12. sbit LRCK=P1^5;     //11时钟

  13. uchar code tah[]={

  14. 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  15. 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00

  16. };
  17. uchar code tal[]={
  18. 0xFF,0xFF,0xFF,0xE7,0xDB,0xBD,0xBD,0xBD,0xBD,0xBD,0xBD,0xBD,0xDB,0xE7,0xFF,0xFF,/*"0",0*/

  19. 0xFF,0xFF,0xFF,0xF7,0xF1,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0xC1,0xFF,0xFF,/*"1",1*/

  20. 0xFF,0xFF,0xFF,0xC3,0xBD,0xBD,0xBD,0xDF,0xDF,0xEF,0xF7,0xFB,0xBD,0x81,0xFF,0xFF,/*"2",2*/

  21. 0xFF,0xFF,0xFF,0xC3,0xBD,0xBD,0xDF,0xE7,0xDF,0xBF,0xBF,0xBD,0xDD,0xE3,0xFF,0xFF,/*"3",3*/

  22. 0xFF,0xFF,0xFF,0xDF,0xCF,0xD7,0xDB,0xDB,0xDD,0xDD,0x81,0xDF,0xDF,0x87,0xFF,0xFF,/*"4",4*/

  23. 0xFF,0xFF,0xFF,0x81,0xFD,0xFD,0xFD,0xE5,0xD9,0xBF,0xBF,0xBD,0xDD,0xE3,0xFF,0xFF,/*"5",5*/

  24. 0xFF,0xFF,0xFF,0xC7,0xDB,0xFD,0xFD,0xE5,0xD9,0xBD,0xBD,0xBD,0xDB,0xE7,0xFF,0xFF,/*"6",6*/

  25. 0xFF,0xFF,0xFF,0x81,0xDD,0xDD,0xEF,0xEF,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0xFF,0xFF,/*"7",7*/

  26. 0xFF,0xFF,0xFF,0xC3,0xBD,0xBD,0xBD,0xDB,0xE7,0xDB,0xBD,0xBD,0xBD,0xC3,0xFF,0xFF,/*"8",8*/

  27. 0xFF,0xFF,0xFF,0xE7,0xDB,0xBD,0xBD,0xBD,0x9B,0xA7,0xBF,0xBF,0xDB,0xE3,0xFF,0xFF,/*"9",9*/

  28. 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  29. 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  30. };
  31. void H959(uchar num,uchar num1)        //行
  32. {
  33.         uchar i,k;
  34.         for(i=0;i<8;i++)
  35.         {
  36.                 HSER=num&0x80;
  37.                 num<<=1;
  38.         _nop_();
  39.                 HRCK=0;
  40.         _nop_();
  41.                 HRCK=1;
  42.         HRCK=0;
  43.         }
  44.     for(k=0;k<8;k++)
  45.         {
  46.                 HSER=num1&0x80;
  47.                 num1<<=1;
  48.         _nop_();
  49.                 HRCK=0;
  50.         _nop_();
  51.                 HRCK=1;
  52.         HRCK=0;
  53.         }
  54.     _nop_();
  55.         HSCK=0;
  56.     _nop_();
  57.         HSCK=1;
  58.     HSCK=0;
  59. }
  60. void L959(uchar num,uchar num1,uchar num2,uchar num3)        //列
  61. {
  62.         uchar i,k,j,n;
  63.         for(i=0;i<8;i++)
  64.         {
  65.                 LSER=num&0x80;
  66.                 num<<=1;
  67.         _nop_();
  68.                 LRCK=0;
  69.         _nop_();
  70.                 LRCK=1;
  71.         LRCK=0;
  72.         }
  73.     for(k=0;k<8;k++)
  74.         {
  75.                 LSER=num1&0x80;
  76.                 num1<<=1;
  77.         _nop_();
  78.                 LRCK=0;
  79.         _nop_();
  80.                 LRCK=1;
  81.         LRCK=0;
  82.         }
  83.     for(j=0;j<8;j++)
  84.         {
  85.                 LSER=num2&0x80;
  86.                 num2<<=1;
  87.         _nop_();
  88.                 LRCK=0;
  89.         _nop_();
  90.                 LRCK=1;
  91.         LRCK=0;
  92.         }
  93.     for(n=0;n<8;n++)
  94.         {
  95.                 LSER=num3&0x80;
  96.                 num3<<=1;
  97.         _nop_();
  98.                 LRCK=0;
  99.         _nop_();
  100.                 LRCK=1;
  101.         LRCK=0;
  102.         }
  103.     _nop_();
  104.         LSCK=0;
  105.     _nop_();
  106.         LSCK=1;
  107.     LSCK=0;
  108. }
  109. void delay1ms(void)   //误差 0us
  110. {
  111.     unsigned char a,b;
  112.     for(b=195;b>0;b--)
  113.         for(a=30;a>0;a--);
  114. }
  115. void main()   
  116. {
  117.     HRCK=0;LRCK=0;

  118.         while(1)
  119.         {
  120.         uchar k,j,i,n;
  121.         for(j=0;j<96;j++)
  122.         {
  123.             for(n=0;n<SP;n++)
  124.             {
  125.         for(k=0;k<16;k++)
  126.         {
  127.             i=j+k;
  128.             L959(tal[i+48],tal[i+32],tal[i+16],tal[i]);
  129.            delay1ms();
  130.             H959(tah[k+8],tah[k]);
  131.         }    }
  132.     }
  133.   }
复制代码

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

使用道具 举报

沙发
ID:709561 发表于 2021-2-21 10:45 | 显示全部楼层
黄youhui 发表于 2021-2-20 13:55
这东西要看硬件才知道怎么改软件

行是两个74HC595级联,列是4个74HC595级联,点阵是16x32的,行是阳极列是阴极,自己对程序还不是很理解无法写出左右移动程序,望请大神给予帮助!!!
回复

使用道具 举报

板凳
ID:709561 发表于 2021-2-21 14:21 | 显示全部楼层
xianfajushi 发表于 2021-2-21 11:16
程序位置不对引起的,上一半与下一半对调试看

按你说的已经尝试过了,但还是不对出现了错误,还请大神给予帮助!!!
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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