P89LPC935驱动数码管显示时钟的设计
在单片机应用系统中,通常采用价格低廉、配置灵活的LED数码管显示时钟。显示时钟一般需4~8位LED,每位占用单片机8个I/O端口,这样需大量的单片机I/O端口资源。本文介绍一种利用P89LPC935的P0口驱动4位LED显示时钟的方法,只占用单片机6个并行I/O口。
一、硬件电路
4位数码管公共端是各自独立的,只受单片机I/O口控制。采用动态扫描方式,轮流控制各位数码管公共端[COM],使各位数码管轮流点亮。硬件电路如下图所示,图中的4位数码管采用共阳极, 4#和3#数码管显示时钟、2#和1#数码管显示分钟、5#LED是1#和2#的dp组成,用于显示秒钟。74LS164为8位串入/并出转换电路,用于节约P89LPC935的I/O口。
P89LPC935的Vcc引脚接三个IN4007二极管,用于将5V电压降到3·6V以下(因P89LPC935常用电压2·4~3·6V);P1·2、P2·2、P2·3接发光二极管,用于LED工作指示; P1·7、P2·1、P2·0用于调整时间; P0·4、P0·5与74LS164的SDA和CLK相连进行串行数据传输; P0·0~P0·3通过三极管[8050]与数码管公共端COM4~COM1相连,对数码管位选择进行控制; 74LS164的Q0~Q7顺序连到数码管段码a~dp,控制数码管的段码显示。
数码管显示时,其显示数据由P89LPC935的P0·4、P0·5串行发送到74LS164,再通过74LS164的Q0~Q7端并行送入数码管段a~dp,使数码管显示时间。同时P89LPC935的P0·0~P0·3对数码管进行位选择控制,使数码管按设定的时间轮流显示。
二、单片机驱动程序代码
(1)4位数码管显示控制函数(位控制函数)
void Ctrl1(unsigned int i)
{
switch( i)
{case 4: {P00=0; P01=0; P02=1; P03=1; break; } //0选
择5#LED
case 3: {P00=1; P01=0; P02=0; P03=0; break; } //选择
4#LED
case 2: {P00=0; P01=1; P02=0; P03=0; break; } //选择
3#LED
case 1: {P00=0; P01=0; P02=1; P03=0; break; } //选择
2#LED
case0: {P00=0; P01=0; P02=0; P03=1; break; }} //选择
1#LED
}
(2)数码管开关函数
void Ctrl2_on() //打开四数码管电源
{
P00=1; P01=1; P02=1; P03=1;
}
void Ctrl2_off() //关闭四数码管电源
{
P00=0; P01=0; P02=0; P03=0;
}
(3)数码管显示函数
本程序是将要显示的5位数据存放在display_buff[5]数组中, [3]、[2]两位为时钟数, [1]、[0]两位为分钟数, [4]为秒钟数(此为本程序的约定)
void display(unsigned intdisplay_buff[5])
{ unsigned char k;
unsigned int ;i
for( i=0; i<5; i++)
{ k=led[display_buff[ i]]; //到字库中查找显示字码如
相关文章
- 2024-06-12振动的带通控制法
- 2024-09-1110CrNi3MoV薄板性能研究
- 2024-05-24浮子流量计流量方程的原理分析与修正
- 2024-06-12浅析高速轨道交通减振降噪的实施和应用
- 2023-04-26金属光栅衍射的电磁场理论分析(TM波)
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。