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;
									}
							}
			   		 

			}
	
	}

}

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-01-21 13:58:05       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-21 13:58:05       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-21 13:58:05       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-21 13:58:05       18 阅读

热门阅读

  1. SQL的五大约束作用、语法、应用场景及举例

    2024-01-21 13:58:05       27 阅读
  2. c# 释放所有嵌入资源, 到某个本地文件夹

    2024-01-21 13:58:05       37 阅读
  3. RNN神经网络 python

    2024-01-21 13:58:05       39 阅读
  4. 将Matlab图窗中的可视化保存为背景透明的矢量图

    2024-01-21 13:58:05       35 阅读
  5. GPT属于AI,是LLM的一种实现

    2024-01-21 13:58:05       31 阅读
  6. Kotlin的数据类

    2024-01-21 13:58:05       38 阅读
  7. leetcode-2788按分隔符拆分字符串

    2024-01-21 13:58:05       37 阅读