㈠ 51單片機流水燈用C語言編寫的設計程序
其實很簡單
就是用_cror_()函數或者 _crol_()函數,第一個是右移第二個是左移
㈡ 單片機流水燈C語言程序(8個燈,依次點亮每個燈,延時500MS)
單片機流水燈C語言程序的源代碼如下:
#include //51系列單片機定義文件
#define uchar unsigned char //定義無符號字元
#define uint unsigned int //定義無符號整數
void delay(uint); //聲明延時函數
void main(void)
{
uint i;
uchar temp;
while(1)
{
temp=0x01;
for(i=0;i<8;i++) //8個流水燈逐個閃動
{
P1=~temp;
delay(100); //調用延時函數
temp<<=1;
}
temp=0x80;
for(i=0;i<8;i++) //8個流水燈反向逐個閃動
{
P1=~temp;
delay(100); //調用延時函數
temp>>=1;
}
temp=0xFE;
for(i=0;i<8;i++) //8個流水燈依次全部點亮
{
P1=temp;
delay(100); //調用延時函數
temp<<=1;
}
temp=0x7F;
for(i=0;i<8;i++) //8個流水燈依次反向全部點亮
{
P1=temp;
delay(100); //調用延時函數
temp>>=1;
}
void delay(uint t) //定義延時函數
{
register uint bt;
for(;t;t--)
for(bt=0;bt<255;bt++);
}
(2)51單片機流水燈編程擴展閱讀
51單片機流水燈的源代碼如下
#include<reg51.h>
#include<intrins.h>
voiddelay(inta)
{
inti;
while(a--)for(i=0;i<110;i++);
}
main()
{
inti;
while(1)
{
P0=0xfe;
for(i=0;i<8;i++)
{
P0=_crol_(P0,1);
delay(500);
}
}
}
㈢ 用C51單片機控制12個LED流水燈的C語言程序怎麼寫
#include "REG52.H"
//控制引腳定義
sbit LED1 = PX.X; //P0.0-P3.7任意引腳
.... .... .......
sbit LED12 = PX.X;
//宏定義燈亮燈滅
#define LED1_ON( ) LED1 =0 //陽極接電源
#define LED1_OFF( ) LED1 =1 //陽極接電源
....... ............. .............
#define LED12_ON( ) LED12 =0 //陽極接電源
#define LED12_OFF( ) LED12 =1 //陽極接電源
void Init_GPIO( )//埠引腳初始化,關閉所有指示燈
{
LED1_OFF( ) ;
..............
LED12_OFF( ) ;
}
void Delay_ms( u16 dat ) //延時函數
{
u16 i, j;
for(i = dat; i>0; i--)
{
for (j=300; j>0; j--);
}
}
int main( ) //主函數
{
Init_GPIO( );//引腳初始化
while(1) //大循環
{
LED1_ON( );//點亮第一個LED
LED2_OFF( );
.............
LED12_OFF( );
Delay_ms(1000);//延時 參數自己可以根據晶振頻率自己調節
LED1_OFF( ); //點亮第二個LED
LED2_ON( );
LED3_OFF( );
.............
LED12_OFF( );
Delay_ms(1000);
............. //按照上面修改;
LED1_OFF( );//點亮第十二個LED
LED2_OFF );
LED3_OFF( );
.............
LED12_ON( );
Delay_ms(1000);
}
}
㈣ 51單片機編程流水燈問題
void main()
{
unsigned char i ;
start:P0=0x01;
i=0 ;
while(1)
{
P0=~(1<<i++); //P0口只有8位,即0-7;所以當i自加等於7時要讓其從0開始
delay1ms(500);
// if (P0==1) 把這個改為
if( i>= 7 )
{
goto start;
}
}
}
其實在進行用C語言編程中,應當不用或者少用goto語名,如果是一個流水燈程序,可以參考下面這個程序。
#include <reg52.h>
#include <intrins.h> //包含循環左移函數_crol_頭文件
#define uchar unsigned char
#define uint unsigned int
void delay1ms(unsigned int a )
{
unsigned char b;
while(a--)
{
for(b=0;b<125;b++);
}
}
void main(void)
{
P0 = 0x01; //先點亮第一個LED
while(1)
{
delay1ms(500);
P0 = _crol_(P0,1); //循環左移1位
}
}
㈤ 80C51單片機流水燈編程
#include<reg51.h> //51系列單片機定義文件
#define uchar unsigned char //定義無符號字元
#define uint unsigned int //定義無符號整數
void delay(uint); //聲明延時函數
void main(void)
{
uint i;
uchar temp;
while(1)
{
temp=0x01;
for(i=0;i<8;i++) //8個流水燈逐個閃動
{
P1=~temp;
delay(100); //調用延時函數
temp<<=1;
}
}
void delay(uint t) //定義延時函數
{
register uint bt;
for(;t;t--)
for(bt=0;bt<255;bt++);
}
這是代碼,具體你可以運行來看效果。
㈥ 51單片機c語言編寫流水燈程序
這個有點多,定時器倒是可以寫寫
TMOD=0xXX;設置工作方式
TH0=0xXX;
TL0=0xXX; 裝入計數初值
EA=1;開總中斷
TR0=1;開定時器中斷
㈦ 51單片機16路流水燈怎麼用C語言寫,並求每個步驟的講解
我給你個簡單的例子:
#include<AT89X51.H>//預處理文件裡面定義了特殊寄存器的名稱如P1口定義為P1
voidmain(void)
{
//定義花樣數據
constunsignedchardesign[32]={0xFF,0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F,
0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE,0xFF,
0xFF,0xFE,0xFC,0xF8,0xF0,0xE0,0xC0,0x80,0x0,
0xE7,0xDB,0xBD,0x7E,0xFF};
unsignedinta;//定義循環用的變數
unsignedcharb;//在C51編程中因內存有限盡可能注意變數類型的使用
//盡可能使用少位元組的類型,在大型的程序中很
受用
do{
for(b=0;b<32;b++)
{
for(a=0;a<30000;a++);//延時一段時間
P1=design[b];//讀已定義的花樣數據並寫花樣數據到P1口
}
}while(1);
}
程序中的花樣數據可以自以去定義,因這里我們的LED要AT89C51的P1引腳為低電平才
會點亮,所以我們要向P1口的各引腳寫數據O對應連接的LED才會被點亮,P1口的八個引
腳剛好對應P1口特殊寄存器的八個二進位,如向P1口定數據0xFE,轉成二進制就是
11111110,最低位D0為0這里P1.0引腳輸出低電平,LED1被點亮。如此類推,大家不難算
出自己想要做的效果了。
留個郵箱給你發個入門文檔
㈧ 51單片機流水燈程序
程序如下,模擬見附件。有問題請追問。
#include<AT89X51.h>
#defineucharunsignedchar
#defineuintunsignedint
bitflag_1s=0;
ucharcodetab[8]={1,2,4,8,16,32,64,128};//[第1小題用這個表]
//ucharcodetab[8]={0x05,0x0a,0x50,0xa0,0xaa,0x55,0xff,0x00};//[第2小題用這個表]
voidInitTimer1(void)
{
TMOD=0x10;
TH1=0x3C;
TL1=0x0B0;
EA=1;
ET1=1;
TR1=1;
}
voidmain(void)
{
staticucharj;
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;
}
}
}
voidTimer1Interrupt(void)interrupt3
{
staticuchari;
TH1=0x3C;
TL1=0x0B0;
//addyourcodehere!
i++;
if(i>=20)//50ms*20=1000ms
{
i=0;
flag_1s=1;
}
}
㈨ 很簡的51單片機C語言流水燈程序
1、51單片機C語言實現循環8個流水燈左移三次,後右移三次。
常式:
#include<reg51.h> //51單片機頭文件
#include <intrins.h> //包含有左右循環移位子函數的庫
#define uint unsigned int //宏定義
#define uchar unsigned char //宏定義
sbit beep=P2^3;
void delay(uint z) //延時函數,z的取值為這個函數的延時ms數,如delay(200);大約延時200ms.
{ //delay(500);大約延時500ms.
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void main() //主函數
{
uchar a,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單片機是基礎入門的一個單片機,還是應用最廣泛的一種。
㈩ 51單片機中如何用匯編語言編寫流水燈
流水燈就是51單片機控制led燈依次點亮的控制方式。具體程序如下:
ORG 0000H ;復位啟動
AJMP START ;
ORG 001BH ;T1中斷
AJMP T1INT ;
;定義變數========================
YSJS EQU 30H;延時計數器
LED EQU 31H;LED控制緩沖器
;主程序==========================
START: MOV LED,#0FEH ;初始化數據
MOV YSJS,#0 ;
MOV TMOD,#10H ;定時器1工作於方式1,16位定時器
MOV TL1,#0B0H ;設置定時初值
MOV TH1,#3CH ;定時時間=50mS
SETB ET1 ;使能定時器1中斷
SETB TR1 ;啟動定時器1
SETB EA ;開總中斷
MOV P1,LED ;初始化流水燈
LOOP: JMP LOOP ;循環等待中斷
T1INT: PUSH PSW ;定時器1中斷程序
PUSH ACC ;保護現場
MOV TH1,#3CH ;定時時間=50mS
MOV TL1,#0B0H ;
INC YSJS ;
PUSH ACC ;保護ACC
MOV A,YSJI ;
CJNE A,#2,QT1 ;50mS*2=100mS
MOV P1,LED ;
MOV A,LED ;
RL A ;累加器A的值循環左移1位
MOV LED,A ;
MOV YSJS,#0 ;
QT1: POP ACC ;恢復現場
POP PSW ;
RETI ;返回主程序
END ;匯編程序結束
(10)51單片機流水燈編程擴展閱讀:
實現流水燈的三個方法:
第一種,匯流排方法實現流水燈。這是一種比較笨但又最易理解的方法,採用順序程序結構,用位指令控制P1口的每一個位輸出高低電平,加上延時函數,即可控制每個LED燈的亮滅。
第二種,移位方法實現流水燈採用循環程序結構編程。首先在程序開始給P1.0口送一個低電平,其它位為高。然後延時一段時間再讓低電平往高位移動,這樣就實現「流水」的效果了。
第三種,庫函數實現流水燈。利用左移函數進行。