单片机
返回首页

简单做的基于51单片机的数码管时钟

2019-12-11 来源:51hei

看看抽屉的材料,就想做做东西玩玩。本来想做99码表的,结果按键开关不够,就改成了时钟。话不多说,直接上图。
最小系统

 



显示模块
 


最后效果
 

仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
 

单片机源程序如下:

/*********************************************************************************

*实验名   :数码管动态显示

*实验效果        :8位数码管显示数字12345678

*注意   : 每位数码管显示之间延迟时间小于3ms可看见8位数码管同时点亮

*

*********************************************************************************/

#include

#define uchar unsigned char

#define uint unsigned int

        

uint k=0;

uint second=0;//秒

uint min =0;//分

uint hour=1;//时


sbit we1=P3^3; //位选

sbit we2=P3^1;

sbit we3=P3^2;

sbit we4=P3^0;

sbit L0=P2^0;


uchar code sz[17]={0x3f , 0x06 , 0x5b ,0x4f , 0x66 , 0x6d ,0x7d ,

                   0x07 , 0x7f , 0x6f ,0x77 , 0x7c , 0x39 , 

                   0x5e , 0x79 , 0x71 , 0x00};         //0-9&A-F&“不显示”  字型码


void delay(uint xms)                  //xms等于几就延迟几毫秒

{

    uint i,j;

        for(i=xms;i>0;i--)

            for(j=112;j>0;j--);

}


void Init_timer0(void)

{

  TMOD |= 0X01;                      //工作方式1 内部寄存器控制的定时功能

        TH0=0X3c;                         //高八位的初值

        TL0=0Xb0;                         //第八位初值

        EA=1;                            //开启整体中断允许

        ET0=1;                           //开启定时器0中断允许

        TR0=1;                                                         //开始计数

}


void Timer0_isr(void)interrupt 1

{

  TH0=0x3c;

        TL0=0xb0;

        k++;

}


void main()

{

        Init_timer0();

    while(1)

        {

                if(k==20)  //20次1秒

                {

                second++;

                k=0;

                if(second==60)

                {

                  second =0;

                        min++;

                        if(min==60)

                        {

                           min=0;

                                 hour++;

                                if(hour==13)

                                {

                                  hour=1;

                                }

                        }

                }

                

                }

                P1=sz[min%10];   //分显示

                we4 =0;

                delay(5);

                we4=1;

                        

                P1=sz[min/10];   

                we3=0;

                delay(5);

                we3=1;

                

                P1=sz[hour%10];   //时显示

                we2=0;

                delay(5);

                we2=1;

                

                P1=sz[hour/10];   

                we1=0;

                delay(5);

                we1=1;

                

                /*P1=sz[0];  //显示0

                we1=0;

                delay(10);

                we1=1;

                

                P1=sz[1];   //显示1

                we2=0;

                delay(10);

                we2=1;

                

                P1=sz[2];   //显示2

                we3=0;

                delay(10);

                we3=1;

                

                P1=sz[3];   //显示3

                we4=0;

                delay(10);

                we4=1;*/

        }

}

…………………



进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • PIC单片机控制的遥控防盗报警器电路

  • 使用ESP8266从NTP服务器获取时间并在OLED显示器上显示

  • 用NE555制作定时器

  • 如何构建一个触摸传感器电路

  • 基于ICL296的大电流开关稳压器电源电路

  • 基于TDA2003的简单低功耗汽车立体声放大器电路

    相关电子头条文章