前言
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。
点阵屏的介绍
按像素一般使用8的倍数,因为一个字节8位,可以充分利用内存
显示原理
大致与数码管一致,都是通过高速扫描来达到每个LED独立显示的效果。
官方原理图
可以看出P0口控制列、阴极,DP口控制行、阳极。
与74HC595模块相连
74HC595介绍
引脚解释
OE output enable,引脚使能,给低电平是74HC595可以输出
RCLK register clock,寄存器时钟
SRCLR 串行清空
SRCLK 串行时钟
SER 串行数据
QH’ 用于级联
74HC595的运行原理
介绍51单片机的sfr、sbit
sfr:声明寄存器所在地址
sbit: 对寄存器的单个位进行声明
实列
1.使用点阵实现笑脸
首先使用74HC595选择行实现,然后通过选择列来进行扫描,具体实现如下:
#include <REGX52.H>
#include "Delay.h"
// 重命名,方便了解功能
sbit _RCLK = P3^5; //RCLK
sbit _SRCLK = P3^6; //SRCLK
sbit _SER = P3^4; //SER
// 写入数据 ,用于选择LED点阵屏的行
void _74HC595_WriteByte(unsigned char Data){
unsigned char i;
// 非0时结果就为1
for(i = 0;i<8;i++){
// 非0时结果就为1
_SER = Data & (0x80>>i); // 可以得到第i位是否为0
_SRCLK = 1; // 上升沿,使数据移位
_SRCLK = 0; // 复位
}
_RCLK = 1; // 输出数据
}
// 显示
void MatrixLED_Show(unsigned char Col,Data){
// RCLK归0,下次才能上升沿写入
_RCLK = 0;
_74HC595_WriteByte(Data); // row
P0 = ~(0X80>>Col); // 选第几列第几行列赋
// 和数码管一样也需要进行消影操作
// Delayms(1); 由于1ms还是太长会导致闪烁,所以换个更短的延时函数
Delay100us(); // 如果不延时会导致灯光暗淡
P0 = 0xff;
}
void main(){
_SRCLK = 0;
_RCLK = 0;
while(1){
MatrixLED_Show(0,0x3c);
MatrixLED_Show(1,0x42);
MatrixLED_Show(2,0xa9);
MatrixLED_Show(3,0x85);
MatrixLED_Show(4,0x85);
MatrixLED_Show(5,0xa9);
MatrixLED_Show(6,0x42);
MatrixLED_Show(7,0x3c);
}
}
要注意的是行从低位到高位是从右往左,列从低位到高位是从下往上
使用点阵屏实现动画
思路是用数组存放要实现的图案,然后使用下标取数据,通过下标+偏移量实现动画。具体实现如下:
#include <REGX52.H>
#include "MatrixLED.h"
//动画数据
unsigned char Data[]=
{
0X00,0X00,0X00,0X00,0X00,
0x21,0x3f,0x21, //I
0x00,0x18,0x24,0x22,0x11,0x22,0x24,0x18,//爱心
0x00,0x3f,0x01,0x01,0x3f, //U
0X00,0X00,0X00,0X00,0X00,
};
void main()
{
unsigned char i,Offset=0,Count=0;//偏移量Offset
MatrixLED_Init(); //初始化
while(1)
{
for(i=0;i<8;i++)
{
MatrixLED_Show(i,Data[i+Offset]);
}
Count++;
//计次延时,使用Delay的话会影响显示
if(Count>40)
{
Count=0;
Offset+=1;
if(Offset>18)//当超过数组的范围时偏移量清零
{
Offset=0;
}
}
}
}
注意:offset+剩余数组长度 不能超过 点阵显示的长度,不然会造成显示错误。