单片机/MCU论坛
直播中

wangka

12年用户 5636经验值
擅长:基础元器件 模拟与电源 操作系统/软件
私信 关注

双色无表针钟表的设计(电路图、设计流程、程序代码)


双色无表针钟表的设计(电路图、设计流程、程序代码)
基于单片机的双色无表针钟表的设计方案。该方案硬件以AT89S51单片机为控制核心,采用 74LS154(4—16线译码器)扩展I/O口以控制钟表的显示,并采用12个红色LED灯表示小时,12个绿色LED灯表示分钟,每隔5分钟,变化一次。同一时间仅有两个LED灯亮,节能、方便、易识别,且富有个性。

一、总体结构

1.主体结构模块
本设计分为核心控制、显示控制和时间调整三大模块,主体结构如图1所示。
QQ截图20120206145518.jpg
图1 主体结构模块

2.LED灯模块
该钟表中LED灯的摆放位置如图2所示:
QQ截图20120206145606.jpg
图2
(红色LED灯表示小时,绿色LED灯表示分钟)

二、硬件电路设计

1.主控电路
主控电路由AT89S51单片机控制, 74LS154(4—16译码器)进行I/O口扩展,采用11.0952MHz晶振。AT89S51有P0、P1、P2和P3四组I/O口线,每组8个端口,本设计采用P1、P2和P3三组线,P1.0~P1.3口与74LS154输入口相连,74LS154(0~11)输出口各自与一个红色LED灯相连,控制小时显示,P2.0~P2.3口与74LS154输入口相连,74LS154(0~11)输出口各自与一个绿色LED灯相连,控制分钟显示。在程序的控制下实现同一时间仅有两个灯亮的双色无表针钟表,其中红色表示小时,绿色表示分钟,例如,当1:10时,1处红色LED灯亮,2处绿色LED灯亮。其主控电路如图3所示。
QQ截图20120206145615.jpg

2.驱动与LED显示电路
用74LS154(2个)24个端口控制24只LED发光二极管的亮灭,当端口输出低电平时,LED灯亮,反之,LED灯灭。用直流5V电源给AT89S51和24只LED灯供电,通过程序控制各个LED灯的亮灭,从而实现时间的显示。其驱动电路如图4所示。

QQ截图20120206145621.jpg
三、软件设计

1.工作流程
工作流程如图5所示。现说明如下:
QQ截图20120206145628.jpg
AT89S51的T0工作在定时状态,P1口控制小时显示,P2口控制分钟显示,T0每次定时60ms,循环5000次,即定时5min,P2口输出值加1,分钟显示跳一格,分钟每跳12格(1小时),P1口值加1,小时显示跳一格,P2口送入0,重新开始循环。当小时显示跳12格时(12小时),P1口送入0,重新开始循环。INT0、INT1中断分别用于小时、分钟调整。

2.系统程序
  1. #include #include Unsighed int wang;Unsighed char hour,min;void dingshi(void);//t0赋初值void delay(int );//延迟子程序,防抖动void time0( )intreupt1;//定时中断子程序void jhour( void);//分钟显示转一圈时,小时走一格void interrupt0()interrupt2 using 1;//调整小时显示void interrupt1()interrupt3 using 2;//调整分钟显示main( ){P1=0X00;//赋初值,检查LED是否正常工作P2=0X00;//赋初值,检查LED是否正常工作TMOD=0X01;//采用T0第一种方式定时IE=0X87;//开启中断wang=0;//计数器置零hour=0;min=0;while(1){jhour( );}}void dingshi(void)//T0赋初值,开始定时{TH0=0X15;TL0=0X9F;TR0=1;}void time0( )intreupt1{wang++;if (wang!=5000) dingshi( );//循环5000次,判断是否定时5分钟}void jhour( void){dingshi( );min++;if (min==12){ min=0;hour++}P2=min;If (hour==12) { hour=0;}P1=hour;}void interrupt0()interrupt2 using 1//小时调整{delay(100);//防抖动hour++;if(hour==12) hour=0;P1=hour;}void interrupt1()interrupt3 using 2//分钟调整{delay(100);min++;if (min==12) min=0;P2=min;}void delay(Unsighed int z){Unsighed int x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}



四、小结
本文所设计的基于单片机的双色无表针钟表,在同一时间仅保持两个LED灯亮,耗电极低,更节能,双色显示更易辨认。



回帖(3)

啊青

2012-10-14 14:58:03
举报

liufeng6789

2012-10-16 09:15:19
不错的
举报

郝金铎

2013-4-30 10:38:34
程序有问题,为什么给的程序都是有问题的,
举报

更多回帖

发帖
×
20
完善资料,
赚取积分