首先16*16的矩阵在Protues中是没有的,我们需要自行添加:https://pan.baidu.com/s/1I7QFZ-jSHMM-LUHTZnbTqA 提取码 :wmxq

下载解压后,找到你的默认安装Protues目录,将文件夹里面的内容对应放在你的安装目录下面。

然后打开Protues,在元件查找栏中输入MATRIX-16X16 ,就可以找到,选择一个颜色即可。

main.c代码如下:

#include "reg51.h"			 //此文件中定义了单片机的一些特殊功能寄存器
#include "intrins.h"

typedef unsigned int u16;	  //对数据类型进行声明定义
typedef unsigned char u8;

//--定义使用的IO口--//
sbit SRCLK=P3^6;
sbit RCLK=P3^5;
sbit SER=P3^4;


/*******************************************************************************
* 函 数 名         : Hc595SendByte(u8 dat1,u8 dat2,u8 dat3,u8 dat4)
* 函数功能		   : 通过595发送四个字节的数据
* 输    入         : dat1:第4个595输出数值
*                  * dat2: 第5个595输出数值
*                  * dat3:第2个595输出数值
*                  * dat4:第1个595输出数值
* 输    出         : 无
*******************************************************************************/
void Hc595SendByte(u8 dat1,u8 dat2,u8 dat3,u8 dat4)
{
	u8 a;

	SRCLK = 1;
	RCLK = 1;

	for(a=0;a<8;a++)		 //发送8位数
	{
		SER = dat1 >> 7;		 //从最高位开始发送
		dat1 <<= 1;

		SRCLK = 0;			 //发送时序
		_nop_();
		_nop_();
		SRCLK = 1;	
	}

	for(a=0;a<8;a++)		 //发送8位数
	{
		SER = dat2 >> 7;		 //从最高位开始发送
		dat2 <<= 1;

		SRCLK = 0;			 //发送时序
		_nop_();
		_nop_();
		SRCLK = 1;	
	}

	for(a=0;a<8;a++)		 //发送8位数
	{
		SER = dat3 >> 7;		 //从最高位开始发送
		dat3 <<= 1;

		SRCLK = 0;			 //发送时序
		_nop_();
		_nop_();
		SRCLK = 1;	
	}

	for(a=0;a<8;a++)		 //发送8位数
	{
		SER = dat4 >> 7;		 //从最高位开始发送
		dat4 <<= 1;

		SRCLK = 0;			 //发送时序
		_nop_();
		_nop_();
		SRCLK = 1;	
	}

	RCLK = 0;
	_nop_();
	_nop_();
	RCLK = 1;
}


/*******************************************************************************
* 函 数 名       : main
* 函数功能		 : 主函数
* 输    入       : 无
* 输    出    	 : 无
*******************************************************************************/
void main()
{	
	
	while(1)
	{
	   Hc595SendByte(0xff,0xfe,0x00,0x01);
	}		
}

Protues仿真如下:

仿真连线图

分类: MCS-51

0 条评论

发表评论

电子邮件地址不会被公开。