所有产品

AT89S51单片机对数字电子钟的设计

  应用产品的设计与调试过程,巩固课程所学理论知识,初步了解单片机应用系统设计与调试的方法。

  设计一个以AT89S51单片机为核心的数字电子钟控制器,实现电子钟的时间、日期交替显示、闹钟功能,并可通过按钮开关或键盘切换显示内容、调整参数、设置闹钟,在单片机实验板上模拟调试实现控制器的功能。具体设计要求如下:

  1.开机自检,检查相关接口及数码管显示器、指示灯、蜂鸣器等外设是否正常。

  2.8位数码管显示器平常以一定的时间间隔、合适的格式显示时间和日期信息,时间显示时、分、秒;日期显示年(2000~2099)、月、日;设置闹钟功能时显示时、分、开/关状态。

  3.可通过按键设定时间、日期、闹钟等参数、手动切换显示。按键可用独立式按键或行列式键盘实现。设定参数过程有合适的方式指示当前可修改的内容。

  4.对开关量输入进行软件消抖动处理,参数的设定有容错处理,如:小时不能超过23,日期中每月最大天数、闰年等。

  89S51单片机的P0口是低8位地址与数据复用的,现在我们用74HC373分离出地址,89S51高位地址的P2_0(A8)接8255的片选端(/CS), 低位地址Q1Q0(A1A0)与8255的A1A0连接,数据位P0_7~P0_0分别接8255的D_7~D_0。 以此得到的8255端口的地址分别为:

  8255的PA口控制LED数码管的8个显示段;PB口分别接8个LED数码管的共阳极;

  struct{ //闹钟时、分、秒 ,共设6个闹钟(初始状态默认:00-00-F1)

  uchar code KBTable[] = {‘1’,‘2’,‘3’,‘F’,‘4’,‘5’,‘6’,‘E’,‘7’,‘8’,‘9’,‘C’,‘0’,‘A’,‘B’,‘D’};//键值(可有可无)

  动态显示:即各位数码管轮流点亮,对于显示器各位数码管,每隔一段延时时间循环点亮一次。利用人的视觉暂留功能可以看到整个显示,但须保证扫描速度足够快,人的视觉暂留功能才可察觉不到字符闪烁。显示器的亮度与导通

  、点亮时间及间隔时间的比例有关。调整参数可以实现较高稳定度的显示。动态显示节省了驱动和I/O口,降低了能耗。void LED_show(uchar buf[])

  a.行扫描法:依次从第一至最末行线上发出低电平信号, 如果该行线所连接的键没有按下的话, 则列线所接的端口得到的是全“1”信号, 如果有键按下的线”信号。

  b.线反转法:线反转法也是识别闭合键的一种常用方法, 该法比行扫描速度快, 但在硬件上要求行线与列线外接上拉电阻。先将行线作为输出线, 列线作为输入线”信号, 读入列线的值, 那么在闭合键所在的列线;然后从列线”信号,再读取行线的输入值,闭合键所在的行线。这样,当一个键被按下时, 必定可读到一对唯一的行列值。再由这一对行列值可以求出闭合键所在的位置。

  uchar code KBTable[] = {‘1’,‘2’,‘3’,‘F’,‘4’,‘5’,‘6’,‘E’,‘7’,‘8’,‘9’,‘C’,‘0’,‘A’,‘B’,‘D’};

  if(PC!=0xF0) //判断按键是否按下 如果按钮按下 会拉低CH其中的一个端口