【51单片机单595点阵8按键调节速度方向花样】2022-6-18

发布于:2025-07-03 ⋅ 阅读:(16) ⋅ 点赞:(0)

缘由单片机595扩展通过按键控制8*8流水灯速度跟方向-后端-CSDN问答

#include "REG52.h"
sbit fx=P1^7;
sbit sd=P1^6;
sbit zx=P1^5;
sbit ds=P1^0;//数据线  595的14脚
sbit sh=P1^1;//数据输入时钟线 595的11脚
sbit st=P1^2;//输出存储器锁存时钟线 595的12脚
unsigned char code dzshuju[]={0x00,0x00,0x3e,0x41,0x41,0x41,0x3e,0x00,0x00,0x00,0x00,0x00,0x21,0x7f,0x01,0x00,0x00,0x00,0x27,0x45,0x45,0x45,0x39,0x00};
unsigned char code dzwei[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
void QuDong595(unsigned char sj)
{
	unsigned char aa=8;
	while(aa--)
	{
		ds=sj>>7;
		sj<<=1;//十六进制数据发送
        sh=1;//上升沿发生移位 上升沿时数据寄存器的数据锁存。有些板子可能需要更长的延时时序可重复写sh=1;多次语句作为延时用不调用函数头文件#include <intrins.h>中的_nop_();
        sh=0;
	}
	st=0;      
    st=1;//上升沿将数据送到输出锁存器   
    st=0;
}
void main()
{
	unsigned char h=0,l=0,xd=0,ys=0,q=0,x=0,dy=0,s=0,d=0,z=0;
	while(1)
	{
		if(z==0){QuDong595(~dzshuju[h+q]);P2=~dzwei[(x>0?7-l:l)];}
		else{QuDong595(dzwei[(x>0?7-l:l)]);P2=dzshuju[h+q];}
		while(++dy);QuDong595(0xff);
		if(++l>7)h=l=0;else h=l;
		//之上实现点阵显示一个字符
		if(++ys==0)if(++d>s)if(++q>8*2)q=0;else;else d=0;else;
		//之上实现点阵移动和速度
		if(fx==0&&++xd==0){if(x==0)x=1;else x=0;while(fx==0);}
		//之上按键处理调节方向
		if(sd==0&&++xd==0){if(++s>7)s=0;P3=s;while(sd==0);}
		//之上按键处理调节速度
		if(zx==0&&++xd==0){if(z==0)z=1;else z=0;while(zx==0);}
		//之上按键处理调节转向
	}
}