首页 > 其他分享 >51单片机-时钟

51单片机-时钟

时间:2023-09-29 19:33:40浏览次数:47  
标签:10 LSB LSC LSA 51 单片机 smg display 时钟

#include "reg52.h"
#include <intrins.h>
typedef unsigned char uchar;
typedef unsigned int uint;
typedef unsigned char u8;
typedef unsigned int u16;
typedef unsigned long u32;
// sbit led = P2 ^ 0;
sbit LSA = P2 ^ 2;
sbit LSB = P2 ^ 3;
sbit LSC = P2 ^ 4;

// display 0-9 A-F
u8 smgduan[17] = {0x3f, 0x06, 0x5b, 0x4f,
                  0x66, 0x6d, 0x7d, 0x07,
                  0x7f, 0x6f, 0x77, 0x7c,
                  0x39, 0x5e, 0x79, 0x71};
sbit key1 = P3 ^ 1;
sbit led = P2 ^ 0;
static u32 number = 86389;

// unsigned char h = 23, m = 59, s = 59;
// unsigned char f1 = 0, f2 = 0, f3 = 0;
void delay(uint i)
{
    while (i--)
        ;
}
void keypros()
{
    if (0 == key1)
    {
        delay(1000);
        if (0 == key1)
        {
            led = ~led;
        }
        while (!key1)
            ;
    }
}
void Timer0Init()
{
    TMOD |= 0x01;
    TH0 = 0xfc;
    TL0 = 0x18;
    ET0 = 1;
    EA = 1;
    TR0 = 1;
    // TL1 = (65536 - 50000) % 256;
    // TH1 = (65536 - 50000) / 256;
}
void smg_display(u8 location, u8 num)
{
    switch (location - 1)
    {
    case (0):
        LSA = 1;
        LSB = 1;
        LSC = 1;
        break;
    case (1):
        LSA = 0;
        LSB = 1;
        LSC = 1;
        break;
    case (2):
        LSA = 1;
        LSB = 0;
        LSC = 1;
        break;
    case (3):
        LSA = 0;
        LSB = 0;
        LSC = 1;
        break;
    case (4):
        LSA = 1;
        LSB = 1;
        LSC = 0;
        break;
    case (5):
        LSA = 0;
        LSB = 1;
        LSC = 0;
        break;
    case (6):
        LSA = 1;
        LSB = 0;
        LSC = 0;
        break;
    case (7):
        LSA = 0;
        LSB = 0;
        LSC = 0;
        break;
    }
    P0 = smgduan[num];
    delay(100);
    P0 = 0x00;
}
void showNumbers()
{
    u32 h, m, s;
    h = number / 3600;
    m = number % 3600 / 60;
    s = number % 60;
    if (h < 10)
    {
        smg_display(1, 0);
        smg_display(2, h);
    }
    else if (h < 24)
    {
        smg_display(1, h / 10);
        smg_display(2, h % 10);
    }
    else
    {
        number = 0;
    }
    if (m < 10)
    {
        smg_display(3, 0);
        smg_display(4, m);
    }
    else
    {
        smg_display(3, m / 10);
        smg_display(4, m % 10);
    }
    if (s < 10)
    {
        smg_display(5, 0);
        smg_display(6, s);
    }
    else
    {
        smg_display(5, s / 10);
        smg_display(6, s % 10);
    }
}
void main()
{
    Timer0Init();
    led = 1;
    showNumbers();
    while (1)
    {
        showNumbers();
        //     keypros();
        //     displayNumber();
    }
}
void Timer0() interrupt 1
{
    static unsigned int i;
    TH0 = 0xfc;
    TL0 = 0x18;
    i++;
    if (1000 == i)
    {
        i = 0;
        number++;
    }
}

 

标签:10,LSB,LSC,LSA,51,单片机,smg,display,时钟
From: https://www.cnblogs.com/dogingate/p/17737195.html

相关文章

  • [LeetCode] 2251. 花期内花的数目 - 二分查找/有序数组
    Problem:2251.花期内花的数目思路看题目应该是一道比较经典的差分,本来准备拿差分数组做的,后来搂了一眼题解,发现用二分的方法更简单解题方法此题有一种很简便的方法,第i个人到达时间为people[i],所以我们不难找到在这个时间之前花期已经开始的花的数量,即v1=start<=people[i]......
  • 单片机MCS-51指令集
    HexBytesMnemonicOperands001NOP012AJMPcodeaddr023LJMPcodeaddr031RRA041INCA052INCdataaddr061INC@R0071INC@R1081INCR0091INCR10A1INCR20B1INCR30C1INCR40D1INCR50E1IN......
  • LC2251 花期内花的数目
    方法一:差分因为是先修改后查询,很容易想到差分,但因为数据值域\([-10^9,10^9]\)过大,所以不能使用差分数组,而应用map进行存储,如代码所示:map<int,int>diff;//正常进行差分操作for(auto&f:flowers){diff[f[0]]++;diff[f[1]+1]--;}//dosomethingautoit......
  • Go每日一库之51:gabs
    简介JSON是一种非常流行的数据交换格式。每种编程语言都有很多操作JSON的库,标准库、第三方库都有。Go语言中标准库内置了JSON操作库encoding/json。我们之前也介绍过专门用于查询JSON串的库gjson和专门用于修改JSON串的库sjson,还有一个非常方便的操作JSON数据的命令......
  • 随想录Day8|344. 反转字符串、541. 反转字符串Ⅱ、LCR 122. 路径加密、151. 反转字符
    随想录Day8|344.反转字符串、541.反转字符串Ⅱ、LCR122.路径加密、151.反转字符串里的单词、LCR182.动态口令 题目越来越长了…… 344.反转字符串文章&视频讲解编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组s的形式给出。不要给另外的数......
  • 单片机升级,推荐此79元双核[email protected]国产平台的8个理由
    含税79元即可运行Linux操作系统对于嵌入式软件开发者而言,单片机令人最痛苦的莫过于文件操作。79元T113-i工业核心板(基于全志国产处理器,国产化率100%)可运行Linux操作系统,可使用Linux命令对文件进行一键操作,既方便又快捷。不仅如此,Linux操作系统还具备如下三大优点:(1)多用户多任务......
  • CF1072 Codeforces Round 517 (Div. 2, based on Technocup 2019 Elimination Round 2
    CF1072AGoldenPlate第\(i\)个矩形的周长为\(2(w-4(i-1))+2(h-4(i-1))-4\),枚举\(i\)求和。#include<iostream>#include<cstdio>usingnamespacestd;intn,m,k;intmain(){ scanf("%d%d%d",&n,&m,&k); intans=0; for(i......
  • 单片机原理及应用(第四章)小结
    1.C语言中while和dowhile的不同点是什么?while满足条件才会循环dowhile先运行一次再判断条件2.若在C语言中的switch操作漏掉break,会发生什么?会接着执行下一个case无论下一个case满足不满足条件,直至switch结束或遇到break3.编写程序用for循环实现1-20连加......
  • 518_今天是母亲节,一起祝妈妈节日快乐吧!
    这是一篇原发布于2020-05-1009:26:00得益小站的文章,备份在此处。起源母亲节这个节日最早是出现在希腊,而现代的母亲节起源于美国,是一位名叫贾维斯的妇女倡导,并且由她的女儿安娜·贾维斯发起创立的。每年公历五月的第二个星期日,就是现在的母亲节。相传古希腊在一月八日这一天,......
  • 8.9 RDTSC时钟检测反调试
    RDTSC时钟检测同样可实现反调试检测,使用时钟检测方法是利用rdtsc汇编指令,它返回至系统重新启动以来的时钟数,并且将其作为一个64位的值存入EDX:EAX寄存器中,通过运行两次rdstc指令,然后计算出他们之间的差值,即可判定对方是否在调试我们的程序。可以利用时钟检测技术来检测程序是否被......