知识点
点阵的模样
名字:matrix通常用的是8*8点阵
常用知识点
简单练习题
行扫描&&列扫描
演示
- 行扫
- 列扫
讲解
以行扫为例:
在上面提到过,只有行和列都是有效的点阵才能亮。
假如我们想让第一行亮:
代码
1.行扫
#include<reg51.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
void delay(int xms){
uint i,j;
for(i=xms;i>0;i--){
for(j=110;j>0;j--);
}
}
//行扫描
void main(){
uint i;
P3=0xff;
P2=0x7f;
while(1){
for(i=0;i<8;i++){
delay(500);
P2=_cror_(P2,1);//以列为准,行循环扫描时,行向右循环
}
}
}
- 列扫
#include<reg51.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
void delay(int xms){
uint i,j;
for(i=xms;i>0;i--){
for(j=110;j>0;j--);
}
}
void main(){
uint i;
P2=0x00;
P3=0x01;
while(1){
for(i=0;i<8;i++){
delay(500);
P3=_crol_(P3,1);//以行为准,列循环扫描时,列向左循环
}
}
}
点扫描(按行&&按列)
演示
- 按行
可以观察一下两个引脚,行扫是以行为准,进行列循环。 - 按列
讲解
按行:
按列:
由上图可知,以行为准时,列向左循环;以列为准时,行向右循环。
以行为例:
我们可以这样想,每循环一行,要在该行循环八列
,所以可以使用双重for循环
for(i=0;i<8;i++){
//该处写行
for(j=0;j<8;j++){
//该处写列
}
}
代码
- 按行
#include<reg51.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
void delay(int xms){
uint i,j;
for(i=xms;i>0;i--){
for(j=110;j>0;j--);
}
}
void main(){
uint i,j;
P3=0x01;
P2=0x7f;
while(1){
for(i=0;i<8;i++){
for(j=0;j<8;j++){
delay(500);
P3=_crol_(P3,1);//列
}
P2=_cror_(P2,1);//行
}
}
}
- 按列
#include<reg51.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
void delay(int xms){
uint i,j;
for(i=xms;i>0;i--){
for(j=110;j>0;j--);
}
}
void main(){
uint i,j;
P3=0x01;
P2=0x7f;
while(1){
for(i=0;i<8;i++){
for(j=0;j<8;j++){
delay(500);
P2=_cror_(P2,1);
}
P3=_crol_(P3,1);
}
}
}