❶ 單片機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;
}
}
}