前几天学了点阵的显示,今天按自己的思路来总结一下。
首先介绍一下点阵的显示原理。点阵的电路图和之前学过的矩阵按键的电路图是相似的。
每个灯就相当于坐标图中的一个点,具有唯一独特的坐标位置,这样就可以通过引脚的信号来控制每个灯的关和开
col管脚连接的是P0的八个引脚,row管脚连接的是595的八位并行输出端。
实验中采取的是逐列显示,通过P0控制八列每列逐列显示,其间通过595位移缓存器控制每列要亮的led灯。
74HC595是串入并出带有锁存功能移位寄存器.如图:
形象来说,14引脚是搬运工,11是进厂守门员,12是出厂守门员,
11出现上升沿时,从14引脚输入一位数据,一共重复八次
12引脚上升沿时,将之前进来的八位数据分别从1到7引脚输出
OE为使能端,低电平时使输出有效,所以实验的时候接GND就行
10为主复位,低电平时有效,实验时让它为高
附74HC595真值表
用笔对着点阵描摹的爱心,然后一列一列转成二进制码
爱心点阵,亲测有效。
#include "reg51.h"
#include
typedef unsigned int u16;
typedef unsigned char u8;
sbit SRCLK=P3^6;
sbit RCLK=P3^5;
sbit SER=P3^4;
u8 ledduan[]={0x38,0x44,0x42,0x21,0x42,0x44,0x38,0x00};
u8 ledwei[]={0x7f
,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
void delay(u16 i)
{
while(i--);
}
void Hc595SendByte(u8 dat)
{
u8 a;
SRCLK=0;
RCLK=0;
for(a=0;a<8;a++)
{
SER=dat>>7;
dat<<=1;
SRCLK=1;
_nop_();
_nop_();
SRCLK=0;
}
RCLK=1;
_nop_();
_nop_();
RCLK=0;
}
void main()
{
u8 i;
while(1)
{
P0=0x7f;
for(i=0;i<8;i++)
{
P0=ledwei[i]; //位选
Hc595SendByte(ledduan[i]); //发送段选数据
delay(100); //延时
Hc595SendByte(0x00); //消隐
}
}
}
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』