风花雪月153 2023-01-02 22:58 采纳率: 0%
浏览 205
已结题

用keil和proteus设计单片机电子时钟

#用keil和proteus设计单片机电子时钟,要求4位八段数码管显示小时分钟,中间的作为秒闪烁,两个按键,一个递增小时一个递增分钟
#有偿谢谢各位大佬!keil文件和proteus连接图都要,满足要求一定会采纳的!

img

  • 写回答

5条回答 默认 最新

  • |__WhoAmI__| 2023-01-02 23:30
    关注
    #include <reg51.h>
    
    #define uchar unsigned char
    #define uint unsigned int
    
    uchar code table[10] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};
    
    sbit beep = P2 ^ 3;
    sbit key1 = P3 ^ 2;
    sbit key2 = P3 ^ 3;
    
    uint time;
    uchar second, minute, hour;
    
    void delay(uint z)
    {
        while (z--);
    }
    
    void init()
    {
        TMOD = 0x01;
        TH0 = (65536 - 50000) / 256;
        TL0 = (65536 - 50000) % 256;
        ET0 = 1;
        EA = 1;
        TR0 = 1;
    }
    
    void interrupt_timer0() interrupt 1
    {
        TH0 = (65536 - 50000) / 256;
        TL0 = (65536 - 50000) % 256;
        time++;
        if (time == 50)
        {
            time = 0;
            second++;
            if (second == 60)
            {
                second = 0;
                minute++;
                if (minute == 60)
                {
                    minute = 0;
                    hour++;
                    if (hour == 24)
                    {
                        hour = 0;
                    }
                }
            }
        }
    }
    
    void main()
    {
        init();
        while (1)
        {
            if (!key1)
            {
                delay(200);
                if (!key1)
                {
                    hour++;
                    if (hour == 24)
                    {
                        hour = 0;
                    }
                    while (!key1)
                        ;
                }
            }
            if (!key2)
            {
                delay(200);
                if (!key2)
                {
                    minute++;
                    if (minute == 60)
                    {
                        minute = 0;
                    }
                    while (!key2)
                        ;
                }
            }
            P1 = table[hour / 10];
            P0 = 0xfe;
            delay(5);
            P0 = 0xff;
            P1 = table[hour % 10];
            P0 = 0xfd;
            delay(5);
            P0 = 0xff;
            P1 = 0x80;
            P0 = 0xfb;
            delay(5);
            P0 = 0xff;
            P1 = table[minute / 10];
            P0 = 0xf7;
            delay(5);
            P0 = 0xff;
            P1 = table[minute % 10];
            P0 = 0xef;
            delay(5);
            P0 = 0xff;
            if (second % 2 == 0)
            {
                P1 = 0xff;
                P0 = 0xdf;
                delay(5);
                P0 = 0xff;
            }
        }
    }
    

    需要以下元件:

    C51 单片机:AT89S52
    八段数码管:5V
    按键 K1K2:5V
    外部晶振:5V
    电阻:1KΩ
    

    如何连接:

    C51 单片机的 P0 口连接到八段数码管的段选端,P1 口连接到数码管的数值选择端。按键 K1 和 K2 分别连接到单片机的 P3.2P3.3 口。定时器的输入源选择为外部晶振。
    

    仅供参考,望采纳,谢谢。

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 1月3日
  • 修改了问题 1月2日
  • 修改了问题 1月2日
  • 修改了问题 1月2日
  • 展开全部