显示原理:
类似矩阵键盘,逐行or逐列扫描
74HC595是串行 寄存器 感觉就是三转八寄存器
并行:同时输出;串行:一位一位输出
先配置74HC595,重新进行位声明
sbit RCK=P3^5; //RCLK
sbit SCK=P3^6; //SRCLK
sbit SER=P3^4; //SER
显示实心爱心图形:
#include <REGX52.H>
#include "Delay.h"sbit RCK=P3^5; //RCLK
sbit SCK=P3^6; //SRCLK
sbit SER=P3^4; //SER
void _74HC595_WriteByte(unsigned char Byte)
{unsigned char i;for(i=0;i<8;i++){SER=Byte&(0x80>>i);//要取第八位的数,那么如果Byte也是0x80 & 0x80的话,相当于1&1=1,那么Byte就可以取出第八位,其他为0,相当于1000 0000或者0000 0000//SER(一位数据)无论给什么数据,非零即一,所以可以直接给赋值八位的数据,赋值隐性转换为逻辑值了SCK=1;SCK=0;}//放到移位寄存器RCK=1;RCK=0;//P2=DPL;新板子的可以在子函数里面的RCK=0;下面加一句P2=DPL;就可以使用LED测试595了 或者 没有led灯的 可以再主函数main中加入P0=0x7F
}
void MatrixLED_ShowColumn(unsigned char Col,Data)
{_74HC595_WriteByte(Data);P0=~(0x80>>Col);//~是因为给0选中,给1不选中Delay(1);P0=0xFF;//这里清零是ff主要是共阳二极管的原因
}
void main()
{SCK=0;RCK=0;while(1){MatrixLED_ShowColumn(0,0x38);MatrixLED_ShowColumn(1,0x7C);MatrixLED_ShowColumn(2,0xFE);MatrixLED_ShowColumn(3,0x7F);MatrixLED_ShowColumn(4,0x7F);MatrixLED_ShowColumn(5,0xFE);MatrixLED_ShowColumn(6,0x7C);MatrixLED_ShowColumn(7,0x38);}}
动画:
#include <REGX52.H>
#include "Delay.h"
#include "MatrixLED.h"unsigned char code Animation[]={
0x00,0x18,0x3C,0x1E,0x1E,0x3C,0x18,0x00,
0x38,0x7C,0x7E,0x3F,0x3F,0x7E,0x7C,0x38,
0x00,0x18,0x3C,0x1E,0x1E,0x3C,0x18,0x00,
0x38,0x7C,0x7E,0x3F,0x3F,0x7E,0x7C,0x38,
};void main()
{unsigned int i,offset=0,count=0;MatrixLED_Init();while(1){for(i=0;i<8;i++){MatrixLED_ShowColumn(i,Animation[(i+offset)%32]);//animation[(i+offset)%32]可以循环播放}count++;if(count>50){count=0;offset+=8;//一帧一帧的话+=8,滚动++
// if(offset>24)//32-8
// {
// break;
// }}}
}