當前位置:首頁 » 編程語言 » 51c語言編程燈亮法
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

51c語言編程燈亮法

發布時間: 2022-10-24 15:02:50

❶ 單片機c語言編程點亮LED燈

可以通過左移函數_crol_()和右移函數_cror_()來實現LED等的來迴流動。 具體實現方法可以參考如下程序: #include #include #define uint unsigned int#define uchar unsigned charvoid delay(uint a);void main(){ P1=0xfe; while(1) { // 向左循環點亮LED for(i=0; i<7; i++) { P1=_crol_(P1,1); // 左移一位,點亮下一位LED delay(55); } // 向右循環點亮LED for(i=0; i/ 右移一位,,點亮上一位LED delay(55); } }}// 延時函數,延時a毫秒void delay(uint a){ uint x,y; for(x=a;x>0;x--) for(y=110;y>0;y--);}

❷ 很簡的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單片機是基礎入門的一個單片機,還是應用最廣泛的一種。

❸ 單片機51c語言編程20種不同霓虹燈亮法

#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char

uint i,j,t;uchar Temp;
void main()
{
while(1)
{
for(j=0;j<8;j++)
{
Temp = (Temp<<1);
Temp_YiWei = Temp;
for(i=0;i<7-j;i++);
{
P1 = Temp_YiWei;
Temp_YiWei = _crol_(Temp_YiWei,1);
for(t=40000;t>0;t--); //延時函數 自己調試調試
P1 = Temp_YiWei;
}
}
P1 = 0x00; //全亮
for(t=5000;t>0;t--); //延時函數 自己調試調試
P1 = 0xFF; //全亮
}
}

❹ 用51單片機c語言讓八個led亮度自左向右逐漸變亮(pwm)

#include<iom16.h>
#include<avr_macros.h>

voidInit_IO(void)
{
DDRA=0xFF;
PORTA=0x00;
}
/*以上代碼51忽略*/
voidLED1(unsignedcharx,unsignedcharLEDx)
{
unsignedcharCount=0;
Count=LEDx*36;//最小0,最大7*36=252,char型最大不能超過255;
Count=Count+1;//加1的目的是針對LED0不亮

if(x<=Count) //<=是針對LED0不亮
PORTA|=(1<<LEDx);//51怎麼改?。P0|=(1<<LEDx);PWM正占空
else
if(x>Count)
PORTA&=~(1<<LEDx);//51怎麼改?。P0&=~(1<<LEDx);PWM負占空
}

voidmain(void)
{
unsignedchardelay=0;
unsignedcharLEDx=0;
Init_IO();
while(1)
{
delay++;
if(delay==250)
{
delay=0;
LEDx++;
if(LEDx>7)
LEDx=0;
}
LED1(delay,LEDx);
}
}

❺ 求一個51單片機的C語言程序,8個LED4種亮法,自上而下,自下而上,高低4位交替亮,一個個滅直到全滅。

我給你做個例子吧,把接LED燈的io口賦值0,燈亮;把接LED燈的io口賦值1,燈滅
因為一般接io口的LED燈有個上拉高電平,io這端給他個低電平(0),造成電壓差,就有電流通過,燈就亮了;反之,io給高電平(1),沒有壓差,無電流,燈滅。

下面的你自己應該可以寫了,鍛煉下手。

void delay(void)
{
int i=10000; //這個值調整亮燈滅等快慢,越小越快越大越慢

while(i--)
return;
}

//從上到下亮燈
void LED_a(void)
{
LED_IO1 = 0;
delay();
LED_IO2 = 0;
delay();
LED_IO3 = 0;
delay();
LED_IO4 = 0;
delay();
LED_IO5 = 0;
delay();
LED_IO6= 0;
delay();
LED_IO7= 0;
delay();
LED_IO8= 0;
delay();

}

//開始燈全滅
void LED_dengmie(void)
{
LED_IO1 = 1;
LED_IO2 = 1;
LED_IO3 = 1;
LED_IO4 = 1;
LED_IO5 = 1;
LED_IO6= 1;
LED_IO7= 1;
LED_IO8= 1;
}

main()
{
LED_dengmie();

LED_a();
}

❻ 用五一單片機c語言編程,p1口控制八個發光二極體,實現每隔一秒,兩兩點亮,並循環。

一、#include<reg51.h>

void delay(unsigned char Xms)//延時Xms

{

int i,j;

for(X = i; X>0; X--)

for(j=110;j>0;j--);

}

void main()

{

P0 = 0x00; //P0.0~P0.7分別接八個發光二極體,剛開始全滅

while(1)

{

delay(1000);

P0 = 0xc0;//點亮前兩個發光二極體P0.0和P0.1;

delay(1000);//延時1秒

P0 = 0x30;//點亮第三個和第四個LED

delay(1000);

P0 = 0x0c;

delay(1000);

P0 = 0x03;

}

}

二、

#include <reg52.h>

#include <intrins.h>

#define uchar unsigned char

#define uint unsigned int

uchar temp, t0, t1;

bit t2;

sbit P10 = P1^0;

void main()

{

P10 = 1;

temp = 0xfe;

P0 = temp;

P2 = 0xff;

TMOD = 0x01;

TH0 = (65536 - 50000) / 256;

TL0 = (65536 - 50000) % 256;

ET0 = 1;

EA = 1;

TR0 = 1;

while(1);

}

void timer0() interrupt 1

{

TH0 = (65536 - 50000) / 256;

TL0 = (65536 - 50000) % 256;

t0++;

if(t0 == 10) {

t0 = 0;

t1++;

if(t1 == 8) {t1 = 0; t2 = ~t2; P10 = t2;}

temp = _crol_(temp, 1);

if(t2) {P0 = temp; P2 = 255;}

else {P2 = temp; P0 = 255;}

}

}

(6)51c語言編程燈亮法擴展閱讀:

例如:a = 3,b = 5,現交換a,b的值,這個問題就好像交換兩個杯子裡面的水,這當然要用到第三個杯子,假如第三個杯子是c,那麼正確的程序為:c = a; a = b; b = c;執行結果是a = 5,b = c = 3如果改變其順序,寫成:a = b; c = a; b =c;則執行結果就變成a = b = c = 5,不能達到預期的目的,初學者最容易犯這種錯誤。

順序結構可以獨立使用構成一個簡單的完整程序,常見的輸入、計算、輸出三步曲的程序就是順序結構,例如計算圓的面積,其程序的語句順序就是輸入圓的半徑r,計算s = 3.14159*r*r,輸出圓的面積s。

❼ 在51單片機中用c語言寫程序實現用一個按鍵控制8個燈的亮和滅(按下按鍵燈亮,按下按鍵燈滅)

比如你的8個燈連在 P0口,如果是陰極的

你只要先定義

sbit P0^0=LED0;

.....一定定義下去

然後再定義一個按鈕

比如P1.1

sbit P1^1=key;

代碼里寫

while(true)
{
if(key==1)
{
LED0=0;
LED1=0;
..//把你要亮的燈置0就行了。陽極的話置1
}
}

❽ 51單片機設計跑馬燈的程序用(c語言)編寫

|P1口接8個發光二極體共陽

#include <AT89X51.H>

unsigned char i;

unsigned char temp;

unsigned char a,b;

void delay(void)

{

unsigned char m,n,s;

for(m=20;m>0;m--)

for(n=20;n>0;n--)

for(s=248;s>0;s--);

}

void main(void)

{

while(1)

{

temp=0xfe;

P1=temp;

delay();

for(i=1;i<8;i++)

{

a=temp<<i;

b=temp>>(8-i);

P1=a|b;

delay();

}

for(i=1;i<8;i++)

{

a=temp>>i;

b=temp<<(8-i);

P1=a|b;

delay();

}

}

}

(8)51c語言編程燈亮法擴展閱讀:

Proteus 自從有了單片機也就有了開發系統,隨著單片機的發展開發系統也在不斷發展。 keil是一種先進的單片機集成開發系統。它代表著匯編語言單片機開發系統的最新發展,首創多項便利技術,將開發的編程/模擬/調試/寫入/加密等所有過程一氣呵成,中間不須任何編譯或匯編。

❾ 51單片機LED燈亮的C語言程序

/* 程序詳細功能介紹:
*利用取表的方法,使埠P0做單一燈的變化:左移2次,右移2次,閃爍2次(延時的時間0.2秒)。
*在用表格進行程序設計的時候,要用以下的指令來完成
*(1).利用MOV DPTR,#DATA16的指令來使數據指針寄存器指到表的開頭。
*(2).利用MOVC A,@A+DPTR的指令,根據累加器的值再加上DPTR的值,就可以使程序計數器PC指到表格內所要取出的數據。
*因此,只要把控制碼建成一個表,而利用MOVC 工,@A+DPTR做取碼的操作,
*就可方便地處理一些復雜的控制動作.
*/

#include <AT89X51.H>
unsigned char code table[]={0xfe,0xfd,0xfb,0xf7,
0xef,0xdf,0xbf,0x7f,
0xfe,0xfd,0xfb,0xf7,
0xef,0xdf,0xbf,0x7f,
0x7f,0xbf,0xdf,0xef,
0xf7,0xfb,0xfd,0xfe,
0x7f,0xbf,0xdf,0xef,
0xf7,0xfb,0xfd,0xfe,
0x00,0xff,0x00,0xff,
0x01};
unsigned char i;

void delay(void)
{
unsigned char m,n,s;
for(m=20;m>0;m--)
for(n=20;n>0;n--)
for(s=248;s>0;s--);
}

void main(void)
{

while(1)
{
if(table[i]!=0x01)
{
P0=table[i];
i++;
delay();
}
else
{
i=0;
}
}
}