Ⅰ 請高手解釋一下這個單片機流水燈c語言程序,新手~~
#include
"reg52.h"
#include
"intrins.h"
//循環移動函數要用到的頭文件
void
Delay(unsigned
int
t)
//延時子程序
{
unsigned
i;
while(t--!=0)
{
for(i=0;i<500;i++)
{;}
}
}
void
main(void)
{
unsigned
char
temp,num1,num2;
P0=0xff;
//LED初始化
起始狀態
滅
P2=0xff;
while(1)
//大循環
{
temp=0xfe;
//送給P0口的初值
點亮一側第一個燈
for(num1=0;num1<8;num1++)
//循環體用於循環左移用
循環8次
{
P0=temp;
//給P0
P2=0xff;
//P2控制的燈滅
Delay(100);
//延時
temp
=
_crol_(temp
,
1);
//執行一次循環就循環左移一位
與匯編的
RL功能相同
}
temp=0x7f;
//送給P0口的初值
點亮另一側第一個燈
for(num2=0;num2<8;num2++)
{
P0=temp;
P2=0xff;
Delay(100);
temp
=_cror_(temp,1);
//循環右移
同RR
下面的就是控制P2口了
同上面類似
}
//這個程序實現的效果是:先讓P0口控制的LED自右向左點亮(只亮一個燈)再自左向右點亮
然後就是P2口.........
temp=0xfe;
for(num1=0;num1<8;num1++)
{
P2=temp;
P0=0xff;
Delay(100);
temp
=
_crol_(temp
,
1);
}
temp=0x7f;
for(num2=0;num2<8;num2++)
{
P2=temp;
P0=0xff;
Delay(100);
temp
=_cror_(temp,1);
}
}
}
Ⅱ 如何用c語言編寫流水燈
C語言流水燈程序是學習的基礎,一定要搞懂!給你發兩個!
(一)
#include<reg51.h> //51系列單片機定義文件
#define uchar unsigned char //定義無符號字元
#define uint unsigned int //定義無符號整數
void delay(uint); //聲明延時函數
void main()
{
uint i;
uchar temp;
while(1)
{
temp=0x01;
for(i=0;i<8;i++) //8個流水燈逐個閃動
{
P2=~temp;
delay(500); //調用延時函數
temp<<=1;
}
temp=0x80;
for(i=0;i<8;i++) //8個流水燈反向逐個閃動
{
P2=~temp;
delay(500); //調用延時函數
temp>>=1;
}
temp=0xFE;
for(i=0;i<8;i++) //8個流水燈依次全部點亮
{
P2=temp;
delay(500); //調用延時函數
temp<<=1;
}
temp=0x7F;
for(i=0;i<8;i++) //8個流水燈依次反向全部點亮
{
P2=temp;
delay(500); //調用延時函數
temp>>=1;
}
}
}
void delay(uint a) //延時函數,毫秒級別
{
uint i;
while(--a!=0) //執行空操作循環,其中a為形參,由調用該函數的函數語句提供值
{
for(i=0;i<125;i++);//執行當0加到125時,大約會用掉1ms的時間
}
}
(二)
*****************************以下程序均採用12M晶振*****************************************************/
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
#define ulong unsigned long
sbit p2=P2^0;
void main()
{
TMOD=0x01;
TR0=1;
ET0=1;
EA=1;
while(1)
{
;
}
}
timer0() interrupt 1
{
TH0=0x00;
TL0=0x06;
p2=!p2;
}
(三)
定時流水燈//
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
#define ulong unsigned long
bit ldelay=0;
void main()
{
uchar led[9]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff};
uchar leda;
TMOD=0x00;
TR0=1;
ET0=1;
EA=1;
while(1)
{
if(ldelay)
{
ldelay=0;
P2=led[leda];
leda++;
if(leda==9)leda=0;
}
}
}
timer2() interrupt 1
{
static uchar t;
TF0=0;
t++;
if(t==10)
{
t=0;
ldelay=1;
}
}
(四)
變速流水燈//
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
#define ulong unsigned long
bit ldelay=0;
uchar speed=100;
void main()
{
uchar led[9]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff};
uchar leda;
TMOD=0x00;
TR0=1;
ET0=1;
EA=1;
while(1)
{
if(ldelay)
{
ldelay=0;
P2=led[leda];
leda++;
if(leda==9)
{
leda=0;
speed-=10;
if(speed==0)speed=100;
}
}
}
}
timer2() interrupt 1
{
static uchar t;
TF0=0;
t++;
if(t==speed)
{
t=0;
ldelay=1;
}
}
(五)
//每2兩圈改變一次亮度
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
#define ulong unsigned long
bit ldelay=0;
uchar speeda=30;
uint k=0;
void main()
{
uchar led[9]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff};
uchar leda;
uchar speed[10]={5,80,70,60,50,40,30,20,10,5};
uint i;
uint k;
TMOD=0x00;
TR0=1;
ET0=1;
EA=1;
while(1)
{
if(ldelay)
{
ldelay=0;
P2=led[leda];
leda++;
if(leda==9)
{
leda=0;
k++;
if(k==2){
k=0;
speeda=speed[i];
i++;
if(i==9)i=0;
}
}
}
}
}
timer2() interrupt 1
{
static uchar t;
TF0=0;
t++;
if(t==speeda)
{
t=0;
ldelay=1;
}
}
(六)
//在上面基礎上調燈的亮度(調占空比)
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
#define ulong unsigned long
bit ldelay=0;
uchar speeda=30;
uint k=0;
uchar scale;
void main()
{
uchar led[9]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff};
uchar leda;
uchar speed[10]={5,80,70,60,50,40,30,20,10,5};
uint i;
uint k;
TMOD=0x00;
TR0=1;
ET0=1;
EA=1;
while(1)
{
if(ldelay==1)
{
ldelay=0;
P2=led[leda];
leda++;
scale++;
if(scale==10)scale=0;
if(leda==9)
{
leda=0;
k++;
if(k==2){
k=0;
speeda=speed[i];
i++;
if(i==9)i=0;
}
}
}
}
}
timer2() interrupt 1
{
static uchar t;
TH0=0x1c;
TL0=0xbf;
TF0=0;
t++;
if(t==speeda)
{
t=0;
ldelay=1;
}
if(scale==10)P2=0;
if(scale==0)P2=1;
}
Ⅲ 很簡的51單片機C語言流水燈程序
1、51單片機C語言實現循環8個流水燈左移三次,後右移三次。
常式:
#include<reg51.h>//51單片機頭文件
#include<intrins.h>//包含有左右循環移位子函數的庫
#defineuintunsignedint//宏定義
#defineucharunsignedchar//宏定義
sbitbeep=P2^3;
voiddelay(uintz)//延時函數,z的取值為這個函數的延時ms數,如delay(200);大約延時200ms.
{//delay(500);大約延時500ms.
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
voidmain()//主函數
{
uchara,i,j;
while(1)//大循環
{
a=0xfe;//賦初值
for(j=0;j<3;j++)for(i=0;i<8;i++)//左移三次
{
P1=a;//點亮小燈
beep=0;//開啟蜂鳴器
delay(50);//延時50毫秒
beep=1;//關閉蜂鳴器
delay(50);//再延時50毫秒
a=_crol_(a,1);//將a變數循環左移一位
}
a=0x7f;
for(j=0;j<3;j++)for(i=0;i<8;i++)//右移三次
{
P1=a;//點亮小燈
beep=0;//開啟蜂鳴器
delay(50);//延時50毫秒
beep=1;//關閉蜂鳴器
delay(50);//再延時50毫秒
a=_cror_(a,1);//將a變數循環右移一位
}
}
}
2、51單片機是對所有兼容Intel 8031指令系統的單片機的統稱。該系列單片機的始祖是Intel的8031單片機,後來隨著Flash rom技術的發展,8031單片機取得了長足的進展,成為應用最廣泛的8位單片機之一,其代表型號是ATMEL公司的AT89系列,它廣泛應用於工業測控系統之中。很多公司都有51系列的兼容機型推出,今後很長的一段時間內將佔有大量市場。51單片機是基礎入門的一個單片機,還是應用最廣泛的一種。
Ⅳ 用c語言編寫單片機流水燈程序,(8個發光二極體從左至右循環點亮)
#include<reg51.h>拿薯殲
voiddelay(void)
{
unsignedinti,j;
for(i=0;i<200;i++)
for(j=0;j<1000;j++)
;
}
voidmain(void)
{
while(1)
{
P3=0xfe;//第一個燈亮
delay();//延時
P3=0xfd;//第二個燈亮
delay();
P3=0xfb;//第三個燈亮
delay();
P3=0xf7;//第四個燈手爛亮
delay();
P3=0xef;//第五個燈亮
delay();
P3=0xdf;//第六個燈亮
delay();
P3=0xbf;//第七消沖個燈亮
delay();
P3=0x7f;//第八個燈亮
delay();
}
}
(4)c語言實現流水燈第一個燈亮擴展閱讀
單片機C語言16種方式流水燈
voidmain()
{
while(1)
{
P1=0xfe;//點亮第一個發光管
Delay(5000);
P1=0xfd;//點亮第二個發光管
Delay(5000);
P1=0xfb;
Delay(5000);
P1=0xf7;
Delay(5000);
P1=0xef;
Delay(5000);
P1=0xdf;
Delay(5000);
P1=0xbf;
Delay(5000);
P1=0x7f;//點亮第八個發光管
}
}