stc89c51单片机流水灯程序Word下载.docx
《stc89c51单片机流水灯程序Word下载.docx》由会员分享,可在线阅读,更多相关《stc89c51单片机流水灯程序Word下载.docx(10页珍藏版)》请在冰豆网上搜索。
sbitD7=P1^7;
//位定义,把P1口的第8个管脚定义为D7
voidmain()
{
while
(1)//建立大的死循环.
unsignedinti,j;
D0=0,D7=1;
//亮灯1,关灯8
for(i=50;
i>
0;
i)
for(j=200;
j>
j);
//两个FOR组成的延时
D0=1,D1=0;
//亮灯2,关灯1
i)
for(j=200;
D1=1,D2=0;
D2=1,D3=0;
D3=1,D4=0;
D4=1,D5=0;
D5=1,D6=0;
D6=1,D7=0;
}
程序二(用swichcase语句编的)
//51单片机的头文件.
sbitd1=P1^0;
//
sbitd2=P1^1;
sbitd3=P1^2;
sbitd4=P1^3;
sbitd5=P1^4;
sbitd6=P1^5;
sbitd7=P1^6;
sbitd8=P1^7;
unsignedinti=1,a,b;
while
(1)//大循环
for(i=1;
i<
15;
i++)
{
for(a=0;
a<
80;
a++)//延时.
for(b=0;
b<
200;
b++);
switch(i)
case1:
d2=1,d1=0,d8=1;
break;
case2:
d1=1,d2=0;
case3:
d2=1,d3=0;
case4:
d3=1,d4=0;
case5:
d4=1,d5=0;
case6:
d5=1,d6=0;
case7:
d6=1,d7=0;
case8:
d7=1,d8=0;
case9:
d8=1,d7=0;
case10:
d7=1,d6=0;
case11:
d6=1,d5=0;
case12:
d5=1,d4=0;
case13:
d4=1,d3=0;
case14:
d3=1,d2=0;
}
};
程序三(最简洁的):
intrins.h>
//_crol_和_cror_的头文件.
voiddelay(unsignedintz)//建立延时子函数.
unsignedinti,j;
for(i=0;
z;
for(j=0;
j<
j++);
voidmain()
unsignedchard;
d=0xfe;
while
(1)//
{
for(;
d>
0x7f;
)
P1=d;
delay(100);
//调用延时子函数延时.
d=_crol_(d,1);
//循环左移.
d<
0xfe;
d=_cror_(d,1);
//循环右移,让灯倒回去.
}
数码管流水灯:
voiddelay(unsignedinta)
unsignedintb;
b=a;
while(b>
0)
b;
unsignedcodeA[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
//0x3f:
为0,即数码管亮“0”.
P2=0;
//打开数码管的第一个,
P0=j;
//对数码管停止赋值
while
(1)
i=0;
16;
j++)
P2=i;
P0=A[j];
delay(50000);
i++;
数码管程序二:
inti,j;
unsignedcodeA[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
j=0;
8;
j++;
for(i=7;
=0;
中断程序一
EA=1;
//打开总中断
EX0=1;
//打开外部中断0.
IT0=0;
//选择其为低电平有效有效.当CPU检测到P3.3引脚上出现有效的中断信号时,中断标记IE1(TCON.3)置1,向CPU申请中断.
P1=0xfe;
delay(50000);
voidexist()interrupt0//中断子程序,其中“0”为外部中断的序号
P1=_crol_(P1,1);
定时程序;
include<
unsignedinti=0,j=0,t;
unsignedcodea[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,
0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
TMOD=0x01;
//对TMOD赋值,以确定T0和T1的工作方式.
TH0=(6553650000)/256;
TL0=(6553650000)%256;
//定时/计数器的实质是加1计数器(16位),由高8位和低8位两个寄存器组成.对高8位和低8位赋值.
EA=1;
//开总中断
ET0=1;
//则对IE赋值,开放中断
TR0=1;
//使TR0或TR1置位,启动定时/计数器定时.
while
(1)
if(t==20)
t=0;
if(j==8)
if(i==16)
P2=j;
P0=a[i];
voidtime()interrupt1//定时子程序,其中“1”为定时/计数器序号
{
TH0=(6553650000)/256;
TL0=(6553650000)%256;
t++;