51单片机之点阵驱动

51单片机之点阵驱动

各位社区小伙伴们大家好!我是“奕轩君”今天和大家分享的是如何利用51单片机驱动点阵

  • 硬件部分
    AT89C52单片机
    8*8点阵
    按键
    杜邦线

下面是关于点阵的介绍
什么是点阵?
在这里插入图片描述
点阵就是由多个LED组成,8 * 8 点阵为横向8个,纵向8个,8*8=64个LED

  • 软件部分
#include "reg52.h"
#define HH (65536-10000)/256;//初值为10ms
#define LL (65536-10000)%256;
sbit key1=P1^0;//定义按键
unsigned   char num=0,flag=0;
unsigned char tab[]=       //列控制
	  {
		0x00,0x7E,0xFF,0xC3,0xC3,0xFF,0x7E,0x00,//0
		0x00,0x00,0x43,0xFF,0xFF,0x03,0x00,0x00,//1
		0x00,0x63,0xC7,0xCF,0xDB,0xF3,0x63,0x00,//2
		0x00,0x42,0xDB,0xDB,0xDB,0xFF,0x66,0x00,//3
		0x00,0x3E,0x46,0xFF,0xFF,0x06,0x06,0x00,//4
		0x00,0xF6,0xF7,0xD3,0xD3,0xDF,0xDE,0x00,//5
		0x00,0x7E,0xFF,0xDB,0xDB,0xDF,0x4E,0x00,//6
		0x00,0xc0,0xc0,0xC7,0xFF,0xF8,0xC0,0x00,//7
		0x00,0xFF,0xFF,0xDB,0xDB,0xFF,0xFF,0x00,//8
		0x00,0x72,0xFB,0xDB,0xDB,0xFF,0x7E,0x00,//9
    };
unsigned char row[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//行控制

void inittimer()
{
  TMOD=TMOD&0xf0|0x01;//T0定时器工作方式1
	TF0=0;
	TH0=HH;
	TL0=LL;
	ET0=1;
	EA=1;
	TR0=1;
}
void  matrix()
{
	int i=0;
	for(i=8*num;i<8*(num+1);i++) 
	{
		P2=~row[i-8*num];
 	  P3=tab[i];
	}
}


void keyboard()
{
	if(flag==0&&key1==0) 
	{
		flag=1;
	}
	if(flag==1&&key1==1)
	{
		num++;//num变量
		flag=0;
	
	}
	if(num==10) num=0;
	
}
void main()
{
	inittimer();
	while(1)
	{
		matrix();

	}
}
void inittimer_isr()  interrupt 1
{
	TH0=HH;//装入定时器初值1ms
	TL0=LL;
 	keyboard();//调用键盘扫描函数
}


仿真效果图
在这里插入图片描述
当我按下按键后,点阵就会自动切换“数字”
谢谢大家收看!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奕轩君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值