找回密码
 立即注册

QQ登录

只需一步,快速开始

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

用按键实现流水灯左移,右移,99数码管倒计时,和全灭

[复制链接]
跳转到指定楼层
楼主
ID:563424 发表于 2019-11-26 18:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg52.h>

sbit ADDR0 = P2^2;
sbit ADDR1 = P2^3;
sbit ADDR2 = P2^4;
sbit KEY1 = P1^0;
sbit KEY2 = P1^1;
sbit KEY3 = P1^2;
sbit KEY4 = P1^3;

unsigned char code LedChar[] = {0xc0, 0xf9, 0xa4, 0xB0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90,0x88, 0x83,0xc6,0xa1, 0x86, 0x8e};
unsigned char  LedBuff[] = {0xff,0xff};

unsigned char i = 0;
unsigned char cnt = 0;
unsigned char left = 0;
unsigned char right = 0;
unsigned long sec = 0;         /*算流水灯的*/
unsigned char cd = 0;/*倒计时*/
unsigned int mov = 0;
unsigned char flag1s = 0;

bit KeySta = 1;
void cutdown()
{
       
}

void main()
{
        bit backup = 1;



        unsigned int time = 99;


        EA = 1;
        TMOD = 0X01;
        TH0 = 0XF8;        /*2ms*/
        TL0 = 0XCD;
        ET0 = 1;
        TR0 = 1;
        P1 = 0X7f;

        while(1)
        {
       
                        if(KeySta != backup)
                        {
                                if(backup ==
                                        cnt++;
                                }0)
                                {
                        backup = KeySta;
                        }

                        if(cnt == 1) /*流水灯左移*/
                                {
                                        left = 1;        /*左移标志位*/
                                }
                        if(cnt == 2)/*流水灯右移*/
                                {
                                        right = 1;/*右移标志位*/
                                }
                        if(cnt == 3)/*99秒倒计时*/
                                {
                                        cd = 1;
                                          if(flag1s == 1)
                                        {
                                                flag1s = 0;
                                                time--;
                                                LedBuff[0] = LedChar[time%10];/*数码管显示*/
                                                LedBuff[1] = LedChar[time/10];
                                        }
                                }
                        if(cnt == 4)/*全灭*/
                                {
                                       
                                        P0 = 0X00;
                                        P2 = 0Xff;
                                        left = 0;
                                        right = 0;
                                         cd = 0;
                                        cnt = 0;
                                               
                                }
                  
        }
}

void interruptTimer() interrupt 1
{        static unsigned char mov1 = 0;
        static unsigned char keybuf = 0xFF;

        TH0 = 0XF8;
        TL0 = 0XCD;
        keybuf = (keybuf<<1) | KEY4;
        if(keybuf == 0x00)
        {
                KeySta = 0;
        }
        else if(keybuf == 0xff)
        {
                KeySta = 1;
        }

        sec++;
        if(sec >= 500)
        {  
                sec = 0;
                flag1s = 1;

                if(left)
                {        P2 = 0XFF;
                        P2 = ~(0x01<<mov);
                        mov++;
                       left = 0;
                }
                if(right)
                {
                        P2 = 0XFF;
                        P2 = ~(0x80>>mov1);
                        mov1++;
                        right = 0;
                }
       
        }
        P0 = 0X00;
        if(cd)
        {        P0 = 0x00;/*刷新*/
                P2 = 0XFF;
                switch(i)
                {
                        case 0 : ADDR2 = 0 ; ADDR1 = 0 ; ADDR0 = 0; i++; P0 = ~LedBuff[0]; break;
                        case 1 : ADDR2 = 0 ; ADDR1 = 0 ; ADDR0 = 1; i=0; P0 = ~LedBuff[1]; break;
                }
       
        }
        else P0 = 0X00;

}

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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