xwh1533487022 2015-06-18 13:45 采纳率: 0%
浏览 5320

以51单片机为核心的时钟,在LED显示器上显示当前的时间:

显示格式为“时时:分分:秒秒”。
用4个功能键操作来设置当前时间。功能键K1~K4功能如下。
K1—进入设置现在的时间。
K2—设置小时(按一次,小时增1)。
K3—设置分钟(按一次,分钟增1)。
K4—确认完成设置。
程序执行后工作指示灯闪动,表示程序开始执行,LED显示“00:00:00”,然后开始计时。
本题可以考虑用LCD(比如:LCD1602)来实现显示,则显示更加清楚。

  • 写回答

2条回答

  • signsw 2015-06-21 14:01
    关注

    #include
    #include
    #define uchar unsigned char
    #define uint unsigned int
    #define shuju P0
    #define bus P1
    //#define lcdbus P3
    sbit rs=P2^7;
    sbit rw=P2^6;
    sbit e=P2^5;
    sbit sda=P2^0; //IO口定义
    sbit scl=P2^1;
    uchar r;
    void delayms(int i)
    {
    int j;
    for(j=0;j<i;j++);
    }
    void enable()
    {
    rs=0;
    rw=0;
    e=0;
    delayms(65000);
    e=1;
    }
    void write()
    {
    rs=1;
    rw=0;
    e=0;
    delayms(65000);
    e=1;
    }
    void chushi()
    {
    sda=0;
    scl=0;
    shuju=0x01;
    enable();
    shuju=0x38;
    enable();
    shuju=0x0f;
    enable();
    shuju=0x06;
    enable();
    shuju=0x80;
    enable();
    }
    void display(uchar i)
    {
    shuju=i;
    write();
    }
    void jianpan()
    {

    uchar a;
    uchar k;
    bus=0xff;
    bus=0xef; //扫描第一行
    delayms(6000);
    a=bus;
    a=a&0x0f;
    if(a!=0x0f)
    {
    delayms(2000);
    if(a!=0x0f)
    {
    switch(a)
    {
    case 0x0e:
    k=0x41;

          break;
     case 0x0d:
          k=0x42;
    
          break;
     case 0x0b:
          k=0x43;
    
          break;
     case 0x07:
          k=0x44;
    
          break;
    }
      display(k);
       r=r-1;
     while(a!=0x0f)
     {
      bus=0x0f;
      delayms(2000);
      a=bus;      
     }
    

    }
    }

    bus=0xdf; //扫描第二行
    delayms(6000);
    a=bus;
    a=a&0x0f;
    if(a!=0x0f)
    {
    delayms(2000);
    if(a!=0x0f)
    {
    switch(a)
    {
    case 0x0e:
    k=0x45;
    break;
    case 0x0d:
    k=0x46;
    break;
    case 0x0b:
    k=0x47;
    shuju=0x07;
    break;
    case 0x07:
    k=0x48;
    break;
    }
    display(k);
    r=r-1;
    while(a!=0x0f)
    {
    bus=0x0f;
    delayms(2000);
    a=bus;

      }
     }  
    }     
    bus=0xbf;        //扫描第3行
    
    delayms(6000);
    a=bus;
    a=a&0x0f;
    if(a!=0x0f)
    {
     delayms(2000);
     if(a!=0x0f)
     {
     switch(a)
     {
      case 0x0e:
           k=0x49;
    
           break; 
      case 0x0d:
           k=0x4a;
    
           break;
      case 0x0b:
          k=0x4b;
           break;
      case 0x07:
           k=0x4c;
           break;
     }
     display(k);
      r=r-1;
     while(a!=0x0f)
      {
      bus=0x0f;
       delayms(2000);
       a=bus;
    
      }
     }  
    }     
     bus=0x7f;        //扫描第4行
     delayms(6000);
    a=bus;
    a=a&0x0f;
    if(a!=0x0f)
    {
     delayms(2000);
     if(a!=0x0f)
     {
     switch(a)
     {
      case 0x0e:
           k=0x4d;
           break; 
      case 0x0d:
           k=0x4e;
           break;
      case 0x0b:
           k=0x4f;
           break;
      case 0x07:
           k=0x50;
           break;
     }
     display(k);
      r=r-1;
     while(a!=0x0f)
      {
       bus=0x0f;
       delayms(2000);
       a=bus;      
      }
     }  
    }     
    

    }
    void main()
    {
    while(1)
    {
    chushi();
    r=0x10;
    while(r>0)
    {
    jianpan();
    }
    shuju=0xc0;
    enable();
    r=0x10;
    while(r>0)
    {
    jianpan();
    }
    }
    }

    评论

报告相同问题?

悬赏问题

  • ¥15 急matlab编程仿真二阶震荡系统
  • ¥20 TEC-9的数据通路实验
  • ¥15 ue5 .3之前好好的现在只要是激活关卡就会崩溃
  • ¥50 MATLAB实现圆柱体容器内球形颗粒堆积
  • ¥15 python如何将动态的多个子列表,拼接后进行集合的交集
  • ¥20 vitis-ai量化基于pytorch框架下的yolov5模型
  • ¥15 如何实现H5在QQ平台上的二次分享卡片效果?
  • ¥15 python爬取bilibili校园招聘网站
  • ¥30 求解达问题(有红包)
  • ¥15 请解包一个pak文件