51单片机8*8点阵屏

8*8点阵屏

8*8点阵屏是一种LED显示屏,它由8行和8列的LED灯组成。每个LED灯的开闭状态都可以独立控制,从而可以显示出数字、字母、符号、图形等信息。

8*8点阵屏的原理是通过行列扫描的方式,控制LED灯的亮灭,从而显示出所需的图案或信息。通过逐行逐列地控制LED的亮灭,就可以在屏幕上显示出任意的数字、字母和图形。

这种点阵屏通常被广泛应用于电子钟表、计时器、温度计、电子游戏等产品中,因为它可以以较小的尺寸显示出丰富的信息,而且功耗较低、制作成本相对较低。

点阵屏理论介绍

8*8点阵屏电路图

如何赋值点亮led灯:要使用动态扫描的方式点亮led灯防止出现同时点亮的情况

74HC595芯片的工作原理

8*8点阵屏原理图

74HC595芯片使用说明

eg1:点阵屏编程实战:点亮第一个点阵
 

#include <REGX52.H>
sbit DIO = P3^4; // 串行数据口
sbit S_CLK = P3^5; //移位寄存器时钟
sbit R_CLK = P3^6; // 输出锁存器时钟

void main(){
	// ROW : 0x80 ,COL : 0xfe 通过传入和并出的方式将数据发送出去
	unsigned char i,dat;
	dat = 0xfe;
	for(i = 0; i<8;i++){
			S_CLK = 0;
	   	R_CLK = 0;
		  if(dat & 0x01){
			   DIO = 1;
			}else{
			   DIO = 0;
			}
			S_CLK = 1;	
			dat >>= 1;
	}
	

	dat = 0x80;
	for(i = 0; i<8;i++){
			S_CLK = 0;
	   	R_CLK = 0;
		  if(dat & 0x01){
			   DIO = 1;
			}else{
			   DIO = 0;
			}
			S_CLK = 1;		
			dat >>= 1;
	}
	R_CLK = 1;
	while(1);

}

eg2:点阵屏实战:显示汉字-->电 字符

#include <REGX52.H>
#include <INTRINS.H>

sbit DIO = P3^4; // 串行数据口
sbit S_CLK = P3^5; //移位寄存器时钟
sbit R_CLK = P3^6; // 输出锁存器时钟

/*
		取模软件生成的自形码:0xef 0x01 0x6d 0x01 0x6d 0x01 0xee 0xe0 --> 电
*/
unsigned char code table[] = {
   0xe0, 0xee, 0x01, 0x6d, 0x01, 0x6d, 0x01, 0xef
};

void Send_Byte(unsigned char dat){
	  unsigned char i;
	  S_CLK = 0;
		R_CLK = 0;
		for(i = 0; i<8;i++){
				if(dat & 0x01){
					 DIO = 1;
				}else{
					 DIO = 0;
				}
				S_CLK = 1;	
				dat >>= 1;
				S_CLK = 0;
	  }
}

void main(){
	// ROW : 0x80 ,COL : 0xfe 通过传入和并出的方式将数据发送出去
	unsigned char j,ROW;
	while(1){
		  ROW = 0X80;
	    for(j = 0; j < 8; j++){
					Send_Byte(table[j]);
					Send_Byte(ROW);
					R_CLK = 1;
					ROW = _cror_(ROW,1); // 循环右移动
					R_CLK = 0;
			}
	}
}

eg3:使用点阵屏显示电子两个字

#include <REGX52.H>
#include <INTRINS.H>

sbit DIO = P3^4; // 串行数据口
sbit S_CLK = P3^5; //移位寄存器时钟
sbit R_CLK = P3^6; // 输出锁存器时钟

/*
		取模软件生成的自形码:0xef 0x01 0x6d 0x01 0x6d 0x01 0xee 0xe0 --> 电
*/
unsigned char code table[2][8] = {
   0xe0, 0xee, 0x01, 0x6d, 0x01, 0x6d, 0x01, 0xef,
	 0xe7, 0xe7, 0xe7, 0xe7, 0x80, 0xf7, 0xfb, 0xc3
};

void Send_Byte(unsigned char dat){
	  unsigned char i;
	  S_CLK = 0;
		R_CLK = 0;
		for(i = 0; i<8;i++){
				if(dat & 0x01){
					 DIO = 1;
				}else{
					 DIO = 0;
				}
				S_CLK = 1;	
				dat >>= 1;
				S_CLK = 0;
	  }
}

void main(){
	// ROW : 0x80 ,COL : 0xfe 通过传入和并出的方式将数据发送出去
	unsigned char j,k,ROW;
	unsigned int z;
	while(1){
		  for(k=0;k<2;k++){
				      for(z = 0; z <1000; z++){
							    ROW = 0X80;
							    for(j = 0; j < 8; j++){
											Send_Byte(table[k][j]);
											Send_Byte(ROW);
											R_CLK = 1;
											ROW = _cror_(ROW,1); // 循环右移动
											R_CLK = 0;
									}
							}
			   		 

			}
	
	}

}

  • 8
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值