按键调节时钟的应用实验

一、实验目的
(一)进一步掌握数码管的显示控制;
(二)进一步掌握单片机的定时器中断的应用;
(三)进一步掌握定时器工作方式的控制及各种寄存器的应用;
(四)掌握独立按键的使用方法。
二、主要仪器设备及耗材:
(一)电脑一台;
(二)单片机开发板一套。
三、实验原理
参照实验二数码管的电路原理图,利用数码管的显示原理以及定时器的工作原理,结合按键的应用,编程实现数码管显示时钟,并具有时钟调节功能。

四、实验内容及步骤
(一)实验内容利用所学的单片机定时器中断知识及电路知识,通过单片机编程控制数码管显示时钟,并具有调节时钟的功能。利用定时器中断的知识,通过编程控制数码管显示时钟,显示格式为XX—XX—XX,分别为小时、分钟、秒,并将矩阵键盘的第二行的前三个按键设置为独立按键,第一个按键控制调节时钟的小时、分钟、秒,第二个按键控制调节小时、分钟、秒的加,第三个按键控制调节小时、分钟、秒的减。
五. 工作原理
(一)80C51中断系统
80C51的中断系统有5个中断源(8052有6个),2个优先级,可实现二级中断嵌套。
80C51中断系统的结构如图5.1所示。

(二)定时/计数器的结构和工作原理
1.定时/计数器的结构定时/计数器的实质是加1计数器(16位),由高8位和低8位两个寄存器组成。TMOD是定时/计数器的工作方式寄存器,确定工作方式和功能;TCON是控制寄存器,控制T0、T1的启动和停止及设置溢出标志。定时/计数器的结构如图5.2所示。

2.定时/计数器的工作原理
加1计数器输入的计数脉冲有两个来源,一个是由系统的时钟振荡器输出脉冲经12分频后送来;一个是T0或T1引脚输入的外部脉冲源。每来一个脉冲计数器加1,当加到计数器为全1时,再输入一个脉冲就使计数器回零,且计数器的溢出使TCON中TF0或TF1置1,向CPU发出中断请求(定时/计数器中断允许时)。如果定时/计数器工作于定时模式,则表示定时时间已到;如果工作于计数模式,则表示计数值已满。可见,由溢出时计数器的值减去计数初值才是加1计数器的计数值。
(三)定时/计数器的控制
80C51单片机定时/计数器的工作由两个特殊功能寄存器控制。TMOD用于设置其工作方式;TCON用于控制其启动和中断申请。
1.工作方式寄存器TMOD工作方式寄存器TMOD用于设置定时/计数器的工作方式,低四位用于T0,高四位用于T1。其格式如图5.3所示。

2.控制寄存器TCONTCON的低4位用于控制外部中断,已在前面介绍。TCON的高4位用于控制定时/计数器的启动和中断申请。其格式如图5.4所示。

实现代码如下:

#include <reg51.h>#define smg_1 c=1;b=1;a=1 //选中第一个数码管
#define smg_2 c=1;b=1;a=0
#define smg_3 c=1;b=0;a=1
#define smg_4 c=1;b=0;a=0
#define smg_5 c=0;b=1;a=1
#define smg_6 c=0;b=1;a=0
#define smg_7 c=0;b=0;a=1
#define smg_8 c=0;b=0;a=0sbit k1=P3^1;//独立按键1
sbit k2=P3^0;
sbit k3=P3^2;sbit a=P2^2;//引脚位声明,用于选中数码管
sbit b=P2^3;
sbit c=P2^4;int t=0,count=0,h=11,m=1,s=50;//h,m,s可以初始化时间,此时的时间表示:11:01:50char code number[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};//用于数码管显示0-9void delay(unsigned int ms)
{char i;while(ms--)for(i=0; i<110; i++);
}void init()
{//补充:51单片机有2个定时器,0和1,TH0、TL0和ET0是管定时器0,//TH1、TL1和ET1是管定时器1,要用那个定时器就要用相应参数设置//我们这里使用的是定时器0,工作方式0,定时间隔5msTMOD = 0x00; //选用工作方式0TH0 = (8192-5000)/32;  //设置高8位, 8192=2^13; 5000表示计时间隔为5msTL0 = (8192-5000)%32;   //设置低5位EA=1;       //EA标志位置1,允许所有中断,相当于打开总开关ET0=1;      //ET0标志位置1,打开定时器0的中断开关,相当于打开支线开关 T0TR0=1;        //开启TR0计数,即开启定时器0计数
}void time0() interrupt 1
{   TH0 = (8192-5000)/32;TL0 = (8192-5000)%32;//计时到达5ms时,即高8位和低五位时,计数器溢出,自动向CPU发送溢出中断请求t++;          //hh-mm-ssif(t==200) //5ms*200=1s{t=0;s++;if(s==60){s=0;m++;if(m==60){m=0;h++;if(h==24){h=0;}}}}   }void display()
{smg_1;P0 = number[h/10];//h    delay(1); smg_2;P0 = number[h%10];//hdelay(1);smg_3;P0 = 0x40; //-delay(1);smg_4;P0 = number[m/10];//m   delay(1); smg_5;P0 = number[m%10];//mdelay(1);smg_6;P0 = 0x40;//-delay(1);smg_7;P0 = number[s/10];//s    delay(1); smg_8;P0 = number[s%10];//sdelay(1);
}void keyDown()
{if(!k1)//第一个键按下时{delay(10);if(!k1){TR0=0;count++;while(!k1);    //              if(count==4){TR0=1;count=0;}}       }if(!k2)//第二个键按下时{while(!k2);//第二个键按下后松手时,跳出该循环if(count==1){h++;if(h==24)  h=0;}if(count==2){m++;if(m==60)  m=0;}if(count==3){s++;if(s==60)  s=0;}}if(!k3)//第三个键按下时{while(!k3);//第三个键按下后松手时,跳出该循环if(count==1){h--;if(h==-1)  h=23;      }if(count==2){m--;if(m==-1)  m=59;}if(count==3){s--;if(s==-1)  s=59;}         }}void main()
{init();//初始化工作while(1){display();keyDown();}
}

单片机:按键调节时钟相关推荐

  1. 51单片机使用DS1302时钟芯片实现可调时钟

    文章目录 1.实现方法 2.所需函数模块 3.时钟写入(读取)函数(`DS1302.c`) 4.定时器初始化函数(`Timer0Init.c`) 5.按键扫描函数(`Key.c`) 6.时钟调整函数( ...

  2. 单片机c语言按键调整时钟,51单片机C语言可调时钟.doc

    51单片机C语言可调时钟 程序介绍:六位共阳数码管显示,时·分·秒均可用按键调节.短按时选位的时间按一次加一下,长按不放时时间按一定的频率增加! 本程序的是我参考别人的基础上移植.再加上自己的想法做出 ...

  3. 基于51单片机的自动浇花系统设计/基于51单片机的智能抽奖系统控制设计/基于51单片机的数字时钟与日历显示控制设计 毕业设计

    1147基于51单片机的自动浇花系统设计 设计思路:通湿度传感器实时监测湿度,通过LCD显示出实时的湿度采集值,可以通过按键设定目标界限,当达到这个界限值时,浇花系统的电机装置运行. 电路包含:LCD ...

  4. 【036】基于51单片机的电子时钟与秒表Proteus仿真设计

    一.压缩包资料内容 (1).基于51单片机的电子时钟与秒表proteus仿真设计一份: (2).基于51单片机的电子时钟与秒表proteus仿真设计keli源代码一份: (3).基于51单片机的电子时 ...

  5. 基于8051单片机实现电子时钟+数字秒表设计

    电子时钟+数字秒表设计 概述 设计任务的基本要求 整体方案 电路设计原理 软件设计 元件清单 项目下载地址 概述 电子时钟是一种利用数字电路来显示秒.分.时的计时装置,与传统的机械钟相比,它具有走时准 ...

  6. 自动感光调节LED灯亮度C语言程序,单片机PWM调节LED灯亮度

    刚搞完飞思卡尔智能车,昨天我一起做车的搭档跑来跟我说魏老师(我们系的前主任,不知道他们怎么认识的....)叫他帮忙做个可通过无线遥控调节LED灯亮度的设计方案,问我有没有兴趣做做,主要是魏老师也是受他 ...

  7. 单片机课程设计——《基于AT89S52单片机和DS1302时钟芯片的电子时钟(可蓝牙校准)》...

    引言 本设计以AT89S52单片机为控制核心,时钟芯片DS1302提供时钟源,配合LCD1602液晶显示模块,组成基本硬件系统,同时利用HC-05嵌入式蓝牙串口通讯模块,可在手机端进行日期.时间的校准 ...

  8. 基于微型计算机系统的实时时钟设计,基于51单片机的实时时钟设计报告.doc

    基于51单片机的实时时钟设计报告 PAGE PAGE 24 课程设计(论文)任务书 信息工程 学 院 信息工程 专 业 (2) 班 一.课程设计(论文)题目 嵌入式课程设计 二.课程设计(论文)工作自 ...

  9. 单片机课程设计——《基于AT89S52单片机和DS1302时钟芯片的电子时钟(可蓝牙校准)》... 1

    引言 本设计以AT89S52单片机为控制核心,时钟芯片DS1302提供时钟源,配合LCD1602液晶显示模块,组成基本硬件系统,同时利用HC-05嵌入式蓝牙串口通讯模块,可在手机端进行日期.时间的校准 ...

最新文章

  1. [android] ubuntu开发环境
  2. usaco Mother's Milk
  3. Hadoop的Python语言封装
  4. MySql 查询小数保留两位小数
  5. php与c语言流程控制语句,小蚂蚁学习C语言(7)——C语言流程控制之if
  6. Fun 3.0 发布——资源部署、依赖下载、代码编译等功能又又又增强啦!
  7. php生成图片水印,PHP生成图片加文字及图案水印办法
  8. Divide and conquer:Dropping tests(POJ 2976)
  9. Nginx SSL 结合Tomcat 重定向URL变成HTTP的问题
  10. 跑python gpu利用率低_提高GPU利用率,阿里云cGPU容器技术助力人工智能提效降本...
  11. AppCompatDialog背景透明
  12. QT中关于书签的操作
  13. volte的sip信令流程_VOLTE-SIP代码详解及SIP流程图解
  14. 和差测角天线方向图仿真matlab 含代码
  15. Awvs详细使用教程
  16. SpringBoot整合MyBatis(七)
  17. 关于阿里云ACP认证的那些事儿
  18. 安装显卡驱动显示NVIDIA图形驱动程序安装失败
  19. 休闲娱乐 - 种花记
  20. 我,27岁,渣本理科男,目前考虑转行python,但又不知道该从何学起......

热门文章

  1. 如何购买服务器及域名(阿里)
  2. 微信小程序留言功能实现
  3. 技术研发:如何突破自己的技术瓶颈期
  4. 计算机毕业设计(2)python毕设作品之旅游景点景区售票系统
  5. 建立“知识共享”生态圈,培养塔尔斯基数学小后代,不是说假话、放空炮
  6. 如何在TIA 博途中计算终端设备(例如水泵)的运行时间(附FB库文件)?
  7. TIA博途SCL入门学习(二)常用基本控制语句用法和举例
  8. vue canvas typescript 绘制时间标尺
  9. 模拟抽奖过程的C语言程序设计,C++抽奖程序实现方法
  10. torchaudio音频基础知识学习