登录|立即注册|使用QQ帐号登录
论坛 > 51单片机
发帖|
看11361|回9|收藏
楼主 ID:336422 只看他
2018-5-23 13:22
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 中观察仿真结果,检验程序的正确性。

0.png
0.png
单片机源程序如下:

代码:

  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, 2018-5-23 13:20 上传)

下载积分: 黑币 -5






沙发 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黑电子论坛

Powered by Discuz! X3.1

首页|标准版|触屏版|电脑版