51开发板独立按键调节时钟的应用实验、可以使用独立按键进行时间的调节(可对时间重新自定义)

简介: 51开发板独立按键调节时钟的应用实验、可以使用独立按键进行时间的调节(可对时间重新自定义)

实验原理:

参照实验二数码管的电路原理图,利用数码管的显示原理以及定时器的工作原理,结合按键的应用,编程实现数码管显示时钟,并具有时钟调节功能。

实验内容:

利用所学的单片机定时器中断知识及电路知识,通过单片机编程控制数码管显示时钟,并具有调节时钟的功能。利用定时器中断的知识,通过编程控制数码管显示时钟,显示格式为 XX—XX—XX,分别为小时、分钟、秒,并将矩阵键盘的第二行的前三个按键设置为独立按键,第一个按键控制调节时钟的小时、分钟、秒,第二个按键控制调节小时、分钟、秒的加,第三个按键控制调节小时、分钟、秒的减。

实验代码:

#include<REGX52.h>
typedef unsigned char uchar;
//共阴极段码
uchar code leddata[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
 
char s=56,m=59,h=23;
int n;
//延时函数
void Delay(unsigned int xms){
  unsigned char i, j;
  while(xms--){
    i = 2;
    j = 239;
    do{
      while (--j);
    } while (--i);
  }
}
void init(){
  TMOD=0x01;//定时器 0 的方式 1,定时 4ms 0000 0001
  TH0=(65536-4000)/256;
  TL0=(65536-4000)%256;
  ET0=1;      //小开关
  EA=1;        //总开关
  TR0=1;  //启动定时器
}
 
void display(uchar hour,uchar minute,uchar second){
    int i;
    for(i=1;i<=8;i++){
        switch(i){
           case 1: P2_4=0;P2_3=0;P2_2=0;P0=leddata[second%10];break;
           case 2: P2_4=0;P2_3=0;P2_2=1;P0=leddata[second/10];break;
           case 3: P2_4=0;P2_3=1;P2_2=0;P0=0x40;break;//显示  —
           case 4: P2_4=0;P2_3=1;P2_2=1;P0=leddata[minute%10];break;
           case 5: P2_4=1;P2_3=0;P2_2=0;P0=leddata[minute/10];break;
           case 6: P2_4=1;P2_3=0;P2_2=1;P0=0x40;break;//显示  —
           case 7: P2_4=1;P2_3=1;P2_2=0;P0=leddata[hour%10];break;
           case 8: P2_4=1;P2_3=1;P2_2=1;P0=leddata[hour/10];break;
        }
        Delay(1);
        P0=0;        //消影
    }
}
 
void key_scan(){
 
    static uchar flag=0;
    if(P3_1==0){
        Delay(20);
        while(P3_1==0)
        /*display(h,m,s)*/;
        Delay(20);
        TR0=0;//关闭中断请求
        flag++;
        if(flag==4){
           flag=0;
            TR0=1;
            }
    }
        
    if(flag!=0){
 
        switch(flag){
            case 1:if(P3_0==0){ Delay(20);while(P3_0==0)display(h,m,s);Delay(20);h++; if(h>23) h=0;}break;
            case 2:if(P3_0==0){ Delay(20);while(P3_0==0)display(h,m,s);Delay(20);m++; if(m>59) m=0;}break;
            case 3:if(P3_0==0){ Delay(20);while(P3_0==0)display(h,m,s);Delay(20);s++; if(s>59) s=0;}break;
            default:break;
        }
        switch(flag){
            case 1:if(P3_2==0){ Delay(20);while(P3_2==0)display(h,m,s);Delay(20);h--; if(h<0) h=23;}break;
            case 2:if(P3_2==0){ Delay(20);while(P3_2==0)display(h,m,s);Delay(20);m--; if(m<0) m=59;}break;
            case 3:if(P3_2==0){ Delay(20);while(P3_2==0)display(h,m,s);Delay(20);s--; if(s<0) s=59;}break;
            default:break;
        }
    }
}
void main(){
 
    init();
    while(1){
        display(h,m,s);
        key_scan();       
    } 
}
//4毫秒的定时器中断
void timer0() interrupt 1
{
    TH0=(65536-4000)/256;
    TL0=(65536-4000)%256;
    n++;
    if(n==250)
    {
        n=0;
        s++;
        if(s>=60)
        {
            s=0;
            m++;
           if(m>=60)
            {
                m=0;
                h++;
                if(h>=24)
                h=0;
            } 
        } 
    } 
}

主流程图:

仿真电路图:

开发板电路:

实验效果图:

按键K1 效果(有四个档位,按第一次时暂停,并选中“时”,按第二次选中”分“,按第三次选中”分“

,第四次按下结束暂停,继续计时)

按键K2、K3效果:(K2按下被选中的“时分秒”被加一;K3按下被选中的“时分秒”被减一)

相关文章
|
4月前
|
弹性计算 数据可视化
阿里云服务器管理控制台(后台)在哪登录?统一阿里云后台链接入口整理,一键直达
阿里云服务器管理控制台是ECS与轻量应用服务器的统一可视化后台,支持重启、远程连接、重装系统等操作。主入口为控制台首页(home.console.aliyun.com),亦可直连ECS官网:https://t.aliyun.com/U/AZBUsA 或轻量官网:https://t.aliyun.com/U/dwftch
1216 8
|
9月前
|
IDE 编译器 开发工具
嵌入式开发必备!Keil uVision5 C51 V9.61 安装激活 + 汉化完整教程, 含(Keil MDK 5.39)
Keil C51 V9.61是一款专用于8051系列单片机的集成开发环境,支持主流厂商芯片,集编辑、编译、仿真于一体,基于μVision5平台,操作便捷。提供C编译器、汇编器、调试器等全套工具,适用于嵌入式开发。附带安装与激活教程,可实现汉化界面,提升使用体验。(237字)
12928 9
51开发板同一程序实现数码管实现时钟显示、秒表计时。通过独立按键选择模式(时钟/秒表)、时间的重定义
51开发板同一程序实现数码管实现时钟显示、秒表计时。通过独立按键选择模式(时钟/秒表)、时间的重定义
700 3
【51单片机】独立按键,每个按键不同功能,数码管数值的加减,控制流水灯模式,包含按键消抖,数码显示,流水灯
【51单片机】独立按键,每个按键不同功能,数码管数值的加减,控制流水灯模式,包含按键消抖,数码显示,流水灯
1227 1
51单片机用汇编语言实现独立按键检测,每个按键有不同功能,包含按键消抖程序
51单片机用汇编语言实现独立按键检测,每个按键有不同功能,包含按键消抖程序
671 3
【51单片机】通过定时器中断 在8位数码管显示时间
【51单片机】通过定时器中断 在8位数码管显示时间
587 2
|
传感器 数据采集 API
C语言与硬件编程:GPIO操作
C语言与硬件编程:GPIO操作
|
图形学
【用unity实现100个游戏之18】从零开始制作一个类CSGO/CS2、CF第一人称FPS射击游戏——基础篇3(附项目源码)
【用unity实现100个游戏之18】从零开始制作一个类CSGO/CS2、CF第一人称FPS射击游戏——基础篇3(附项目源码)
1079 0