#stcc单片机流水灯程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

51单片机流水灯程序
程序一<用C语言编地最基础地程序)
#include<reg52.h>
#include<stdio.h>
sbit D0=P1^0。

//位定义,把P1口地第一个管脚定义为D0 sbit D1=P1^1。

// 位定义,把P1口地第二个管脚定义为D1 sbit D2=P1^2。

// 位定义,把P1口地第3个管脚定义为D2 sbit D3=P1^3。

// 位定义,把P1口地第4个管脚定义为D3 sbit D4=P1^4。

// 位定义,把P1口地第5个管脚定义为D4 sbit D5=P1^5。

// 位定义,把P1口地第6个管脚定义为D5 sbit D6=P1^6。

// 位定义,把P1口地第7个管脚定义为D6 sbit D7=P1^7。

// 位定义,把P1口地第8个管脚定义为D7 void main(>
{
while(1>//建立大地死循环.
{
unsigned int i,j。

D0=0,D7=1。

//亮灯1,关灯8
for(i=50。

i>0。

i-->
for(j=200。

j>0。

j-->。

//两个FOR组成地延时
D0=1,D1=0。

// 亮灯2,关灯1
for(i=50。

i>0。

i-->
for(j=200。

j>0。

j-->。

D1=1,D2=0。

for(i=50。

i>0。

i-->
for(j=200。

j>0。

j-->。

D2=1,D3=0。

for(i=50。

i>0。

i-->
for(j=200。

j>0。

j-->。

D3=1,D4=0。

for(i=50。

i>0。

i-->
for(j=200。

j>0。

j-->。

D4=1,D5=0。

for(i=50。

i>0。

i-->
for(j=200。

j>0。

j-->。

D5=1,D6=0。

for(i=50。

i>0。

i-->
for(j=200。

j>0。

j-->。

D6=1,D7=0。

for(i=50。

i>0。

i-->
for(j=200。

j>0。

j-->。

}
}
程序二<用swich case语句编地)
#include<reg52.h>//51单片机地头文件. sbit d1=P1^0。

//
sbit d2=P1^1。

sbit d3=P1^2。

sbit d4=P1^3。

sbit d5=P1^4。

sbit d6=P1^5。

sbit d7=P1^6。

sbit d8=P1^7。

void main(>
{
unsigned int i=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>
{
case 1:
d2=1,d1=0,d8=1。

break。

case 2:
d1=1,d2=0。

break。

case 3:
d2=1,d3=0。

break。

case 4:
d3=1,d4=0。

break。

case 5:
d4=1,d5=0。

break。

case 6:
d5=1,d6=0。

break。

case 7:
d6=1,d7=0。

break。

case 8:
d7=1,d8=0。

break。

case 9:
d8=1,d7=0。

break。

case 10:
d7=1,d6=0。

break。

case 11:
d6=1,d5=0。

break。

case 12:
d5=1,d4=0。

break。

case 13:
d4=1,d3=0。

break。

case 14:
d3=1,d2=0。

break。

}
}。

}
}
程序三<最简洁地):
#include<reg52.h>
#include<intrins.h>//_crol_和_cror_地头文件. void delay(unsigned int z>//建立延时子函数. {
unsigned int i,j。

for(i=0。

i<z。

i++>
for(j=0。

j<200。

j++>。

}
void main(>
{
unsigned char d。

d=0xfe。

while(1>//
{
for(。

d>0x7f。

>
{
P1=d。

delay(100>。

//调用延时子函数延时.
d=_crol_(d,1>。

//循环左移.
}
for(。

d<0xfe。

>
P1=d。

delay(100>。

d=_cror_(d,1>。

//循环右移,让灯倒回去.
}
}
}
数码管流水灯:
#include<reg52.h>
#include<intrins.h>
void delay(unsigned int a>
{
unsigned int b。

b=a。

while(b>0>
b--。

}
void main(>
{
unsigned int i,j。

unsigned code A[]={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。

for(j=0。

j<16。

j++>
{
P2=i。

P0=A[j]。

delay(50000>。

i++。

}
}
}
数码管程序二:
#include<intrins.h>
void delay(unsigned int a>
{
unsigned int b。

b=a。

while(b>0>
b--。

void main(>
{
int i,j。

unsigned code A[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}。

P2=0。

P0=j。

while(1>
{
j=0。

for(i=0。

i<8。

i++>
{
P2=i。

P0=A[j]。

delay(50000>。

j++。

}
for(i=7。

i>=0。

i-->
{
P2=i。

P0=A[j]。

delay(50000>。

j++。

}
}
}
中断程序一
#include<reg52.h>
#include<intrins.h>
void delay(unsigned int a>
{
unsigned int b。

b=a。

while(b>0>
b--。

}
void main(>
{
int i,j。

unsigned code A[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}。

EA=1。

//打开总中断
EX0=1。

//打开外部中断0.
IT0=0。

//选择其为低电平有效有效.当CPU检测到P3.3引脚上出现有效地中断信号时,中断标志IE1(TCON.3>置1,向CPU申请中断.
P2=0。

P0=j。

P1=0xfe。

while(1>
{
j=0。

for(i=0。

i<8。

i++>
{
P2=i。

P0=A[j]。

delay(50000>。

j++。

}
for(i=7。

i>=0。

i-->
{
P2=i。

P0=A[j]。

delay(50000>。

j++。

}
}
}
void exist(> interrupt 0//中断子程序,其中“0”为外部中断地序号
{
P1=_crol_(P1,1>。

delay(50000>。

}
定时程序。

include<reg52.h>
unsigned int i=0,j=0,t。

unsigned code a[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,
0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}。

void main(>
{
TMOD=0x01。

//对TMOD赋值,以确定T0和T1地工作方式.
TH0=(65536-50000>/256。

TL0=(65536-50000>%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>
j=0。

if(i==16>
i=0。

P2=j。

P0=a[i]。

i++。

j++。

}
}
}
void time(> interrupt 1//定时子程序,其中“1”为定时/计数器序号 {
TH0=(65536-50000>/256。

TL0=(65536-50000>%256。

t++。

}。

相关文档
最新文档