碧波液压网 欢迎你,游客。 登录 注册

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]]; //到字库中查找显示字码如

你没有登陆,无法阅读全文内容

您需要 登录 才可以查看,没有帐号? 立即注册

标签:
点赞   收藏

相关文章

发表评论

请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。

用户名: 验证码:

最新评论