A. 51單片機流水燈程序
程序如下:
#include <reg52.h>
sbit led1 = P2^0;
sbit led2 = P2^1;
sbit led3 = P2^2;
sbit led4 = P2^3;
sbit led5 = P2^4;
sbit led6 = P2^5;
sbit led7 = P2^6;
sbit led8 = P2^7;
void main()
{
int i,j;
//點亮第一個燈
led1 = 1;
led2 = 0;
led3 = 0;
led4 = 0;
led5 = 0;
led6 = 0;
led7 = 0;
led8 = 0;
//延時1秒
for(i = 0;i < 110; ++i)
{
for(j = 0; j < 1000; ++j)
{
;//什麼也不做
}
}
//點亮第二個燈
led1 = 0;
led2 = 1;
led3 = 0;
led4 = 0;
led5 = 0;
led6 = 0;
led7 = 0;
led8 = 0;
//點亮剩餘的燈
//省略……
while(1);
}

流水燈幾點說明:
void:因為該延時函數不需要返回值,所以寫為void
delay1s:該函數的函數名,命名需要符合C語言的標識符命名規則。
(): 不需要傳入參數,所以括弧中為空
至此我們可以把流水燈程序寫為以下形式:
B. 大家幫忙找一些51單片機的基本C語言程序例子,最好帶說明,謝啦
中斷控製程序:
#include <AT89X52.H>
#define uchar unsigned char
#define uint unsigned int
#define port_count P2    //P2接8LED介面
      //將計數器的二進制值內用8個LED顯示出來
uchar count;//計數器(存儲容中斷次數)
void main(void)
{
 count=0; //清零計數器
 port_count=~count;//清零P2口
 IT0=1;  //INT0設為邊沿觸發方式
C. 求52單片機流水燈程序
//單片機流水燈程序,是學習單片機的最簡單的程序。

//流水燈
#include <REG51.h> //51頭文件
#define DY_PORT P1 //設置LED連接的I/O組
#define DY_SPEED 100 //設置每一個明亮級的停留時間(值域:0~65535)
void delay (unsigned int a){ // 1ms延時程序
unsigned int i;
while( --a != 0){
for(i = 0; i < 600; i++);
}
}
void main(void){
unsigned int i;
unsigned int temp;
while(1){
temp=0x01;
for(i=0;i<8;i++){ //8個流水燈逐個閃動
DY_PORT=~temp;
delay(DY_SPEED); //調用延時函數
temp<<=1;
}
temp=0x80;
for(i=0;i<8;i++){ //8個流水燈反向逐個閃動
DY_PORT=~temp;
delay(DY_SPEED); //調用延時函數
temp>>=1;
}
temp=0xFE;
for(i=0;i<8;i++){ //8個流水燈依次全部點亮
DY_PORT=temp;
delay(DY_SPEED); //調用延時函數
temp<<=1;
}
temp=0x7F;
for(i=0;i<8;i++){ //8個流水燈依次反向全部點亮
DY_PORT=temp;
delay(DY_SPEED); //調用延時函數
temp>>=1;
}
}
}
D. 很簡的51單片機C語言流水燈程序
#include<reg52.h> 
#include <intrins.h>
#define LED P2 
void delay(char i); 
void main() 
{ unsigned char LedVablue=0xFE;
while(1) 
{ 
LedVablue= _crol_(LedVablue,1); //_crol_(x,Y)是<intrins.h>
//裡面的一個庫函數,相當於匯編版的帶進位循環權
LED=LedVablue;
delay(100); 
 
} 
} 
void delay(char i) 
{ 
char j; 
for(;i>0;i--) 
for(j=0;j<250;j++); 
}
E. 簡單51單片機串口程序
試試下列程來序,這時用自中斷發送的。
#include<reg51.h>
#define uchar unsigned char
uchar  txt[] = "hello";
uchar i = 0;
void main(void)
{
    PCON = 0X00;
    SCON = 0X50;
    TMOD = 0X20;
    TH1 = 0XFD;
    TL1 = 0XFD;
    TR1 = 1;
    EA = 1;
    ES = 1;
    TI = 1;
    while(1)  {   
      if(i == 6)  {
        i = 0;
        TI = 1;
      }
    }
}
void uart() interrupt 4
{      
    if(RI == 1)  RI = 0;
    if(TI == 1)  {SBUF = txt[i++];  TI = 0;}   
}
本程序,可以用串口助手接收。收到的是:hellohellohellohellohello....
F. 急求最簡單的單片機4人搶答器c51程序
;以下是以前做的八路搶答器程序,你參考一下。
     ORG   0000H
     JMP   BEGIN
     ORG 0030H
TABLE:      ; 共陰極數碼管顯示代碼表
          DB    3FH,06H,5BH,4FH,66H ;12345
          DB    6DH,7DH,07H,7FH     ;6789
DELAY:  MOV   R5,#20
LOOP4:  MOV   R6,#50H        ;延時20X20ms
LOOP5:  MOV   R7,#100
        DJNZ  R7,$
        DJNZ  R6,LOOP5
        DJNZ  R5,LOOP4
        RET
;---------------------------------------
BEGIN:  MOV   P2,#0FFH      ;P2口置高電平,准備接收信號
        MOV   R4,#0
        MOV   A,R4          ;R4位標志值送A寄存器
AGAIN:  MOV   DPTR,#TABLE
        MOVC  A,@A+DPTR
        MOV   P1,A
LOOP1:  MOV   A,P3          ; 接收p3口的搶答信號
        CPL   A
        JZ    LOOP1
LOOP2:  RRC   A        ;有人搶答信號則逐次移動判斷哪一位搶答
        INC   R4
        JNC   LOOP2
;********************
        MOV   A,R4
        MOVC  A,@A+DPTR  ;找到相應位顯示代碼
        MOV   P1,A
LEDDIS:
         MOV A,#0FFH
         CLR C
LEDDIS1:
         RLC A
         DJNZ R4,LEDDIS1
         MOV P0,A
LOOP3:  JNB P2.2,BEGIN ;若主持人按下復位信號鍵,則轉向主程序
        CPL   P2.0       ;若沒按復位信號鍵,則通過p2.2口給出高低信號驅動蜂鳴器
        LCALL DELAY      ;調用延時子程序
        SJMP  LOOP3      ;p2.2口反復間隔0.4s變化,驅動蜂鳴器
        END
G. 朋友們幫忙寫個51單片機的按鍵小程序匯編的
(1);P3.3小鍵盤按下P1.3亮再按0.5秒滅。
org 0000h
 ajmp main0
 org 0080h
MAIN0:
 CLR 21H  ;清標志
main:
 mov c,p3.3  ;檢測按鍵
 jc main
 MOV R6,#200  ;設定延時
 MOV R7,#200
TT0:
 JNB 21H,TT2  ;檢測燈狀態
tt:
 mov c,p3.3  ;檢測按鍵
 jnc tt1
 JNB 20H,MAIN ;檢測時間標志
 CLR 20H 
 AJMP TT3 
TT2:
 mov c,p3.3  ;檢測按鍵
 jnc tt2
TT3:
 CPL 21H  ;改變燈狀態
 cpl p1.3
 ajmp main
TT1: NOP   ;延時但不是子程序
 NOP
 NOP
 NOP
 NOP
 NOP
 DJNZ R6,TT
 MOV R6,#200
 DJNZ R7,TT
 MOV R7,#200
 SETB 20H
 AJMP TT 
 end
(2)數碼管數據 p0,數碼管控制p2 獨立按鍵p1口  ,;對獨立鍵進行按鍵次數計數,三位數碼管顯示。     *
;K1按下後,進行加1計數                                                          *
;K2按下後,進行減1計數。       *
;K3按下後,進行加5計數。                                                        *
;K4按下後,清計數單元,數碼管顯示0。      *
;按住鍵可以快速計數。 
 K1      BIT  P1.4
        K2      BIT  P1.5
        K3      BIT  P1.6
        K4      BIT  P1.7
        K_OLD     EQU   30H
        K_NEW     EQU   31H
        K_COUNT   EQU   32H
        DISSTART  EQU   40H    ;顯示單元首地址
        LED_DATA  EQU   P0     ;數碼管數據口定義
;---------------------------------------------------------
         ORG  0000H
         JMP  MAIN
         ORG  0080H
;---------------------------------------------------------
MAIN:
         MOV  SP,#60H
         MOV  P1,#0FFH
         MOV  P0,#0FFH
         MOV  K_OLD,#00H
         MOV  K_COUNT,#00H
MAIN1:
         CALL  CONVT
         CALL  PLAY
         CALL  KEY_PROG
         JMP   MAIN1
KEY_PROG:
         CALL  K_SCAN           ;鍵掃描
         MOV  A,K_NEW
         CJNE  A,K_OLD,KEY_P1
         JMP  KEY_P_END
KEY_P1:
         MOV  R4,#20
KEY_P2:
         CALL  CONVT            ;用顯示程序來進行鍵延時
         CALL  PLAY
         DJNZ  R4,KEY_P2
         CALL  K_SCAN           ;再判斷鍵是否按下
         MOV  A,K_NEW
         CJNE  A,K_OLD,KEY_P3
         JMP  KEY_P_END
KEY_P3:
         JB ACC.0,LOOP1         ;K1按下
         JB ACC.1,LOOP2         ;K2按下
         JB ACC.2,LOOP3         ;K3按下
         JB ACC.3,LOOP4         ;K4按下
         JMP  KEY_P_END
LOOP1:
         INC  K_COUNT           ;鍵計數加1
         JMP  KEY_P_END
LOOP2:
         DEC  K_COUNT           ;鍵計數減1
         JMP  KEY_P_END
LOOP3:
         INC  K_COUNT           ;鍵計數加5
         INC  K_COUNT
         INC  K_COUNT
         INC  K_COUNT
         INC  K_COUNT
         JMP   KEY_P_END
LOOP4:
         MOV  K_COUNT,#00H      ;鍵計數單元清零
KEY_P_END:
         RET
;---------------------------------------------------------
;代碼變換 (HEX TO BCD)
;---------------------------------------------------------
CONVT:
         MOV  A,K_COUNT
         MOV  B,#100
         DIV  AB
         MOV  DISSTART+2,A    ;百位存放在DISSTART+2
         MOV  A,#10
         XCH  A,B
         DIV  AB
         MOV  DISSTART+1,A    ;十位存放在DISSTART+1
         MOV  DISSTART,B      ;個位存放在DISSTART
         RET
;---------------------------------------------------------
; 鍵掃描子程序
;---------------------------------------------------------
K_SCAN:
         MOV  P1,#0FFH
         MOV  K_NEW,#00H
         MOV  A,P1
         CPL  A
         ANL  A,#0F0H
         SWAP  A
         MOV  K_NEW,A
         RET
;---------------------------------------------------------
;延時子程序
;---------------------------------------------------------
DELAY:
         MOV  R6,#200
DEL:
         MOV  R7,#0FFH
         DJNZ  R7,$
         DJNZ  R6,DEL
         RET
;---------------------------------------------------------
PLAY:
         MOV R0,#DISSTART      ;獲得顯示單元首地址
         MOV R1,#07FH          ;從第一個數碼管開始
         MOV R2,#03H           ;共顯示3位數碼管
DISP1:
         MOV A,@R0             ;獲得當前位地址
         MOV DPTR,#TAB_NU      ;獲得表頭
         MOVC A,@A+DPTR        ;查表獲得顯示數據
         MOV LED_DATA,A        ;顯示數據
         MOV P2,R1             ;開始顯示當前位
         MOV A,R1              ;准備顯示下一位
         RR A
         MOV R1,A              ;下一位
         INC R0                ;取下一個單元地址
         LCALL DELAY2MS        ;延時 2 MS
         DJNZ R2,DISP1         ;重復顯示下一個
         MOV  P2,#0FFH         ;關閉顯示
         RET                   ;顯示完成,返回
;---------------------------------------------------------
;延時子程序
;---------------------------------------------------------
DELAY2MS:
         MOV  R6,#10
DEL1:
         MOV  R7,#100
         DJNZ  R7,$
         DJNZ  R6,DEL1
         RET
TAB_NU:
    db 28h,7eh,0a2h,62h,74h,61h,21h,7ah,20h,60h ;字形代碼表
;**********************************************************
         END
兩個例子我想夠你明白的了。詳細的解釋,代表性的例子,可慢慢學習