• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

单片机LED点阵显示程序问题,C语言移位不理解

2781cf0682fa7ffa 2020-08-04 浏览量:557
为什么在LED点阵显示的时候里面的 通过 595 发送 2 个字节的数据 的函数中
SER = dat >> 7; //从最高位开始发送 
dat <<= 1;
一位一位的给dat了那单片机是怎么得到的,
还有就是显示的时候怎么一直用不到段选的数组
求大佬帮忙看看,谢谢!谢谢!

#include "reg51.h"
#include "intrins.h"
typedef unsigned int u16;
typedef unsigned char u8;
sbit SRCLK=P3^6; sbit RCLK=P3^5; sbit SER=P3^4;

u8 ledduan[]={0x000x000x3E0x410x410x410x3E0x00}; // 类 似 于 动态数码管的段选 
u8 ledwei[]={0x7f0xbf0xdf0xef0xf70xfb0xfd0xfe}; // 类 似 于动态数码管的位选
void Hc595SendByte(u8 dat)
{ u8 a;
  SRCLK = 1; RCLK = 1;
for(a=0;a<8;a++) //发送 8 位数 
{ SER = dat >> 7;
dat <<= 1;
SRCLK = 0; //发送时序
_nop_();
_nop_(); SRCLK = 1;


RCLK = 0;
_nop_(); _nop_(); RCLK = 1;
}void main() { u8 i=0;
while(1) { for(i=0;i<8;i++) { Hc595SendByte(ledwei); LED1(ledwei); delay(10); } }
}

0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 你贴出来的代码只是整个显示驱动代码中的一部分,而且还有很多语法错误和逻辑错误,核对后再来提问。

    595是串入并出的移位寄存器芯片,驱动点阵时,先使用595推出段码,再用IO选择段码所在的行位,延时后,关闭行位,再用595推出下一个段码,再用IO选择新行,以此类推。

    • 发布于 2020-08-05
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:2
  • 你这个程序是复制过来的吗 

    数组格式错误 肯定没法编译

    dat位移就是选择你传入的数组位置

    • 发布于2020-08-05
    • 举报
    • 评论 0
    • 0
    • 0

  • 它这个dat有可能用的寄存器的地址,实现的移位操作
    • 发布于2020-08-31
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

单片机LED点阵显示程序问题,C语言移位不理解