找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 10482|回复: 9
打印 上一主题 下一主题
收起左侧

51单片机时钟程序,初始时间为23时59分55秒,24时自动归零

  [复制链接]
跳转到指定楼层
楼主
51单片机时钟程序,定时中断,初始时间为23时59分55秒,24时自动归零

实验三 定时/计数器实验
一、实验目的
(1)掌握定时器/计数器的工作原理;
(2)掌握用C 语言程序实现 LED动态显示的方法;
(3)掌握C 程序下定时中断程序设计调试方法。
二、实验内容
(1)熟悉Proteus 软件,了解软件的结构组成与功能;
(2)熟悉uVision3 编译软件,了解软件的结构组成与功能;
(3)学习C51 语言的程序设计方法;
(4)用定时器/计数器 T0 实现 200ms 定时,控制 LED 闪烁;定时器/计数器 T1 实现
1 秒定时,在数码管上显示 2位数字,每秒加 1。
三、实验步骤
(1)按照下图,在 ISIS 中绘制电路原理图;
(2)在uVision3 中编写 C51 程序;
(3)利用uVision3 的编译调试功能检查程序的语法和逻辑错误;
(4)下载可执行文件,在 Proteus 中观察仿真结果,检验程序的正确性。



单片机源程序如下:
  1. #include<reg51.h>
  2. unsigned char code LED[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  3. unsigned char hour=23,min=59,sec=59;
  4. unsigned char num1=0,num2=0;
  5. sbit led1=P1^0;
  6. void display(unsigned char,unsigned char,unsigned char);

  7. void delay(unsigned int time)
  8.         {
  9.                 unsigned int j = 0;
  10.                 for(;time>0;time--)
  11.                         for(j=0;j<125;j++);
  12.         }

  13. void main(void)
  14.         {
  15.         TMOD=0x11;
  16.         TH0=(65536-50000)/256;
  17.         TL0=(65536-50000)%256;
  18.         TH1=(65536-50000)/256;
  19.         TL1=(65536-50000)%256;
  20.         EA=1;
  21.         ET0=1;
  22.         ET1=1;
  23.         TR0=1;
  24.         TR1=1;
  25.         while(1)
  26.         {
  27.         display(hour,min,sec);
  28.         }
  29. }


  30. void display(unsigned char hour,unsigned char min,unsigned sec)
  31. {
  32.        
  33.         P0=LED[hour/10];
  34.         P2=0xfe;
  35.         delay(1);
  36.         P2=0xff;
  37.        
  38.         P0=LED[hour%10];
  39.         P2=0xfd;
  40.         delay(1);
  41.         P2=0xff;
  42.        
  43.         P0=LED[min/10];
  44.         P2=0xfb;
  45.         delay(1);
  46.         P2=0xff;
  47.        
  48.         P0=LED[min%10];
  49.         P2=0xf7;
  50.         delay(1);
  51.         P2=0xff;
  52.        
  53.         P0=LED[sec/10];
  54.         P2=0xef;
  55.         delay(1);
  56.         P2=0xff;
  57.        
  58.         P0=LED[sec%10];
  59.         P2=0xdf;
  60.         delay(1);
  61.         P2=0xff;
  62. }

  63. void T0_time() interrupt 1
  64. {
  65.         TH0=(65536-50000)/256;
  66.         TL0=(65536-50000)%256;
  67.         num1++;
  68.         if(num1==4)
  69.         {
  70.         num1=0;
  71.         led1=!led1;
  72.         }
  73. }

  74. void T1_time() interrupt 3
  75. {
  76.         TH1=(65536-50000)/256;
  77.         TL1=(65536-50000)%256;
  78.         num2++;
  79.         if(num2==20)
  80.         {
  81.         num2=0;
  82.         sec++;
  83.         if(sec==60)
  84. ……………………

  85. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
实验三 定时器.zip (203.16 KB, 下载次数: 171)




评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶2 踩
回复

使用道具 举报

沙发
ID:404480 发表于 2018-9-30 19:10 | 只看该作者
本帖最后由 ponuyy 于 2018-10-2 01:57 编辑

如果用7SEG-MPX8的话,这个程序需要怎么改,就是把第三个和第五个数码管改成横杠显示,程序怎么搞
回复

使用道具 举报

板凳
ID:568590 发表于 2019-6-21 09:13 | 只看该作者
谢谢大佬 感激不尽
回复

使用道具 举报

地板
ID:570304 发表于 2019-6-23 21:50 | 只看该作者
感觉还可以
回复

使用道具 举报

5#
ID:622411 发表于 2019-10-12 08:52 来自手机 | 只看该作者
为什么源码和仿真都打不开???
回复

使用道具 举报

6#
ID:759356 发表于 2020-5-23 19:14 | 只看该作者
挺好的。
回复

使用道具 举报

7#
ID:762863 发表于 2020-5-27 20:47 | 只看该作者
是真的写的好!
回复

使用道具 举报

8#
ID:315554 发表于 2020-5-28 11:03 | 只看该作者
学习了,谢谢分享,代码看着写得很好,
回复

使用道具 举报

9#
ID:772139 发表于 2020-6-7 20:07 | 只看该作者
感谢大佬 感激
回复

使用道具 举报

10#
ID:772139 发表于 2020-6-7 20:08 | 只看该作者
感谢大佬 帮了我大忙了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表