为什么在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[]={0x00,0x00,0x3E,0x41,0x41,0x41,0x3E,0x00}; // 类 似 于 动态数码管的段选
u8 ledwei[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe}; // 类 似 于动态数码管的位选
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); } }
}
|