每天前进一点点
通过对8*8点阵点进行,行列扫描来显示数字0。简单描述一下:P2口的DS通过HC595对点阵的行进行控制,低电平有效;单片机的P0口控制点阵的列,高电平有效;显示数字0的过程:对点阵的第一行的每一列进行扫描,完了后对第二行的每一列进行扫描,最后所有扫描完后,因其扫描过程时间极短,所以我们所看到的就是数字0。
费话不多说上图上代码
原理图:
代码:
#include "reg52.h"
#include "intrins.h"
typedef unsigned int u16;
typedef unsigned char u8;
#define Column P0 //定义P0口
sbit SHCP = P2^0; //移位寄存器时钟,上升沿有效
sbit STCP = P2^2; //存储寄存器时钟,上升沿有效
sbit DS = P2^1; //数据发送端口
u8 Line[8]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe}; //行
u8 Col[8]={0x00,0x00,0x18,0x24,0x24,0x24,0x24,0x18}; //列
void delay(u16 i)
{
while(i--);
}
void HC595SendByte(u8 dat) //595发送一个字节数据函数
{
u8 a;
SHCP = 0;
STCP = 0;
for(a=0;a<8;a++)
{
DS = dat>>7;
dat <<=1;
SHCP = 1;
_nop_();
_nop_();
SHCP = 0;
}
STCP = 1;
_nop_();
_nop_();
STCP = 0;
}
void main()
{
u8 i;
while(1)
{
for(i=0;i<8;i++)
{
Column = Col[i];
HC595SendByte(Line[i]);
}
}
}