1. 求一段用51單片機來實現60個led燈循環點亮的程序,沒過一秒點亮一盞(就是模擬時鍾的秒針)
51單片機來實現60個led燈循環點亮的程序://************************************匯編程序:
#include<at89x51.h>
#define uchar unsigned char
#define uint unsigned int
uchar data count=0;
bit flag=0;
//*********主函數*****************
void main(void)
{
uchar i=0,k=0xfe;
TMOD=0x01;
TH0=0x4c;TL0=0x00;//定時50ms
EA=1;ET0=1;TR0=1;
while(1)
{
if(flag==1){k=k<<1|0x01;flag=0;i++;}
if(i==8){i=0;k=0xfe;}
P1=k;
}
}
//*********中斷函數*****************//0111 1111
void dy1s(void) interrupt 1 using 1
{
TH0=0x4c;TL0=0x00;//定時50ms
count++;
if(count==20){flag=1;count=0;} //1s到了
}。C語言程序編寫。
void main() { P1=0XFF; /*定義初始狀態為全滅*/while(1) { delay(2000); P1=0X7e; delay(2000); P1=0Xbd; delay(2000);P1=0Xdb;delay(2000); P1=0Xe7; delay(2000); P1=0Xdb;delay(2000); P1=0Xbd;delay(2000); P1=0X7e; delay(2000); P1=0XFF; /********此循環使得發光二極體按照07,16,25,34,43,52,61,70的順序循環交替兩兩點亮*******/} /*end while*/}/*end main*/
2. 基於51單片機16個彩燈從左到右再從右左循環閃爍的匯編程序
#include <reg52.h>
#include <intrins.h>
#define uint unsigned int //16位
#define uchar unsigned char//8位
sbit led=P2^0;
sbit k0=P1^0;
sbit k1=P1^1;
void delay(uint z);
void youyi();
void zuoyi();
uchar i;
uchar temp1=0x01;//0000 0001
uchar temp2=0x80;//1000 0000
uchar flag0=0;
uchar flag1=0;
void main()
{
while(1)
{
if(k0==0)//左移
{
flag0=1;
}
if(k1==0)//右移
{
flag1=1;
}
if(flag0==1)
{
zuoyi();
temp2=0x80;
}
if(flag1==1)
{
youyi();
temp1=0x01;
}
}
}
void zuoyi()
{
for(i=0;i<7;i++)//i++ i=i+1
{
P2=temp1;
temp1=_crol_(temp1,1);//0000 0010
delay(500);
}
}
void youyi()
{
for(i=0;i<7;i++)//i++ i=i+1
{
P2=temp2;
temp2=_cror_(temp2,1);//1000 0000
delay(500);
}
}
void delay(uint z)
{
uint x , y;
for(x=110;x>0;x--)
for(y=z;y>0;y--);
3. 用c51單片機控制一個閃光燈循環閃光5次以後熄滅不再閃光,用C語言編程,求程序……
用C語言編程,求程序的方法:
#include//包含單片機寄存器的頭文件
/****************************************函數功能:延遲一段時間
*****************************************/
Voiddelay(Void)//Void表示沒有返回值,也沒有傳遞參數。
{
Unsignedint我;定義一個最大值為65535的無符號整數。
For (I = 0;我< 20000;i++) //執行20000個空循環。
;//什麼也不做,等待一個機器周期。
}
/*******************************************************
函數函數:主函數(C語言規則必須有且只能有一個主函數)。
********************************************************/空白主要(空白)
{
而(1)//無限循環。
{
P0=0xfe;//P1=11111110B,P0.0輸出低電平。
延遲();//推遲一段時間。
P0=0XFF;//P1=11111111B,P0.0輸出高電平。
延遲();//推遲一段時間。
}
}
單片機驅動LED光源程序:
#include//頭文件。
定義uint無符號int
#定義uchar無符號字元
SbitLED1=P1^7;//定義。
空白delay_ms(單位);//帶參數的ms級延時函數。
Voidmain()
{
而(1)
{
LED1=0;
Delay_ms(1000);
LED1=1;
Delay_ms(1000);
}
}
Voiddelay_ms(uintz)//delay子常式
{
使用Uintx,y;
For (x = z;X > 0;X -)
For (y = 110;Y > 0;Y -);
}
(3)51單片機led循環閃爍匯編程序擴展閱讀:
單片機應用分類:
一般類型:
這是關於微控制器的。例如80C51通用型單片機,它並不是為特定的目的而設計的;專用單片機是為某一類產品甚至某一種產品而設計生產的。例如,為了滿足電子體溫計的要求,晶元中集成了具有ADC介面的溫度測量控制電路等功能。
主線:
這是由微控制器是否提供並行匯流排來區分的。匯流排微控制器一般安裝有並行地址匯流排、數據匯流排、控制匯流排,這些引腳擴展並行外圍設備可以通過串口與單片機連接。
另外,很多單片機都需要將外圍設備和外圍設備的介面集成在一塊,所以在很多情況下不能並行擴展匯流排,大大降低了封裝成本和晶元體積,這種單片機被稱為非匯流排單片機。
控制類型:
這是關於微控制器的一般應用。一般來說,工業控制定址范圍大,計算能力強。家用電器的單片機大多是專用的。
它通常是小包裝、低價格、高集成的外圍設備和外圍介面。顯然,上述分類並不獨特和嚴格。例如,80C51類單片機既是通用的,又是匯流排的,還可以用於工業控制。
4. 51單片機用匯編實現LED1亮1秒,滅3秒循環執行
ORG 0000H START: MOV P0,#0FEH LCALL DELAY1 MOV P0,#01H LCALL DELAY1 LCALL DELAY SJMP START DELAY1: push 03h push 04h push 05h mov r3,#100 d1: mov r4,#20 d2: mov r5,#248 d3: djnz r5,d3 nop djnz r4,d2 djnz r3,d1 pop 05h pop 04h pop 03h ret delay: push 03h push 04h push 05h mov r3,#50 d1: mov r4,#20 d2: mov r5,#248 d3: djnz r5,d3 nop djnz r4,d2 djnz r3,d1 pop 05h pop 04h pop 03h ret end
5. 用匯編語言編寫51單片機程序讓LED燈亮0.5秒,滅2秒無限循環
ORG 0000H
MOV SP,#60H
E: CLR P1.0 ; P1.0 LED亮
ACALL DEL_1S ; 0.5 秒
SETB P1.0 ; P1.0 LED滅
ACALL DEL_2S ;2秒
SJMP E ; 循環
DEL_1S: MOV R2,#10 ; 0.5秒
JMP DEL_2S+2
DEL_2S: MOV R2,#40 ; 2秒
SETB TR1
LOOP: JNB TF1,$
MOV TL1,#0B0H
MOV TH1,#3CH
CLR TF1
DJNZ R2,LOOP
CLR TR1
RET
END
6. 匯編51單片機三個LED交替閃爍
ORG 0000H
AJMP MAIN
ORG 000BH ;TO Time interrupt
lJMP T0INT
ORG 001BH ;T1 Count interrupt
LJMP T1CNT
ORG 030H
MAIN: MOV TMOD,#61H ;T1 count at MOD 2,T0 time int at MOD 1
MOV TL0,#0B0H ;66536-50000=3CB0H 50000us=50ms=0.05s
MOV TH0,#3CH
SETB ET0 ;T0 interrupt enable
SETB TR0 ;T0 work
;MOV TL1,#0FDH ;count num = 2
;MOV TH1,#0FDH ;auto load 0FDH
;SETB ET1
;SETB TR1
SETB EA ;Enable all interrupt
MOV A,#28H ;0.05s*40=2s
MOV P0,#0FEH
JMP $
ORG 060H
T0INT: CLR ET0 ;Disable T0 interrupt
CLR TF0 ;clr tf0
;CPL P1.7
DEC A ;A--
JNZ T0RET ;A!=0 jmp
;;;;;;;;;;;;;;;;;;更改這里改燈閃爍
MOV A,P1
RR A
MOV P1,A
;;;;;;;;;;;;;;;;;;
MOV A,#28H ;A==0;A=40,
T0RET: SETB ET0 ;Enable interrupt
RETI
ORG 080H
7. 求51單片機定時LED閃爍程序代碼
#include<reg52.h>//包括一個52標准內核的頭文件
#defineucharunsignedchar
/******************************主函數*****************************/
voidtimer0();
voidmain()//主程序
{
TMOD=0x01;//定時器0工作方式1
EA=1;
ET0=1;//定時器0中斷
TR0=1;//啟動定時器0
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
while(1);//程序循環
}
/*****************************定時器0中斷*************************/
voidtimer0()interrupt1
{
uchart;//定義變數
TF0=0;//定時器清0
t++;//中斷一次累加1
if(t==20)//預置值,溢出20次就是1秒鍾,晶振12MHZ
{
t=0;
P3=~P3;//反轉LED燈的亮滅
}
}
/*****************************************************************/
8. 如何用匯編語言控制led燈閃爍
用AT89C2051單片機(可以換成任意的51單片機)模擬,控制一個LED燈閃爍,LED燈接在P1.7腳上。程序如下
LED1 BIT P1.7
MAIN:CPL LED1
ACALL DELAY
SJMP MAIN
DELAY:MOV R7,#0;延時子程序
MOV R6,#0
LOP:DJNZ R6,$
DJNZ R7,LOP
RET
模擬圖如下