找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 461|回复: 3
收起左侧

单片机LED点阵程序看不明白了

[复制链接]
回帖奖励 15 黑币 回复本帖可获得 5 黑币奖励! 每人限 1 次
ID:1098459 发表于 2024-1-27 10:00 | 显示全部楼层 |阅读模式
如图的4个8*8拼成的16*16点阵,我想让这个点阵的箭头从左下角向左上角移动,但不知为什么,最上面一排LED会跟随着亮,求解答
  1. #include<reg51.h>

  2. sbit LE1=P3^6;
  3. sbit LE2=P3^7;

  4. typedef unsigned char uint8_t;
  5. typedef unsigned char bool;
  6. typedef unsigned short int uint16_t;
  7. typedef unsigned  int uint32_t;
  8. typedef unsigned long int uint64_t;

  9. uint64_t pattern[]={
  10. 0x7f000000,0x3f000000,0x1f000000,0x3f000000,
  11. 0x7f000000,0xfb000000,0x71000000,0x20000000
  12. };

  13. void delay(uint16_t n)
  14. {
  15.         while(n--);
  16. }

  17. int main (void)
  18. {
  19.         char Startpos,Endpos;
  20.         char abovesign;
  21.         uint8_t loop;
  22.         uint8_t times;
  23.         uint16_t dat;
  24.         while(1)
  25.         {
  26.                 for(abovesign=-1;abovesign<=22;abovesign++)
  27.         {
  28.                 Startpos=0x10-(uint8_t)abovesign;
  29.                 Endpos=Startpos+7;
  30.                 for(times=0;times<=50;times++)
  31.                 {
  32.                         for(loop=0x00;loop<=0x0f;loop++)
  33.                         {                                
  34.                                 
  35.                         if(loop>=Startpos&&loop<=Endpos)
  36.                                 {
  37.                                         dat=(pattern[loop-Startpos]>>abovesign)>>8;
  38.                                 }
  39.                         else
  40.                                 {
  41.                                         dat=0x0000;
  42.                                 }                                
  43.                                         P2&=0x00;
  44.                                        
  45.                                         P3&=0xf0;
  46.                                         delay(2);
  47.                                         P3|=loop;
  48.                                        
  49.                                        
  50.                                 
  51.                                        
  52.                                         P2&=0x00;
  53.                                        
  54.                                         LE1=1;                                
  55.                                         P2|=(uint8_t)(dat);
  56.                                         delay(3);
  57.                                         LE1=0;
  58.                                 delay(2);
  59.                                 
  60.                                         P2&=0x00;
  61.                                        
  62.                                         LE2=1;
  63.                                         P2|=(uint8_t)(dat>>8);
  64.                                         delay(3);
  65.                                         LE2=0;
  66.                                         delay(2);
  67.                                                                                                                
  68.                         }
  69.                 }
  70.                 delay(10);
  71.         }        
  72. }
  73.         return 0;
  74. }
复制代码

回复

使用道具 举报

ID:1064915 发表于 2024-1-28 08:46 | 显示全部楼层
abovesign=-1;时,
(uint8_t)abovesign是多少?
回复

使用道具 举报

ID:866313 发表于 2024-1-28 20:46 | 显示全部楼层
图片在哪里?硬件连线图麻烦补一个呗
回复

使用道具 举报

ID:1098459 发表于 2024-1-30 12:29 | 显示全部楼层
不好意思,忘贴硬件图了
屏幕截图 2024-01-27 095458.png
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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