LED的阳极接电源正,阴极接P1口,IO某位低电平时,就点亮相应位的LED。P1=0xff,灯全灭。P1=0xfe时点亮P10灯,延时500ms 。P1=0xfd,点亮P11灯。。。。
for(;;)
{} 这条就是程序在大括号里无限循环,就是灯从1~8点亮后再从1~8,一直反复循环,没必要 退出。
程序如下,仿真见附件。有问题请追问。
#include <AT89X51h>
#define uchar unsigned char
#define uint unsigned int
bit flag_1s=0;
uchar code tab[8]={1,2,4,8,16,32,64,128};//[第1小题用这个表]
//uchar code tab[8]={0x05,0,0x50,0xa0,0xaa,0x55,0xff,0x00};//[第2小题用这个表]
void InitTimer1(void)
{
TMOD = 0x10;
TH1 = 0x3C;
TL1 = 0x0B0;
EA = 1;
ET1 = 1;
TR1 = 1;
}
void main(void)
{
static uchar j;
InitTimer1();
P0=0;
P1=0;
P2=0;
P3=0;
flag_1s=1;
while(1)
{
if(flag_1s==1)
{
flag_1s=0;
P2=tab[j];
j++;
if(j>=8) j=0;
}
}
}
void Timer1Interrupt(void) interrupt 3
{
static uchar i;
TH1 = 0x3C;
TL1 = 0x0B0;
//add your code here!
i++;
if(i>=20)//50ms20=1000ms
{
i=0;
flag_1s=1;
}
}
看来你是初学单片机,更是对c语言不懂,需要倍加努力了!
led=led-1的意思就是把led-1这个值赋值给led例如led=0xff(换成十进制255)减去1之后等于254把这个254赋值给led
while(led==0)在c语言中俩个等号才是相等,它在这里的意思 就是判断是不是led全部点亮了,如果是等全部亮了,延时一会然后用break跳出while循环,重复第一次的所有 *** 作
while(i--)
for(j=125;j>0;j--)
{;}
i只要不等于0说明条件为真 为真的话一直执行
for(j=125;j>0;j--)
{;}
直到i等于0时while条件为假才退出循环,在这里主要是为了延时进行空 *** 作
这个程序要演示的应该是用8位led表示0到255。
还有51单片机还是很简单的,买本郭天祥的10天学会单片机这本教材 在看下他的单片机视频 你会更快上手单片机!
以上就是关于单片机中流水灯的程序全部的内容,包括:单片机中流水灯的程序、51单片机流水灯程序、c语言流水灯八位二进制程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)