51点阵动画

dz.h

#include "system.h"

#include "intrins.h"	 //移位必须用的语句

sbit srclk=P3^6; //11号引脚,移位寄存器时钟输入
sbit rclk=P3^5;	 //12号引脚,储存寄存器时钟输入
sbit ser=P3^4;	 //14号引脚,串行数据输入

sbit RCK=P3^5;		//RCLK
sbit SCK=P3^6;		//SRCLK
sbit SER=P3^4;		//SER

void MatrixLED_Init();  //点阵初始化
void _74HC595_WriteByte(unsigned char Byte);  //最高位开始移位 输入dat到595芯片
void MatrixLED_ShowColumn(unsigned char Column,Data);  //点阵显示数据
void dz_xs(void);  //点阵显示

dz.c

#include "dz.h"

 unsigned char code Animation[]={	
  0x00,0x49,0x49,0x7f,0x49,0x49,0x00,0x00,
  0x3C,0x42,0xA9,0x85,0x85,0xA9,0x42,0x3C,
  0x08,0x10,0x3f,0x49,0x2d,0x7f,0x2d,0x09,
};

void MatrixLED_Init()  //点阵初始化
{
	SCK=0;
	RCK=0;
}

/**
  * @brief  74HC595写入一个字节
  * @param  Byte 要写入的字节
  * @retval 
  */
void _74HC595_WriteByte(unsigned char Byte)  //最高位开始移位
{
	unsigned char i,j=0;

	for(i=0;i<8;i++)
	{
		ser=Byte&(0x80>>i);
		SCK=1;
		SCK=0;
	}
	rclk=1;
	rclk=0;
  
}

/**
  * @brief  LED点阵屏显示一列数据
  * @param  Column 要选择的列,范围:0~70在最左边
  * @param  Data 选择列显示的数据,高位在上,1为亮,0为灭
  * @retval 
  */
void MatrixLED_ShowColumn(unsigned char Column,Data)  //点阵显示数据
{
	_74HC595_WriteByte(Data);  //data 选择哪一行 要点亮  1是点亮
	P0=~(0x80>>Column);  //=~1000 0000=0111 1111  >>要移位多少,就是要选择那一列  0是导通
	Delay_us(100);
}

void dz_xs()  //点阵显示
{
  static	uint timer=0,j=0;
  u8 i;
	
	for(i=0;i<8;i++)
	{
		MatrixLED_ShowColumn(i,Animation[i+j]);   //
	}
 timer++;
 if(timer>100)
  {
    timer=0;
    j+=8;
  }
 if(j>16) {j=0;}
	
}

 
///**
//  * @brief  74HC595写入一个字节
//  * @param  Byte 要写入的字节
//  * @retval 
//  */
//void _74HC595_WriteByte(unsigned char Byte)  //最高位开始移位
//{
//	unsigned char i;
//	for(i=0;i<8;i++)
//	{
//		ser=Byte&(0x80>>i);
//		SCK=1;
//		SCK=0;
//	}
//	rclk=1;
//	rclk=0;
//}

///**
//  * @brief  LED点阵屏显示一列数据
//  * @param  Column 要选择的列,范围:0~70在最左边
//  * @param  Data 选择列显示的数据,高位在上,1为亮,0为灭
//  * @retval 
//  */
//void MatrixLED_ShowColumn(unsigned char Column,Data)  //点阵显示数据
//{
//	_74HC595_WriteByte(Data);  //data 选择哪一行 要点亮  1是点亮
//	P0=~(0x80>>Column);  //=~1000 0000=0111 1111  >>要移位多少,就是要选择那一列  0是导通
//	Delay_us(100);
//}

//void dz_xs()  //点阵显示
//{
//	srclk=0;  //
//	rclk=0;
//	
//	MatrixLED_ShowColumn(0,0x3C);   //显示第第1行,第1
//	MatrixLED_ShowColumn(1,0x42);   //显示第第2行,第2
//	MatrixLED_ShowColumn(2,0xA9);   //显示第第3行,第3
//	MatrixLED_ShowColumn(3,0x85);   //显示第第4行,第4
//	MatrixLED_ShowColumn(4,0x85);   //显示第第5行,第5
//	MatrixLED_ShowColumn(5,0xA9);   //显示第第6行,第6
//	MatrixLED_ShowColumn(6,0x42);   //显示第第7行,第7
//	MatrixLED_ShowColumn(7,0x3C);   //显示第第8行,第8
//}

main.c

#include "system.h"
//#include "key.h"
#include "dz.h"
extern	uchar flag_1ms;	   //在其他模块中寻找其定义。另外,extern也可用来进行链接指定。


void main(void)			//程序的主函数
{
	Timer0_Init(); ////定时器0函数调用
  MatrixLED_Init();//点阵初始化
	while(1)  			//大括号里面的东西,被不停的循环执行
	{ 
//   dz_xs();  //点阵显示
		//1ms进入一次
		if(flag_1ms==1)	//加了我之后,我的大括号里面的东西,被定期的1ms执行一次,反复执行	 	
		{
			flag_1ms=0;
      dz_xs();  //点阵显示
  

		}
	}
}
			 

system.h

#include "reg51.h"


#define	uchar unsigned char	//定义无符号字符
#define	uint  unsigned int	//定义无符号整形

#define	u8 unsigned char	//定义无符号字符
#define	u16  unsigned int	//定义无符号整形

#define	FOSC	12000000L	//定义晶振频率		   
#define	T1MS	(65536-FOSC/12/1000)  //定时10毫秒的时候,计数器要写入的值

void	Delay_us(uint xus);	//us级延时
void	Delay_ms(uint xms);	//ms级延时
void	Timer0_Init(void);  	//定时器初始化

system.c

#include "system.h"
 
uchar flag_1ms=0;

void	Timer0_Init(void)
{
	TH0 = T1MS>>8; //赋初值
	TL0 = T1MS;	   //赋初值
	TMOD = 0x01;  //设置定时器0用十六位定时器方式
    EA = 1;			 //打开总中断
  	ET0 = 1;		 //打开定时器0中断
  	TR0 = 1;		 //启动定时器0		
}

void Timer0() interrupt 1		 //中断号1
{	
	TH0 = T1MS>>8; //赋初值
	TL0 = T1MS;	   //赋初值
	flag_1ms=1;
}

void	Delay_us(uint xus)
{
	for(;xus>0;xus--);
}

void	Delay_ms(uint xms)
{
	for(;xms>0;xms--)
	{
		Delay_us(1000);
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值