找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1475|回复: 1
打印 上一主题 下一主题
收起左侧

51单片机实现led数码管的时钟显示

[复制链接]
跳转到指定楼层
楼主
ID:536191 发表于 2019-5-12 16:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
具体程序如下:

#include<reg52.h>
#include<ABSACC.h>

#define uchar unsigned char
#define uint  unsigned int
#define OSC_FREQ            12000000                                                        //12Mhz
#define C50us              (65536 - OSC_FREQ/(12000000/35))                //50us ¶¨ê±
#define C1ms               (65536 - OSC_FREQ/(12000000/980))        //1ms¶¨ê±
#define C10ms              (65536 - OSC_FREQ/(12000000/9970))        //10ms¶¨ê±
#define COM8255 XBYTE[0XFFFF]
#define PA8255 XBYTE[0XFFFC]         //1100 A1A0
#define PB8255 XBYTE[0XFFFD]         //1101
#define PC8255 XBYTE[0XFFFE]         //1110

sbit dp=P2^7; //êyÂë1ü¶ÎÂë¿ØÖÆf
sbit g=P2^6; //êyÂë1ü¶ÎÂë¿ØÖÆe
sbit f=P2^5; //êyÂë1ü¶ÎÂë¿ØÖÆf
sbit e=P2^4; //êyÂë1ü¶ÎÂë¿ØÖÆe
sbit d=P2^3; //êyÂë1ü¶ÎÂë¿ØÖÆd
sbit c=P2^2; //êyÂë1ü¶ÎÂë¿ØÖÆc
sbit b=P2^1; //êyÂë1ü¶ÎÂë¿ØÖÆb
sbit a=P2^0; //êyÂë1ü¶ÎÂë¿ØÖÆa

sbit LED1=P1^7; //êyÂë1üλ¿Ø×óÆe1,12Ñô¼«
sbit LED2=P1^6; //êyÂë1üλ¿Ø2
sbit LED3=P1^5; //êyÂë1üλ¿Ø3
sbit LED4=P1^4; //êyÂë1üλ¿Ø4

sbit P1_0 = P1^0;
sbit P1_1 = P1^1;
sbit P1_2 = P1^2;
sbit P1_3 = P1^3;
sbit P1_4 = P1^4;

sbit SDA =P2^6;
sbit SCLK =P2^5;
sbit SLCK=P2^4;

uchar disp[]={0xfc,0x0c,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6};
uchar disp1[]={0x89,0x86,0xc7,0xc7,0xfc,0x02};
uchar disp2[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

uchar Hour = 23;
uchar Minute = 56;
uchar Second = 32;
uchar count_m;

void Set_Init_Timer1( )                       //¶¨ê±Æ÷13õê¼»ˉoˉêy
{
        EA=1;                       //¿a×üÖD¶Ï
        ET1=1;                      //ÔêDí¶¨ê±Æ÷1ÖD¶Ï
    TR1=1;                      //Æô¶ˉ¶¨ê±Æ÷1
}

void Set_INT0()                        //ía2¿ÖD¶Ï03õê¼»ˉ
{
    EA = 1;                            //¿a·Å×üÖD¶Ï
        EX0 = 1;                        //ía2¿ÖD¶Ï0¿aÖD¶Ï
        IT0 = 1;                        //ía2¿ÖD¶Ï0±ßÑØ′¥·¢·½ê½
}

void Set_Init_8255()
{                                                                         //  MOV A,#82H
        COM8255=0x82;         //8255B??? MOV  DPTR,#0FFFFH          MOVX @DPTR,A
        P1_2=0;                 //8255??P1_2=0
        P1_1=1;                 //8255??P1_1=1
        P1_0=0;                 //8255??P1_0=0
}

void  DelayX1ms(uint count)
{
   uint j;
   while(count--!=0)
   {
     for(j=0;j<72;j++);
   }
}

void disp1_HELLO_h4()
{
    LED4=1;
        LED3=1;
        LED2=1;
        LED1=0;
        P2=disp1[0];
        DelayX1ms(1);
        LED4=1;
        LED3=1;
        LED2=0;
        LED1=1;
        P2=disp1[1];
        DelayX1ms(1);
        LED4=1;
        LED3=0;
        LED2=1;
        LED1=1;
        P2=disp1[2];
        DelayX1ms(1);
    LED4=0;
        LED3=1;
        LED2=1;
        LED1=1;
        P2=disp1[3];
        DelayX1ms(1);
}

void disp1_HELLO_L2()
{
        char n;
        for(n=0;n<8;n++)
        {
                SBUF = disp1[4];
                while(!TI);
                TI=0;
                SLCK = 0;
        SLCK=1;
                SBUF = disp1[5];
                while(!TI);
                TI=0;
                SLCK = 0;
        SLCK=1;
               
        }
}


void disp_led_Hour(uchar hour )
{
    LED4=1;
        LED3=1;
        LED2=1;
        LED1=0;
        P2=disp2[hour/10];
        DelayX1ms(1);
        LED4=1;
        LED3=1;
        LED2=0;
        LED1=1;
        P2=disp2[hour%10];
        DelayX1ms(1);
       
}

void disp_led_Minute(uchar minute )
{
    LED4=1;
        LED3=0;
        LED2=1;
        LED1=1;
        P2=disp2[minute/10];
        DelayX1ms(1);
    LED4=0;
        LED3=1;
        LED2=1;
        LED1=1;
        P2=disp2[minute%10];
        DelayX1ms(1);
}

void disp_led_Second(uchar second)
{
        char n;
        for(n=0;n<8;n++)
        {
                SBUF = disp[second/10];
                while(!TI);
                TI=0;
                SLCK = 0;
        SLCK=1;
                SBUF = disp[second%10];
                while(!TI);
                TI=0;
                SLCK = 0;
        SLCK=1;
               
        }
}

void Timer1_int( ) interrupt 3 using 1   //¶¨ê±Æ÷1ÖD¶Ï·tÎñ
{
   TMOD = 0x10;
        TH1 = C10ms/256;                 //10ms¶¨ê±
   TL1 = C10ms%256;
        EA=1;                       //¿a×üÖD¶Ï
        ET1=1;                      //ÔêDí¶¨ê±Æ÷1ÖD¶Ï
   TR1=1;                      //Æô¶ˉ¶¨ê±Æ÷1
        count_m++;
        if (count_m==92)                       //ÿÃëê±¼äμ½       
                {       
                   Second++;
               count_m=0;
                   if(Second==60)                     //ÿ·Öê±¼äμ½
                        {
                                Second=0;
                                Minute++;
                            if(Minute==60)                     //ÿD¡ê±ê±¼äμ½
                                 {
                                         Minute=0;
                                     Hour++;
                                    if(Hour==24)                         //ÿò»ììê±¼äμ½
                                            {
                                                Hour = 0;
                                                 }
                                            }

                                   }
                                                                  
                        }
}

void Hour_add()
{
   Hour++;
   if(Hour>23)Hour=0;
}

void Minute_add()
{
   Minute++;
   if(Minute>59)Minute=0;
}

void Second_add()
{
   Second++;
   if(Second>59)Second=0;
}

void Disp_Time_Pause() interrupt 0 using 3
{
    TR1 = 0;
}
void DIS_Time()
{

   do
   {
   disp_led_Hour(Hour);
   disp_led_Minute(Minute);
   disp_led_Second(Second);
   DelayX1ms(5);
   switch(PB8255) //¶á8255B¿ú
        {
                case 0xEF:TR1=0;Hour_add();DelayX1ms(250);break; //PB=0xEF,K12¼ü°′ÏÂ
                case 0xDF:TR1=0;Minute_add();DelayX1ms(250);break; //PB=0xDF,K13¼ü°′ÏÂ
                case 0xBF:TR1=0;Second_add() ;DelayX1ms(250);break;//PB=0xBF,K14¼ü°′ÏÂ
                case 0x7F:Set_Init_Timer1( );DIS_Time();break; //PB=0x7F,K15¼ü°′ÏÂ
                }
   }while(1);
}
void main()
{
    TR1=0;
           Set_INT0();
        disp1_HELLO_L2();
        do
          {
           disp1_HELLO_h4();
           Set_Init_8255();
       switch(PB8255) //¶á8255B¿ú
        {
                case 0xEF:TR1=0;Hour_add();DelayX1ms(250);break; //PB=0xEF,K12¼ü°′ÏÂ
                case 0xDF:TR1=0;Minute_add();DelayX1ms(250);break; //PB=0xDF,K13¼ü°′ÏÂ
                case 0xBF:TR1=0;Second_add() ;DelayX1ms(250);break;//PB=0xBF,K14¼ü°′ÏÂ
                case 0x7F:Set_Init_Timer1( );DIS_Time();break; //PB=0x7F,K15¼ü°′ÏÂ
}
           }while(1);
         



}

disp_clock.zip

33.98 KB, 下载次数: 6, 下载积分: 黑币 -5

显示程序

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:536191 发表于 2019-5-12 16:31 | 只看该作者
有部分乱码,具体可以下载程序查看
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表