獨立按鍵控制跑馬燈的方向

2022-07-17 19:51:09 字數 3455 閱讀 9476

#include "reg52.h"

#define const_time_level_09_16 300  //第9個至第16個led跑馬燈的速度延時時間

#define const_voice_short 40 //蜂鳴器短叫的時間

#define const_key_time1 30  //按鍵去抖動延時的時間

void initial_myself();

void initial_peripheral();

void delay_short(unsigned int uidelayshort);

void delay_long(unsigned int uidelaylong);

void led_flicker_09_16(); //第9個至第16個led跑馬燈程式,逐個滅且每次只能滅乙個

void hc595_drive(unsigned char ucledstatustemp16_09);

void led_updata(); //led更新函式

void t0_time(); //定時中斷函式

void key_service(); //按鍵服務應用程式

void key_scan(); //按鍵掃瞄程式

sbit hc595_sh_dr=p3^6;  //上公升沿時,資料暫存器資料移位

sbit hc595_st_dr=p3^5;  //上公升沿時移位暫存器的資料進入資料暫存器,下降沿時資料不變。當移位結束後,會產生乙個正脈衝,用於更新顯示資料。 

sbit hc595_ds_dr=p3^4;  //序列資料輸入端,級聯的話接上一級的q7

sbit beep_dr=p1^5;

sbit key_sr1=p0^0;

sbit key_gnd_dr=p0^4;

unsigned char uckeysec=0; //被觸發的按鍵編號

unsigned int uikeytimecnt1=0; //按鍵去抖動延時計數器

unsigned char uckeylock1=0;  //按鍵觸發後自鎖的變數標誌

unsigned int uivoicecnt=0;  //蜂鳴器鳴叫的持續時間計數器

unsigned char ucled_dr1=0; //代表16個燈的亮滅狀態,0滅,1亮

unsigned char ucled_dr2=0;

unsigned char ucled_dr3=0;

unsigned char ucled_dr4=0;

unsigned char ucled_dr5=0;

unsigned char ucled_dr6=0;

unsigned char ucled_dr7=0;

unsigned char ucled_dr8=0;

unsigned char ucled_dr9=0; 

unsigned char ucled_dr10=0;

unsigned char ucled_dr11=0;

unsigned char ucled_dr12=0;

unsigned char ucled_dr13=0;

unsigned char ucled_dr14=0;

unsigned char ucled_dr15=0;

unsigned char ucled_dr16=0;

unsigned char ucled_updata=0; //重新整理變數。每次更改led燈的狀態都要更新一次

unsigned char ucledstep_09_16=0; //第9個至第16個led跑馬燈的步驟變數

unsigned int uitimecnt_09_16=0;  //第9個至第16個led跑馬燈的統計定時中斷次數的延時計數器

unsigned char ucledstatus16_09=0; //代表底層74hc595輸出狀態的中間變數

unsigned char ucleddirflag=0;  //方向變數,把按鍵與跑馬燈關聯起來的核心變數,0代表正方向,1代表反方向

void main()

}void key_scan()  //按鍵掃瞄函式,放在定時中斷裡

else if(key_sr1==0) //有按鍵按下,且是第一次按下}}

void key_service() //按鍵服務應用程式

}void led_updata() //led更新函式

}void hc595_drive(unsigned char ucledstatustemp16_09)

hc595_st_dr=0;

delay_short(15);

hc595_st_dr=1;  //st引腳負責把暫存器的資料更新輸出到74hc595的輸出引腳上並且鎖存起來。上公升沿時更新顯示資料。

delay_short(15);

hc595_sh_dr=0; //拉低,抗干擾就增強

hc595_st_dr=0;

hc595_ds_dr=0;

}/*switch狀態機,進行程式切換*/

void led_flicker_09_16() //第1個至第8個led跑馬燈程式,逐個滅且每次只能滅乙個

else    //反方向

}break;

case 1:

if(uitimecnt_09_16>=const_time_level_09_16)

else

}break;

case 2:

if(uitimecnt_09_16>=const_time_level_09_16)

else

}break;

case 3:

if(uitimecnt_09_16>=const_time_level_09_16)

else

}break;

case 4:

if(uitimecnt_09_16>=const_time_level_09_16)

else

}break;

case 5:

if(uitimecnt_09_16>=const_time_level_09_16)

else

}break;

case 6:

if(uitimecnt_09_16>=const_time_level_09_16)

else

}break;

case 7:

if(uitimecnt_09_16>=const_time_level_09_16)

else

}break;}}

void t0_time() interrupt 1

else

th0=0xf8; //重灌初始值(65535-2000)=63535=0xf82f

tl0=0x2f;

tr0=1; //開中斷 

}void delay_short(unsigned int uidelayshort)

void initial_peripheral()

微控制器控制跑馬燈

一 跑馬燈和流水燈的區別 好多人分不清跑馬燈和流水燈,還以為是同一種狀態,雖然難度等級是一樣的,但是燈的亮滅顯示方式是不一樣的。請看下圖 二 微控制器控制led燈的常用電路接法 弄清楚跑馬燈的顯示狀態後可以開始進行設計了,在日常的跑馬燈設計電路中led燈一般接為這兩種形式,共電源或共地,也就是通常說...

5 獨立按鍵控制LED燈

按鍵控制led的開啟關閉 include void main void 按鍵控制一次流水燈 include unsigned char led void delayms int ms void main void void delayms int ms 按鍵控制迴圈流水燈 include unsig...

TextView跑馬燈的實現

在textview屬性中有這樣的乙個屬性 android ellipsize 設定當文字過長時,該控制項該如何顯示。有如下值設定 start 省略號顯示在開頭 end 省略號顯示在結尾 middle 省略號顯示在中間 marquee 以跑馬燈的方式顯示 動畫橫向移動 好像跑馬燈這種效果已經不用咱們來...