九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
Keil C51學習 2 點亮LED燈

P0口聯(lián)接8個LED燈,P1^0~P1^7;

#include<reg52.h>
sbit LED=P1^0;
void main()
{
    LED=0;
    while(1);
}

 

//此方法使用1個字節(jié)對單個端口賦值
P1 = 0xFF; //P1口全部為高電平,對應的LED燈全滅掉,
//ff換算成二進制是 1111 1111

P1 = 0xfe; //P1口的最低位點亮,可以更改數值是其他的燈點亮
//0xfe是16進制,0x開頭表示16進制數,
//fe換算成二進制是 1111 1110

全部取反,主函數中的代碼修改為

 LED=~LED;      

#include<reg52.h>
unsigned int i,j;
void main()
{    
    while(1)
    {
        P1=~(1<<j++); 
        if(j==8)
        {
            j=0;
        }
        for(i=0;i<50000;i++);
    }    
}

 

 1 void main (void)
 2 {
 3   while (1)         //主循環(huán)
 4   {                  //主循環(huán)中添加其他需要一直工作的程序
 5        LED=~LED;           
 6         //將P1.0口賦值 0,對外輸出低電平
 7             delay(100);//執(zhí)行100次
 8   }
 9 }
10 void delay(int time)//延時函數
11 {
12      int i=0;
13      while(time--)
14      {
15          i=4000;
16          while(i--);
17      }
18 }
延時閃爍
 1 void delay(int time)//延時函數
 2 {
 3      int i=0;
 4      while(time--)
 5      {
 6          i=4000;
 7          while(i--);
 8      }
 9 }
10 void main (void)
11 {
12   while (1)         //主循環(huán)
13   {                  //主循環(huán)中添加其他需要一直工作的程序
14               
15     unsigned char i;  //定義一個無符號字符型局部變量 i 取值范圍 0~255
16     //P1=0xfe;           //賦初始值
17         for(i=0;i<8;i++)   //加入 for循環(huán),表明for循環(huán)大括號中的程序循環(huán)執(zhí)行8次
18         {
19             P1<<=1;
20             delay(100);//執(zhí)行100次
21         }
22   }
23 }
延時左移
 1 void delay(int time)//延時函數
 2 {
 3      int i=0;
 4      while(time--)
 5      {
 6          i=4000;
 7          while(i--);
 8      }
 9 }
10 void main (void)
11 {
12                    
13 unsigned char i;  //定義一個無符號字符型局部變量 i 取值范圍 0~255
14 delay(100);
15 P1=0xfe;           //賦初始值
16     while (1)         //主循環(huán)
17   {
18  for(i=0;i<8;i++)   //加入 for循環(huán),表明for循環(huán)大括號中的程序循環(huán)執(zhí)行8次
19   {
20    delay(100);
21    P1<<=1;
22    P1=P1|0x01;     //左移后,最右端自動賦值0,所以需要該語句賦值1
23   } 
24   P1=0xfe;           //重新賦初始值
25   //主循環(huán)中添加其他需要一直工作的程序
26   }
27 }
循環(huán)左移
 1 sbit LED0=P1^0;
 2 void delay(int i)//延時函數
 3 {
 4          while(i--);
 5 }
 6 void main (void)
 7 {
 8                        
 9 unsigned int CYCLE=600,PWM_LOW=0;//定義周期并賦值
10 while (1)         //主循環(huán)
11   {
12  LED0=1;
13  delay(60000);        //特意加延時,可以看到熄滅的過程
14  for(PWM_LOW=1;PWM_LOW<CYCLE;PWM_LOW++){ //PWM_LOW表示低
15  //電平時間,這個循環(huán)中低電平時長從1累加到CYCLE(周期)的值,即600次
16 
17            LED0=0;        //點亮LED  
18            delay(PWM_LOW);//延時長度,600次循環(huán)中從1加至599
19            LED0=1;        //熄滅LED
20           delay(CYCLE-PWM_LOW);//延時長度,600次循環(huán)中從599減至1
21      
22    }
23  LED0=0;
24  for(PWM_LOW=CYCLE-1;PWM_LOW>0;PWM_LOW--){ //與逐漸變亮相反的過程
25 
26            LED0=0;
27            delay(PWM_LOW);
28            LED0=1;
29           delay(CYCLE-PWM_LOW);
30    }
31                      //主循環(huán)中添加其他需要一直工作的程序
32   }
33 }
呼吸燈

 流水燈

 1 #include<reg52.h> //包含頭文件,一般情況不需要改動,
 2                   //頭文件包含特殊功能寄存器的定義
 3 
 4 void delay100ms(unsigned char num);
 5 /*------------------------------------------------
 6                  流水燈
 7 ------------------------------------------------*/
 8 void main (void)
 9 {
10     unsigned char led=0xff,mask=0x1,flag=0;
11     //unsigned char tflag=0,time=100;
12     while(1)
13     {
14         P1=led^mask; //mask為0 全滅
15         delay100ms(5); //延時500ms
16         if(0x80==mask)
17             flag=0;// 讓mask向右位移
18         if(0x1==mask)
19             flag=1;//讓mask向左位移
20         flag?(mask<<=1):(mask>>=1);
21     }
22 }
23 
24 void delay100ms(unsigned char num)
25 {
26     unsigned char n,m;
27     for(;num;num--)
28     {
29         for(n=200;n;n--)
30         {
31             for(m=250;m;m--);
32         }
33     }
34 }
流水燈

函數實現(xiàn)流水燈

 1 #include<reg52.h> //包含頭文件,一般情況不需要改動,
 2 #include<intrins.h>
 3 #define uchar unsigned char    //頭文件包含特殊功能寄存器的定義
 4 void delay100ms(unsigned char num);
 5 /*------------------------------------------------
 6                 利用_crol_、_cror_實現(xiàn)流水燈
 7 _crol_ 將char型變量循環(huán)左移
 8 _cror_ 將char型變量循環(huán)右移
 9 ------------------------------------------------*/
10 void main (void)
11 {
12     uchar x=0x3;
13     bit flag=0;
14     while(1)
15     {
16         P1=x; 
17         delay100ms(10);
18         if(0x3==x)
19             flag=0;
20         else if(0xc0==x)
21             flag=1;
22         flag?(x=_cror_(x,2)):(x=_crol_(x,2));
23     }
24 }
25 //延時函數
26 void delay100ms(unsigned char num)
27 {
28     unsigned char n,m;
29     for(;num;num--)
30     {
31         for(n=200;n;n--)
32         {
33             for(m=250;m;m--);
34         }
35     }
36 }
流水燈2

指針實現(xiàn)流水燈

#include <reg52.h>
void delay(unsigned int);
//指針實現(xiàn)流水燈代碼
unsigned char dis[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
void main()
{
    unsigned char i,*p;//定義一個無符號字符型變量i各一個指向無符號字符型變量的指針變量P
    while(1)
    {
        p=&dis[0];//把數組中第一個成員數據(0xFE)所占的內存地址賦給指針變量P
        for(i=0;i<8;i++)
        {
                P1=*p;//取指針指向的數組元素,并拷貝給單片機的P0口
                p++;  //指針加1,指向數組的下一個元素
            delay(10);
        }
    }
}
void delay(unsigned int i)
{
    unsigned int j;
    for(;i!=0;i--)
    {
        for(j=3000;j!=0;j--);
    }
}
指針實現(xiàn)流水燈

花樣流水燈

 1 #include<reg52.h> //包含頭文件,一般情況不需要改動,
 2 #define uchar unsigned char    //頭文件包含特殊功能寄存器的定義
 3 uchar code tab[]={
 4     0x1,0x2,0x4,0x8,0x10,0x20,0x40,0x80, //正向流水燈
 5   0x40,0x20,0x10,0x8,0x4,0x2,0x1,0x0,  //反向流水燈
 6     0x55,0xaa,0x55,0xaa,0x55,0xaa,0x0,     //隔燈閃爍
 7     0x0f,0xf0,0x0f,0xf0,0x0,                         //高四盞 底四盞閃爍
 8     0xcc,0x33,0xcc,0x33,0xcc,0x33,0x0         //隔兩盞燈閃爍
 9 };
10 void delay100ms(unsigned char num);
11 /*------------------------------------------------
12                  花樣流水燈
13 ------------------------------------------------*/
14 void main (void)
15 {
16     uchar x;
17     while(1)
18     {
19         for(x=0;x<35;x++)
20         {
21             P1=tab[x]; 
22             delay100ms(10);
23         }
24     }
25 }
26 
27 void delay100ms(unsigned char num)
28 {
29     unsigned char n,m;
30     for(;num;num--)
31     {
32         for(n=200;n;n--)
33         {
34             for(m=250;m;m--);
35         }
36     }
37 }
花樣流水燈

指針,二維數組花樣流水燈

 

#include <reg52.h>
void delay(unsigned int ); //延時函數的聲明
//*******定義一個二維數組,存儲40個彩燈數據。*********** 
unsigned char dis[5][8]= 
{ 
{0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f} 
,{0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe} 
,{0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff} 
,{0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00} 
,{0x00,0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f} 
}; 
/***********************************主函數************************************/ 
void main(void) 
{unsigned char i; 
 unsigned char j; 
 unsigned char *p;//定義一個指向無符號字符型的指針變量。
while(1) 
{ p=&dis[0][0]; //取數組的首地址,也就是第0個元素的所在的地址。
 for(j=0;j<5;j++) //用兩層嵌套循環(huán)引用彩燈數組中的數據,行引用,一共5行。
 for(i=0;i<8;i++) //用兩層嵌套循環(huán)引用彩燈數組中的數據,列引用,一共8列。
 { 
 P1=*p++; //取數組中數據,同時指針加1。
 delay(10); //調用延時函數。
 } 
 } 
} 
/*******************************延時函數*************************************/ 
void delay(unsigned int i) 
{ 
 unsigned int j; 
 for(;i!=0;i--) 
 for(j=3000;j!=0;j--); 
}
指針,二維數組花樣流水燈

精確定時1秒移動走馬燈

#include<reg52.h>//包含訪問sfr庫函數
#include<intrins.h>//包含訪問內聯(lián)庫函數
#include <absacc.h>  
typedef unsigned int uint;      //對數據類型進行聲明定義
typedef unsigned char uchar;
typedef unsigned long ulong;
bit ldelay=0;
uchar speed=10;
uchar code ledp[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//預定的寫入 P1 的值
uchar ledi;//用來指示顯示順序
/*
    精確定時1秒閃爍LED
 */
 uint count;

unsigned char led=0xff,mask=0x1;
main()
{
        RCAP2H=0X10; //賦值52 0X1000,溢出30次等于1秒
        RCAP2L=0X00;
        TR2=1;    //啟動定時器
        ET2=1;    //打開定時器2中斷
        EA=1;        //打開總中斷
    while(1)
    {
         if(ldelay)
        {
            ldelay=0; //清除標記
             P1=ledp[ledi]; //讀出一個值送到 P1 口
             ledi++; //指向下一個
             if(ledi==8) 
             { 
                ledi=0; //到了最后一個燈就換到第一個
             } 
        }
         if(!K1)speed=30; //檢查到按鍵,設置對應的跑馬速度
         if(!K2)speed=15; 
         if(!K3)speed=6; 
         if(!K4)speed=3;
    }
}

//定時器2中斷
timer2() interrupt 5    //定時器2中斷是5號
{
    static uchar t;
    TF2=0;
    t++;
    if((t==speed)||(t>30))
    {
        t=0;
         ldelay=1;
    }
}
精確定時1秒閃爍LED

單按鍵10級調速走馬燈

#include<reg52.h>//包含訪問sfr庫函數
#include<intrins.h>//包含訪問內聯(lián)庫函數
#include <absacc.h>  

typedef unsigned int uint;      //對數據類型進行聲明定義
typedef unsigned char uchar;
typedef unsigned long ulong;

sbit K1=P3^2;           //包含絕對地址訪問庫函數
bit ldelay=0;
uchar speed=10;//設置一個變量保存默認的跑馬燈的移動速度
uchar speedlever=0; //保存當前的速度檔次
//一個按鍵控制的 10 級變速跑馬燈試驗
uchar code ledp[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//預定的寫入 P1 的值
uchar ledi;//用來指示顯示順序
uint n;
/*
    精確定時1秒閃爍LED
 */

unsigned char led=0xff,mask=0x1;
main()
{
        RCAP2H=0X10; //賦值52 0X1000,溢出30次等于1秒
        RCAP2L=0X00;
        TR2=1;    //啟動定時器
        ET2=1;    //打開定時器2中斷
        EA=1;        //打開總中斷
    while(1)
    {
         if(ldelay)
        {
            ldelay=0; //清除標記
             P1=ledp[ledi]; //讀出一個值送到 P1 口
             ledi++; //指向下一個
             if(ledi==8) 
             { 
                ledi=0; //到了最后一個燈就換到第一個
             } 
        }
         if(!K1) //檢查到按鍵,設置對應的跑馬速度
         {
            for(n=0;n<1000;n++); //等待按鍵穩(wěn)定
            { 
                 while(!K1); //等待按鍵松開
                 for(n=0;n<1000;n++); //等待按鍵穩(wěn)定松開
                 speedlever++; 
                 if(speedlever==10)speedlever=0; 
                 speed=speedlever*3; //檔次和延時之間的預算法則,也可以用查表方法,做出不規(guī)則的法則
            }
    }
}


}
//定時器2中斷
timer2() interrupt 5    //定時器2中斷是5號
{
    static uchar t;
    TF2=0;
    t++;
    if((t==speed)||(t>30))
    {
        t=0;
         ldelay=1;
    }
}
十級調速

 

本站僅提供存儲服務,所有內容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
51單片機 tm1620驅動3位數碼管程序
一個簡單的單片機直流可調穩(wěn)壓電源設計
《中學生C51單片機易學實戰(zhàn)入門教程》第二課
51單片機流水燈的三種實現(xiàn)方法
單片機很好玩4,三分鐘自制“通信協(xié)議”,實現(xiàn)電腦和單片機通信
單片機流水燈與呼吸燈結合
更多類似文章 >>
生活服務
熱點新聞
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服