项目四 电子万年历系统设计
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4.1单片机与LED数码管接口
共阴数码管码表
0x3f , 0x06 , 0x5b , 0x4f , 0x66 , 0x6d , 0x7d , 0x07 , 0x7f
0
1
2
来自百度文库
3
4
5
6
7
8
, 0x6f , 0x77 , 0x7c , 0x39 , 0x5e , 0x79 , 0x71 , 0x00
0x93f , 0x0A6 , 0x5b B, 0x4f , 0Cx66 , 0x6Dd , 0x7d , E0x07 , F0x7f 无显示
d c
4 3
a DPY b 2
a1
dp
dp
8 g7
c
d
e
f e
6 5
b
g
f
d c
4 3
a DPY b 2
a1
dp
dp
8
g7
d
f6
c
ee 5
b
g
f
d c
4 3
a DPY b 2
a1
dp
dp
8
g7
d
f6
c
ee 5
b
g
f
d c
4 3
a DPY b 2
a1
dp
dp
8
g7
d
f6
c
ee 5
b
g
f
d c
4 3
a DPY b 2
项目四 电子万年历系统设计
4.1单片机与LED数码管接口 4.2单片机与LCD液晶显示模块接口 4.3单片机与键盘
4.1单片机与LED数码管接口
1.LED数码管的结构及原理 2.LED数码管静态显示 3.LED数码管动态显示
4.1单片机与LED数码管接口
一、LED数码管的结构及原理
发光二极管LED(Light Emitting Diode)显示器、液晶 LCD(Liquid Crystal Display)显示器、CRT显示器等。LED、LCD 显示器有两种显示结构:段显示(7段、米字型等)和点阵显示 (5×8、8×8点阵等)。
P10 P11 P12 P13 P14 P15 P16 P17
13 12
INT1 INT0
C1
15 VCC 14
T1 T0
33PF Y1 12MHZ
C2
31 EA/VP
19 18
X1 X2
9 RESET
33PF R1 1.2K GND
17 16
RD WR
8031 S1
R2 100
C3 +5V
20
GND
4.1单片机与LED数码管接口 74LS164是一个串入并出的8位移位寄存器
1、引脚功能
CLR: 同步清除输入端(低电平有效) CLK:上升沿输出右移一位 A,B :串行数据输入端 QA-QH: 输出端
4.1单片机与LED数码管接口 2、内部功能图
3、真值表
4.1单片机与LED数码管接口
通过串行口扩展8位LED显示器静态驱动电路,在P0.1运行移位
Y a=4?
N
发送第(4-a)个数码 管的字型码
sent(dispb[4-a])
Y i=8?
N
ch=ch<<1; DIN=CY; CLK=0; CLK=1;
显示子程序
a++ 返回
i++ 返回
4.1单片机与LED数码管接口
三、LED数码管动态显示原理
动态扫描显示接口是单片机中应用最为广泛的一种显示方 式之一。其接口电路是把所有数码管的8个笔划段a-h同名端连在 一起,而每一个数码管的公共极COM是各自独立地受控制。CPU向 字段输出口送出字形码时,所有显示器接收到相同的字形码,但 究竟是那个显示器亮,则取决于COM端,而这一端是由I/O控制的, 所以就可以自行决定何时显示哪一位了。而所谓动态扫描就是指 采用分时的方法,轮流控制各个显示器的COM端,使各个显示器 轮流点亮。
gnd 9
gnd
gnd 9
9
9
U?
U?
U?
U?
U?
U?
NOT
NOT
NOT
NOT
NOT
NOT
4.1单片机与LED数码管接口
例:按照图所示的电路,编写在六个数码管上分别显示012345。
#include<at89x51.h>
code dispcode[ ]={0x3f,0x06,0x5b,0x4f,0x66,0x6d};
共阳0数码管码表1
2
3
4
5
6
7
8
, 0x6f , 0x77 , 0x7c , 0x39 , 0x5e , 0x79 , 0x71 , 0x00
9
A
B
C
D
E
4.1单片机与LED数码管接口
二、LED数码管静态显示原理
LED显示器工作方式有两种:静态显示方式和动态显示方式。 所谓静态显示,就是每一个显示器都要占用单独的具有锁存功能 的I/O接口用于笔划段字形代码。这样单片机只要把要显示的字形 代码发送到接口电路,就不用管它了,直到要显示新的数据时, 再发送新的字形码,因此,使用这种方法单片机中CPU的开销小, 可以提供单独锁存的I/O接口电路很多(以串并转换电路74LS164 为例)。
VCC
P00 P01 P02 P03 P04 P05 P06 P07
39 38 37 36 35 34 33 32
P20 P21 P22 P23 P24 P25 P26 P27
21 22 23 24 25 26 27 28
RXD TXD ALE/P PSEN
10 11 30 29
GND
DS?
DPY_7-SEG_DP
时钟脉冲,P0.0作为数据输出线。
DS1
DS2
DS3
DS4
DS5
U1
1 2 3 4 5 6 7 8
P10 P11 P12 P13 P14 P15 P16 P17
P00 P01 P02 P03 P04 P05 P06 P07
39 38 37 36 35 34 33 32
dp
8
g7
d
f6
c
ee 5
b
g
f
在轮流点亮扫描过程中,每位显示器的点亮时间是极为短 暂的(约1ms),但由于人的视觉暂留现象及发光二极管的余辉 效应,尽管实际上各位显示器并非同时点亮,但只要扫描的速度 足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感。
4.1单片机与LED数码管接口
VC C
40
U1
1 2 3 4 5 6 7 8
VCC 15
U2
D0
VCC
D1
D2
VL
D3
D4
D5
GND
D6
D7
BLK
LCD1602B E
R/W
BLA
RS
7 8 9 10 11 12 13 14
6
P2.5
5
P2.6
4
P2.7
C1
1 2 3 4 5 6 7 8
13 12
15 14 VCC 31
27PF
19
Y1
18
C2 11.0592M
9
17
VCC C5
write_com(0x0e) //显示光标
4.2单片机与LCD液晶显示模块接口
/*----------------------------------------------------------------------------------------------------------
设置屏幕 1602程序
-----------------------------------------------------------------------------------------------------------*/
a1
13 12
INT1 INT0
15 14
T1 T0
89C51
P20 P21 P22 P23 P24 P25 P26 P27
21 22 23 24 25 26 27 28
31 EA/VP
13 12 11 10
Q6 Q5 Q4 Q3
6 5 4
Q2 Q1 Q0
3
13 12 11 10
Q7 Q6 Q5 Q4 Q3
到L时为写。
sbit LCDRW=P1^6; // H为读LCD
数据,L为向LCD写数据,如果仅是
写,此端口可直接接地。
sbit LCDRS=P1^7;
write_com(uchar com);
write_dat(uchar date);
4.2单片机与LCD液晶显示模块接口
/*----------------------------------------------------------------------------------------------------------
4.1单片机与LED数码管接口
g f GNDa b
a
f
b
g
e
c
d ·dp
e dGND c dp
(a)
a b c d e f g dp
共阴极
+5V
a b c
d e
f g dp
(b)
共阳极
使用LED显示器时,要注意区分这两种不同的接法。为了显示数 字或字符,必须对数字或字符进行编码。七段数码管加上一个小数 点,共计8段。因此为LED显示器提供的编码正好是一个字节。根据
21 22 23 24 25 26 P2.5 27 P2.6 28 P2.7
RXD TXD ALE/P PSEN
10 11 30 29
4.2单片机与LCD液晶显示模块接口
#include <reg51.h>
#define uchar unsigned char
sbit LCDEN=P1^5;
//
使能信号,H为读,H跳变
74ABLS16124
CLK GND
8 VMCRC7
194
7AB4LS16124
CLK GND
8 VMCRC7
194
7AB4LS16124
CLK GND
8 VMCRC7
194
74ABLS16124
CLK GND
8 VMCRC7
194
B A
2 1
19 18
X1 X2
9 RESET
17 16
RXD TXD ALE/P PSEN
unsigned char sel=0x01;
void main(void)
{
unsigned char i;
while(1)
{
for(i=0;i<6;i++)
{
P1= dispcode[i]; //字型码
P3=sel;
//位选
sel=sel<<1;
if(sel==0x40) sel=0x01;
}
}
27PF
16
R1
10K 10UF S5
U1 P10 P11 P12 P13 P14 P15 P16 P17
INT1 INT0
T1 T0
EA/VP
X1 X2
RESET
RD WR AT89S52
P00 P01 P02 P03 P04 P05 P06 P07
39 38 37 36 35 34 33 32
P20 P21 P22 P23 P24 P25 P26 P27
6 5 4
Q2 Q1 Q0
3
13 12 11 10
Q7 Q6 Q5 Q4 Q3
6 5 4
Q2 Q1 Q0
3
13 12 11 10
Q7 Q6 Q5 Q4 Q3
6 5 4
Q2 Q1 Q0
3
13 12 11 10
Q7 Q6 Q5 Q4 Q3
6 5 4
Q2 Q1 Q0
3
U1
U2
U3
U4
U
8 VMCRC7
194
1 a DPY
2b
a
3 4
c d
f
g
b
5 ee
c
6f d
7g
dp
8 dp
DS?
DPY_7-SEG_DP
1 a DPY
2b
a
3 4
c d
f
g
b
5 ee
c
6f d
7g
dp
8 dp
DS?
DPY_7-SEG_DP
1 a DPY
2b
a
3 4
c d
f
g
b
5 ee
c
6f d
7g
dp
8 dp
gnd 9
gnd
gnd 9
设置屏幕 1602程序
-----------------------------------------------------------------------------------------------------------*/
#define CLEAR_1602 屏
write_com(0x01)
// 清
#define HOME_1602 返回原点
write_com(0x02)
// 光标
#define SHOW_1602 光标不闪动
write_com(0x0c) //开显示无
#define HIDE_1602
write_com(0x08) //关显示
#define CURSOR_1602
10 11 30 29
RD WR
VCC
VCC
VCC
VCC
VCC
例:上图所示的显示电路,五个数码管分别显示23456。
4.1单片机与LED数码管接口
主程序
开始
显示子程序
设置a=0
发送字型码的子程序
设置i=0;
Ch=dispb[4-a];
给每个数码管赋字型码
dispb[0]=dispcode[2]; dispb[1]=dispcode[3]; dispb[2]=dispcode[4]; dispb[3]=dispcode[5]; dispb[4]=dispcode[6];
4.1单片机与LED数码管接口
提高题: 采用动态显示,用定时器以间隔1S在6位数码管上依次显示0、1、 2、3….C、D、E、F,重复。
4.2单片机与LCD液晶显示模块接口
1.阅读说明书 2.读子程序 3.显示简单字符
4.2单片机与LCD液晶显示模块接口
电路原理图
VCC
2 R2
3 3.3K
1 16
1 a DPY
2b
a
3 4
c d
f
g
b
5 ee
c
6f d
7g
dp
8 dp
DS?
DPY_7-SEG_DP
1 a DPY
2b
a
3 4
c d
f
g
b
5 ee
c
6f d
7g
dp
8 dp
DS?
DPY_7-SEG_DP
1 a DPY
2b
a
3 4
c d
f
g
b
5 ee
c
6f d
7g
dp
8 dp
DS?
DPY_7-SEG_DP