流水灯与数码管显示

用动态扫描,定时器1在数码管显示出从765432开始以1/10秒的速度往下递减至765398并保持此数,并用定时器0以500ms进行流水灯从上至下移动,当数码管的数减到停止时,流水灯停止然后全部开始闪烁200ms间隔,3s后(T0定时)流水灯全部关闭,数码管显示hello,到此保持住。

#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;
sbit wela=P2^7;
uint shu;
uchar bai,shi,ge,aa,bb,cc,tt,t1,tempt,flag,flag1;
void init();
void delay(uint z);
uchar code table[]={
                    0x3f,0x06,0x5b,0x4f,
                    0x66,0x6d,0x7d,0x07,
                    0x7f,0x6f,0x77,0x7c,
                    0x39,0x5e,0x79,0x71,
                    0x76,0x79,0x38,0x3f,0
                    };
void display(aa,bb,cc,bai,shi,ge);
void main()
{
    tempt=0xfe;
    P1=tempt;
    init();
    shu=432;
    while(1)
    {
        </span><span style="color: #0000ff;">if</span>(flag1!=<span style="color: #800080;">1</span><span style="color: #000000;">)
            display(</span><span style="color: #800080;">7</span>,<span style="color: #800080;">6</span>,<span style="color: #800080;">5</span><span style="color: #000000;">,bai,shi,ge);
        </span><span style="color: #0000ff;">else</span><span style="color: #000000;">
            display(</span><span style="color: #800080;">16</span>,<span style="color: #800080;">17</span>,<span style="color: #800080;">18</span>,<span style="color: #800080;">18</span>,<span style="color: #800080;">19</span>,<span style="color: #800080;">20</span><span style="color: #000000;">);
    }    

}

void display(aa,bb,cc,bai,shi,ge)
{
dula
=1;
P0
=table[aa];
dula
=0;
P0
=0xff;
wela
=1;
P0
=0xfe;
wela
=0;
delay(
1);

dula</span>=<span style="color: #800080;">1</span><span style="color: #000000;">;
P0</span>=<span style="color: #000000;">table[bb];
dula</span>=<span style="color: #800080;">0</span><span style="color: #000000;">;
P0</span>=<span style="color: #800080;">0xff</span><span style="color: #000000;">;
wela</span>=<span style="color: #800080;">1</span><span style="color: #000000;">;
P0</span>=<span style="color: #800080;">0xfd</span><span style="color: #000000;">;
wela</span>=<span style="color: #800080;">0</span><span style="color: #000000;">;        
delay(</span><span style="color: #800080;">1</span><span style="color: #000000;">);

dula</span>=<span style="color: #800080;">1</span><span style="color: #000000;">;
P0</span>=<span style="color: #000000;">table[cc];
dula</span>=<span style="color: #800080;">0</span><span style="color: #000000;">;
P0</span>=<span style="color: #800080;">0xff</span><span style="color: #000000;">;
wela</span>=<span style="color: #800080;">1</span><span style="color: #000000;">;
P0</span>=<span style="color: #800080;">0xfb</span><span style="color: #000000;">;
wela</span>=<span style="color: #800080;">0</span><span style="color: #000000;">;
delay(</span><span style="color: #800080;">1</span><span style="color: #000000;">);

dula</span>=<span style="color: #800080;">1</span><span style="color: #000000;">;
P0</span>=<span style="color: #000000;">table[bai];
dula</span>=<span style="color: #800080;">0</span><span style="color: #000000;">;
P0</span>=<span style="color: #800080;">0xff</span><span style="color: #000000;">;
wela</span>=<span style="color: #800080;">1</span><span style="color: #000000;">;
P0</span>=<span style="color: #800080;">0xf7</span><span style="color: #000000;">;
wela</span>=<span style="color: #800080;">0</span><span style="color: #000000;">;
delay(</span><span style="color: #800080;">1</span><span style="color: #000000;">);

dula</span>=<span style="color: #800080;">1</span><span style="color: #000000;">;
P0</span>=<span style="color: #000000;">table[shi];
dula</span>=<span style="color: #800080;">0</span><span style="color: #000000;">;
P0</span>=<span style="color: #800080;">0xff</span><span style="color: #000000;">;
wela</span>=<span style="color: #800080;">1</span><span style="color: #000000;">;
P0</span>=<span style="color: #800080;">0xef</span><span style="color: #000000;">;
wela</span>=<span style="color: #800080;">0</span><span style="color: #000000;">;        
delay(</span><span style="color: #800080;">1</span><span style="color: #000000;">);

dula</span>=<span style="color: #800080;">1</span><span style="color: #000000;">;
P0</span>=<span style="color: #000000;">table[ge];
dula</span>=<span style="color: #800080;">0</span><span style="color: #000000;">;
P0</span>=<span style="color: #800080;">0xdf</span><span style="color: #000000;">;
wela</span>=<span style="color: #800080;">1</span><span style="color: #000000;">;
P0</span>=<span style="color: #800080;">0xdf</span><span style="color: #000000;">;
wela</span>=<span style="color: #800080;">0</span><span style="color: #000000;">;
delay(</span><span style="color: #800080;">1</span><span style="color: #000000;">);

}
void init()
{

TMOD</span>=<span style="color: #800080;">0x11</span>;<span style="color: #008000;">//</span><span style="color: #008000;">设置定时器为工作方式(0001 0001)</span>
TH0=(<span style="color: #800080;">65536</span>-<span style="color: #800080;">50000</span>)/<span style="color: #800080;">256</span>;<span style="color: #008000;">//</span><span style="color: #008000;">装初值</span>
TL0=(<span style="color: #800080;">65536</span>-<span style="color: #800080;">50000</span>)%<span style="color: #800080;">256</span><span style="color: #000000;">;
TH1</span>=(<span style="color: #800080;">65536</span>-<span style="color: #800080;">50000</span>)/<span style="color: #800080;">256</span>;<span style="color: #008000;">//</span><span style="color: #008000;">装初值</span>
TL1=(<span style="color: #800080;">65536</span>-<span style="color: #800080;">50000</span>)%<span style="color: #800080;">256</span><span style="color: #000000;">;
EA</span>=<span style="color: #800080;">1</span>; <span style="color: #008000;">//</span><span style="color: #008000;">开总中断</span>
ET0=<span style="color: #800080;">1</span>; <span style="color: #008000;">//</span><span style="color: #008000;">开定时器1中断</span>
ET1=<span style="color: #800080;">1</span><span style="color: #000000;">;
TR0</span>=<span style="color: #800080;">1</span>;<span style="color: #008000;">//</span><span style="color: #008000;">启动定时器1</span>
TR1=<span style="color: #800080;">1</span><span style="color: #000000;">;

}
void timer1() interrupt 3
{
TH1
=(65536-50000)/256;//装初值
TL1=(65536-50000)%256;
t1
++;
if(t12)
{
t1
=0;
shu
--;
bai
=shu/100;
shi
=shu%100/10;
ge
=shu%10;
if(shu
398)
{
TR0
=0;
TH0
=(65536-50000)/256;//装初值
TL0=(65536-50000)%256;
TR0
=1;
flag
=1;
tt
=0;
P0
=0xff;
TR1
=0;
}

    }

}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void timer0() interrupt 1
{
TH0
=(65536-50000)/256;//装初值
TL0=(65536-50000)%256;
tt
++;
if(flag!=1)
{
if(tt10)
{
tt
=0;
tempt=crol(tempt,1);
P1=tempt;
}
}
else
{
if(tt%4
0)//间隔200ms闪烁
P1=~P1;
if(tt==60)//闪烁3s
{
TR0
=0;
P1
=0xff;
flag1
=1;//标志位
}

}

}

 

posted @ 2022-07-26 18:26  abcdefgfed  阅读(184)  评论(0)    收藏  举报