Protues仿真 8X8 LED点阵
- 仿真步骤
- 原理
- 代码详解
本博客是关于Protues仿真8X8 LED点阵的具体步骤(包括原理图与代码)
注意:protues中,红色代表高电平,蓝色代表低电平,黄色表示异常
注意:protues中,红色代表高电平,蓝色代表低电平,黄色表示异常
注意:protues中,红色代表高电平,蓝色代表低电平,黄色表示异常
1.仿真所需元件清单:
元件 | 标号 | 注释 |
---|---|---|
89C52 | U1 | |
74HC595 | U2 | |
74HC138 | U3 | |
CRYSTAL | X1 | 12MHz |
CAP | C1,C2 | 30pF |
CAP | C3 | 100uF |
RES | R1 | 10K |
BUTTON | S | |
MATRIX-8X8-RED | D |
2.仿真电路图
2.1-晶振电路:
图片:
2.2-复位电路:
图片:
2.3-单片机:
图片:
2.4-8X8 LED点阵:
图片:
3.Keil5 代码(C语言):
#include<reg52.h>
#include<intrins.h>
typedef unsigned char u8;
typedef unsigned int u16;
sbit R3 = P1^2; //
sbit R2 = P1^1; //
sbit R1 = P1^0; //
sbit DS = P1^5; //
sbit SHCP = P1^6; //
sbit STCP = P1^7; //
data u8 g[]={0x80,0x40,0x20,0x10,0x8,0x4,0x2,0x1};
void wrong(u16 i) //调试用
{
if(i)
P0=0xff;
}
void delay1ms(void) //100ms延时
{
unsigned char a,b;
for(b=199;b>0;b--)
for(a=1;a>0;a--);
}
void row(u8 r) //选择点亮第几行
{
switch(r)
{
case 1:{R3=1;R2=1;R1=1;};break;
case 2:{R3=1;R2=1;R1=0;};break;
case 3:{R3=1;R2=0;R1=1;};break;
case 4:{R3=1;R2=0;R1=0;};break;
case 5:{R3=0;R2=1;R1=1;};break;
case 6:{R3=0;R2=1;R1=0;};break;
case 7:{R3=0;R2=0;R1=1;};break;
case 8:{R3=0;R2=0;R1=0;};break;
default :wrong(1);break;
}
}
void send(u8 d) //选择该行显示的内容
{
u8 i;
SHCP = 0;
STCP = 0;
for(i=0;i<8;i++)
{
DS = d>>7;
d<<=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++)
{
row(i+1); //i+1表示第几行
send(g[i]);
delay1ms(); //延时
send(0); //消隐,和延时一起使用
}
}
}
4.仿真结果:
图片:
74HC595 串口输入(示波器):
74HC138 串口输入(示波器):
5.原理:
8X8 LED点阵
演示图:
阴极 1,3脚接低电平(1,3行可以点亮),阳极1,2脚接高电平( 1,2列可以点亮)。
74HC138
引脚 | 功能 | 用法 |
---|---|---|
4 | 使能控制 | 低电平 |
5 | 使能控制 | 低电平 |
6 | 使能控制 | 高电平 |
1 | 输入端 | 二进制最低位 |
2 | 输入端 | 二进制中间位 |
3 | 输入端 | 二进制最高位 |
Y0~Y7 | 输出端 | 对应输入端(从0~7) |
示例:
令 A = 0,B = 0 ,C = 0,即输入0b 000,对应八进制数:0o 0,Y0输出低电平
A =0,B = 0 ,C = 1,即输入0b 100,对应进八进制0o 4,Y4输出低电平
74HC595
引脚 | 功能 | 接法 |
---|---|---|
MR | 移位寄存器清零 | 低电平有效 |
OE | 输出使能 | 低电平有效 |
Q0~Q7 | 并行输出 | |
DS | 串口输入 | 一次输入一位 |
SH_CP | 控制数据左移位 | 高电平有效 |
ST_CP | 数据输出 | 高电平有效 |
例如
让并口输出0b 1010 1010(以Q0为最低位),DS按顺序应输入1,0,1,0,1,0,1,0
模拟该输入过程
-
1-全部置低电平(DS=0,SH_CP=0.ST_CP=0)
-
2-DS置高电平(输入1)低电平则输入0
-
3-SH_CP置高电平(产生一个上升电平>2us)
-
4-SH_CP置低电平(恢复低电平)
2,3,4步重复共8次,即完成1个字节的传输 -
5-ST_CP置高电平(产生一个上升电平>2us)
注意:第9个引脚输出不用管 !!!
注意:第9个引脚输出不用管 !!!
注意:第9个引脚输出不用管 !!!
- 6-ST_CP置低电平(恢复低电平)