找回密码
 立即注册

QQ登录

只需一步,快速开始

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

基于8051的8位共阴数码管显示24小时时钟的时钟序程

[复制链接]
跳转到指定楼层
楼主
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit W_lock=P3^6;
sbit S_lock=P3^7;
sbit key1=P1^0;
sbit key2=P1^1;
uchar key_pr1,key_pr2,key_flag;
uchar flag,sec,min,hr;
uchar code table_s[]={0x3f,0x06,0x5b,0x4f,0x66,
                                          0x6d,0x7d,0x07,0x7f,0x6f,0x40};
uchar code table_w[]={0xfe,0xfd,0xf7,0xef,0xbf,0x7f,0xfb,0xdf};
uchar tab[8]={0,0,0,0,0,0,10,10};
void Delay(uint time);
void Deel_date();
void display();
void key_scan();          //键盘扫描
void main()
{
        TMOD=0x11;                   //定时器0以工作方式1工作
        EA=1;                           //开启总中断
        ET0=1;                           //开定时器0中断
        TR0=1;                       //开启定时器0
        ET1=1;                            //开启定时器1中断
        TR1=1;                                 //开启定时器1
        TH0=(65536-46086)/256;          //定时器0的中断服务程序
        TL0=(65536-46083)%256;
        TH1=(65536-2000)/256;          //定时器1的中断服务程序
        TL1=(65536-2000)%256;
        while(1)
        {
                key_scan();                       
                Deel_date();
                if(flag>=20)
                {
                        flag=0;                           // 按键按下的标志
                        sec++;
                        if(60==sec)
                        {
                                sec=0;
                                min++;
                                if(60==min)
                                {
                                        min=0;
                                        hr++;
                                        if(24==hr)
                                        {
                                                hr=0;
                                        }
                                }
                        }
                }
        }       
}
void Deel_date()
{
        tab[4]=sec/10;
        tab[5]=sec%10;
        tab[2]=min/10;
        tab[3]=min%10;
        tab[0]=hr/10;
        tab[1]=hr%10;
}
void display()
{
        static i;
        P0=table_w[i];
        W_lock=1;
        W_lock=0;
        P0=table_s[tab[i]];
        S_lock=1;
        S_lock=0;
        i++;
        if(8==i)
                i=0;

}
void Delay(uint time)
{
        uint x,y;
        for(x=125;x>0;x--)
                for(y=time;y>0;y--);

}
void key_scan()
{
        if(0==key1)
        {
                Delay(5);
                if(0==key1)
                {
                        key_pr1=1;       
                }
        }
        if((1==key1)&&(1==key_pr1))
        {
                key_pr1=0;
                key_flag++;
                TR0=0;
    }
        if(4==key_flag)
        {
                key_flag=0;
                TR0=1;
        }
/*********************************************/
        if(0==key2)
        {
                Delay(5);
                if(0==key2)
                {
                        key_pr2=1;       
                }
        }
        if((1==key2)&&(1==key_pr2))
        {
                key_pr2=0;
                if(key_flag==1)
                {
                        sec++;
                        if(sec==60)
                                sec=0;
                }
                if(key_flag==2)
                {
                        min++;
                        if(min==60)
                                min=0;
                }
                if(key_flag==3)
                {
                        hr++;
                        if(hr==24)
                                hr=0;
                }
    }
}
void  Timer_0() interrupt 1
{
        TH0=(65536-46086)/256;
        TL0=(65536-46083)%256;
        flag++;       
}
void  Timer_1() interrupt 3
{
        TH1=(65536-2000)/256;
        TL1=(65536-2000)%256;
        display();
}

IMG_20180122_142006.jpg (2.68 MB, 下载次数: 83)

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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