程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> 關於C >> 流水燈C語言和匯編語言

流水燈C語言和匯編語言

編輯:關於C

流水燈C語言源程序
文件說明:流水燈C程序

程序說明:MCU采用AT89S51,外接11.0592M晶振,P2口輸出
  
#include<reg51.h>  
#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個流水燈逐個閃動
    {
     P2=~temp;
     delay(100);   //調用延時函數
     temp<<=1;
    }
temp=0x80;
for(i=0;i<8;i++) //8個流水燈反向逐個閃動
   {
    P2=~temp;
    delay(100);   //調用延時函數
    temp>>=1;
   }
    temp=0xFE;
for(i=0;i<8;i++) //8個流水燈依次全部點亮
    {
     P2=temp;
     delay(100);   //調用延時函數
     temp<<=1;
    }
   temp=0x7F;
   for(i=0;i<8;i++) //8個流水燈依次反向全部點亮
    {
     P2=temp;
     delay(100);   //調用延時函數
     temp>>=1;
    }
}
}
void delay(uint t)   //定義延時函數
      {
register uint bt;
        for(;t;t--)
        for(bt=0;bt<255;bt++);
      }
二、匯編程序:(同樣P2為輸出端口)
u     左移依次循環:
 
                ORG 0000H        
            SJMP MAIN        
            ORG 0030H       主程序開始的地址
MAIN:       MOV R2,#08H      設置循環次數
            MOV A,#0FEH         賦初值
NEXT:       MOV P2,A           把初值送到P2口
            LCALL DELAY          延時
            RL A                 左移一位
            DJNZ R2,NEXT      判斷循環次數是否到,沒有跳轉到NEXT繼續執行
                     SJMP MAIN           重復循環
DELAY:           MOV R3,#0FFH          延時程序
DEL2:             MOV R4,#0FFH     
DEL1:             NOP              
                     DJNZ R4,DEL1     
                     DJNZ R3,DEL2     
                     RET              
                     END                      結束
   
u     二邊散開後縮進(查表指令)
                    ORG 0000H           
                    SJMP MAIN           
                    ORG 0030H           
MAIN:           MOV SP,#60H         
                MOV DPTR,#TAB          把表首地址送到DPTR
                MOV R2,#06              設置循環次數
LOOP:           CLR A                          清零A
                MOVC A,@A+DPTR         查表指令
                    MOV P1,A           把A中的值送到P1口
                    LCALL DELAY                延時
                    INC DPTR                  改變數據指針
                  DJNZ R2,LOOP 判斷循環是否到,沒有跳轉LOOP
                    SJMP MAIN                  重復循環
DELAY:          MOV R0.#10                  延時
DEL2:          MOV R1,#200         
DEL1:          MOV R3,#255         
                    DJNZ R3,$          
                    DJNZ R1,DEL1       
                    DJNZ R0,DEL2       
                    RET
TAB:      DB 0E7H,0DBH,0BDH,7EH,0BDH,0DBH    查表                                                                                                                                                                                                                                                                                                           
                   END
 
  

*
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved