流水灯与数码管显示
用动态扫描,定时器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(shu398)
{
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%40)//间隔200ms闪烁
P1=~P1;
if(tt==60)//闪烁3s
{
TR0=0;
P1=0xff;
flag1=1;//标志位
}}
}

浙公网安备 33010602011771号