久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4028|回復: 10
收起左側

關于單片機16x32點陣左右移動的程序問題

[復制鏈接]
ID:709561 發表于 2021-2-19 17:43 | 顯示全部樓層 |閱讀模式
50黑幣
最近自己在學習點陣,點陣顯示也可以顯示自己想要的,可是左右移動實在是搞得不明不白,參考了許多的網上資料,還是丈二的和尚摸不著頭腦,自己的知識水平還是欠缺,自己寫的程序還是有問題的,希望大神給予文獻資料幫助,不勝感激!!
MCU;STC12C5616AD晶振24.576MHZ,行列使用的是74HC595級聯,
51hei圖片20210219172439.jpg 16x32點陣數字行掃描列數據設置圖片.jpg

單片機源程序如下:
  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.   }
復制代碼

回復

使用道具 舉報

ID:592807 發表于 2021-2-20 13:55 | 顯示全部樓層
這東西要看硬件才知道怎么改軟件
回復

使用道具 舉報

ID:709561 發表于 2021-2-21 10:45 | 顯示全部樓層
黃youhui 發表于 2021-2-20 13:55
這東西要看硬件才知道怎么改軟件

行是兩個74HC595級聯,列是4個74HC595級聯,點陣是16x32的,行是陽極列是陰極,自己對程序還不是很理解無法寫出左右移動程序,望請大神給予幫助。。
回復

使用道具 舉報

ID:332444 發表于 2021-2-21 11:16 | 顯示全部樓層
程序位置不對引起的,上一半與下一半對調試看
回復

使用道具 舉報

ID:709561 發表于 2021-2-21 14:21 | 顯示全部樓層
xianfajushi 發表于 2021-2-21 11:16
程序位置不對引起的,上一半與下一半對調試看

按你說的已經嘗試過了,但還是不對出現了錯誤,還請大神給予幫助!!
回復

使用道具 舉報

ID:785191 發表于 2021-2-21 23:28 | 顯示全部樓層
1、程序中定義函數變量應該在第一行。2、你的點陣沒有消隱。(用數碼管消隱的方法)3、個人覺得學習點陣只是為了了解一下其工作原理,了解595的用法。4、如果你想實現左移右移有許多其它好用的外設(例如OLED)5、個人建議不要學51太長時間,學會定時器、中斷、串口通信、就行了,至于外設主要的是它的思想,程序上問題是自己的問題需要積累,個人建議買本C primier Plus,學著查著,慢慢就會了。之后就直接上手ARM內核的芯片(個人推薦STM32),你會對單片機有全新的理解。
回復

使用道具 舉報

ID:592807 發表于 2021-2-22 08:31 | 顯示全部樓層
1P1P 發表于 2021-2-21 10:45
行是兩個74HC595級聯,列是4個74HC595級聯,點陣是16x32的,行是陽極列是陰極,自己對程序還不是很理解無 ...

你定義一個二維數組記錄每一個每一個燈的狀態,根據燈的改變數組,然后再讀出數組給595賦值,這是最簡單有效的方法?赡苎訒r會比較大。
復雜點的方法就是,你左右移動也就是Y軸不變LED在X軸移動,這時候你Y軸的595可以變,然后計算你的X軸的595要移動幾個單位。
回復

使用道具 舉報

ID:592807 發表于 2021-2-22 09:25 | 顯示全部樓層
黃youhui 發表于 2021-2-22 08:31
你定義一個二維數組記錄每一個每一個燈的狀態,根據燈的改變數組,然后再讀出數組給595賦值,這是最簡單 ...

說錯了,Y軸不變X變
回復

使用道具 舉報

ID:390416 發表于 2021-2-22 17:12 | 顯示全部樓層
回復

使用道具 舉報

ID:390416 發表于 2021-2-22 17:19 | 顯示全部樓層
回復

使用道具 舉報

ID:839835 發表于 2021-2-23 09:46 | 顯示全部樓層
讓上一次的燈光等于要移動的燈光的數組就可以實現移動。比如lcd[i+1]=lcd[i]
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 四虎影院免费在线播放 | 日韩毛片播放 | 亚洲性视频网站 | 黄视频网站免费观看 | 久草网址| 99久久婷婷国产综合精品电影 | 麻豆精品国产91久久久久久 | 久久综合久 | 中文字幕第一页在线 | 久久久久中文字幕 | 亚洲欧洲日本国产 | 久久av资源网 | 午夜一区| 看av网 | 久久亚洲国产 | www日本在线播放 | 久久国产精品精品 | 99爱视频 | 亚洲日韩中文字幕一区 | 美日韩一区二区 | 久久久精品综合 | 久久久青草 | 91麻豆久久久 | 综合色播 | jav成人av免费播放 | 手机av免费在线 | 91在线电影 | 日韩精品一区二区三区视频播放 | www.黄色网| 久久精品国产亚洲一区二区 | 可以免费观看的av | 国产成人免费在线 | 久久夜视频 | 欧美精品成人一区二区三区四区 | 日韩一区二区在线观看 | 久久伊| 久久福利电影 | 日韩在线免费观看视频 | 久久精品播放 | 精品96久久久久久中文字幕无 | 中文字幕在线一区二区三区 |