女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

您好,歡迎來電子發(fā)燒友網(wǎng)! ,新用戶?[免費注冊]

您的位置:電子發(fā)燒友網(wǎng)>電子元器件>數(shù)碼管>

源代碼 - vhdl數(shù)碼管中的倒計時程序介紹

2018年01月29日 13:42 電子發(fā)燒友整理 作者: 用戶評論(0

/* 注釋二:

*鴻哥首次提出的“一二級菜單顯示理論”:

*凡是人機界面顯示,不管是數(shù)碼管還是液晶屏,都可以把顯示的內(nèi)容分成不同的窗口來顯示,

*每個顯示的窗口中又可以分成不同的局部顯示。其中窗口就是一級菜單,用ucWd變量表示。

*局部就是二級菜單,用ucPart來表示。不同的窗口,會有不同的更新顯示變量ucWdXUpdate來對應(yīng),

*表示整屏全部更新顯示。不同的局部,也會有不同的更新顯示變量ucWdXPartYUpdate來對應(yīng),表示局部更新顯示。

*/

void display_service() //顯示的窗口菜單服務(wù)程序

{

//由于本程序只有一個窗口,讀者在做實際項目的時候,可以省略switch(ucWd)

switch(ucWd) //本程序的核心變量,窗口顯示變量。類似于一級菜單的變量。代表顯示不同的窗口。

{

case 1: //顯示窗口1的數(shù)據(jù)

if(ucWd1Update==1) //窗口1要全部更新顯示

{

ucWd1Update=0; //及時清零標(biāo)志,避免一直進來掃描

ucTemp8=10; //顯示空

ucTemp7=10; //顯示空

ucTemp6=10; //顯示空

ucTemp5=10; //顯示空

ucTemp4=10; //顯示空

ucTemp3=10; //顯示空

ucTemp2=ucCountDown/10; //倒計時的當(dāng)前值

ucTemp1=ucCountDown%10;

ucDigShow8=ucTemp8;

ucDigShow7=ucTemp7;

ucDigShow6=ucTemp6;

ucDigShow5=ucTemp5;

ucDigShow4=ucTemp4;

ucDigShow3=ucTemp3;

if(ucCountDown<10)

{

ucDigShow2=10;

}

else

{

ucDigShow2=ucTemp2;

}

ucDigShow1=ucTemp1;

}

break;

}

}

void key_scan()//按鍵掃描函數(shù) 放在定時中斷里

{

if(key_sr1==1)//IO是高電平,說明按鍵沒有被按下,這時要及時清零一些標(biāo)志位

{

ucKeyLock1=0; //按鍵自鎖標(biāo)志清零

uiKeyTimeCnt1=0;//按鍵去抖動延時計數(shù)器清零,此行非常巧妙,是我實戰(zhàn)中摸索出來的。

}

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

{

uiKeyTimeCnt1++; //累加定時中斷次數(shù)

if(uiKeyTimeCnt1>const_key_time1)

{

uiKeyTimeCnt1=0;

ucKeyLock1=1; //自鎖按鍵置位,避免一直觸發(fā)

ucKeySec=1; //觸發(fā)1號鍵

}

}

if(key_sr2==1)//IO是高電平,說明按鍵沒有被按下,這時要及時清零一些標(biāo)志位

{

ucKeyLock2=0; //按鍵自鎖標(biāo)志清零

uiKeyTimeCnt2=0;//按鍵去抖動延時計數(shù)器清零,此行非常巧妙,是我實戰(zhàn)中摸索出來的。

}

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

{

uiKeyTimeCnt2++; //累加定時中斷次數(shù)

if(uiKeyTimeCnt2>const_key_time2)

{

uiKeyTimeCnt2=0;

ucKeyLock2=1; //自鎖按鍵置位,避免一直觸發(fā)

ucKeySec=2; //觸發(fā)2號鍵

}

}

}

void key_service() //按鍵服務(wù)的應(yīng)用程序

{

switch(ucKeySec) //按鍵服務(wù)狀態(tài)切換

{

case 1:// 啟動和暫停按鍵 對應(yīng)朱兆祺學(xué)習(xí)板的S1鍵

//由于本程序只有一個窗口,讀者在做實際項目的時候,可以省略switch(ucWd)

switch(ucWd) //在不同的窗口下,設(shè)置不同的參數(shù)

{

case 1:

if(ucStartFlag==0) //如果原來處于暫停的狀態(tài),則啟動

{

ucStartFlag=1; //啟動

}

else //如果原來處于啟動的狀態(tài),則暫停

{

ucStartFlag=0; //暫停

}

break;

}

uiVoiceCnt=const_voice_short; //按鍵聲音觸發(fā),滴一聲就停。

ucKeySec=0; //響應(yīng)按鍵服務(wù)處理程序后,按鍵編號清零,避免一致觸發(fā)

break;

case 2:// 復(fù)位按鍵 對應(yīng)朱兆祺學(xué)習(xí)板的S5鍵

//由于本程序只有一個窗口,讀者在做實際項目的時候,可以省略switch(ucWd)

switch(ucWd) //在不同的窗口下,設(shè)置不同的參數(shù)

{

case 1:

ucStartFlag=0; //暫停

ucCountDown=99; //恢復(fù)倒計時的默認值99

uiTimeCnt=0; //倒計時的時間計時器清零

ucWd1Update=1; //窗口1更新顯示標(biāo)志 只要ucCountDown變化了,就要更新顯示一次

break;

}

uiVoiceCnt=const_voice_short; //按鍵聲音觸發(fā),滴一聲就停。

ucKeySec=0; //響應(yīng)按鍵服務(wù)處理程序后,按鍵編號清零,避免一致觸發(fā)

break;

}

}

void display_drive()

{

//以下程序,如果加一些數(shù)組和移位的元素,還可以壓縮容量。但是鴻哥追求的不是容量,而是清晰的講解思路

switch(ucDisplayDriveStep)

{

case 1: //顯示第1位

ucDigShowTemp=dig_table[ucDigShow1];

if(ucDigDot1==1)

{

ucDigShowTemp=ucDigShowTemp|0x80; //顯示小數(shù)點

}

dig_hc595_drive(ucDigShowTemp,0xfe);

break;

case 2: //顯示第2位

ucDigShowTemp=dig_table[ucDigShow2];

if(ucDigDot2==1)

{

ucDigShowTemp=ucDigShowTemp|0x80; //顯示小數(shù)點

}

dig_hc595_drive(ucDigShowTemp,0xfd);

break;

case 3: //顯示第3位

ucDigShowTemp=dig_table[ucDigShow3];

if(ucDigDot3==1)

{

ucDigShowTemp=ucDigShowTemp|0x80; //顯示小數(shù)點

}

dig_hc595_drive(ucDigShowTemp,0xfb);

break;

case 4: //顯示第4位

ucDigShowTemp=dig_table[ucDigShow4];

if(ucDigDot4==1)

{

ucDigShowTemp=ucDigShowTemp|0x80; //顯示小數(shù)點

}

dig_hc595_drive(ucDigShowTemp,0xf7);

break;

case 5: //顯示第5位

ucDigShowTemp=dig_table[ucDigShow5];

if(ucDigDot5==1)

{

ucDigShowTemp=ucDigShowTemp|0x80; //顯示小數(shù)點

}

dig_hc595_drive(ucDigShowTemp,0xef);

break;

case 6: //顯示第6位

ucDigShowTemp=dig_table[ucDigShow6];

if(ucDigDot6==1)

{

ucDigShowTemp=ucDigShowTemp|0x80; //顯示小數(shù)點

}

dig_hc595_drive(ucDigShowTemp,0xdf);

break;

case 7: //顯示第7位

ucDigShowTemp=dig_table[ucDigShow7];

if(ucDigDot7==1)

{

ucDigShowTemp=ucDigShowTemp|0x80; //顯示小數(shù)點

}

dig_hc595_drive(ucDigShowTemp,0xbf);

break;

case 8: //顯示第8位

ucDigShowTemp=dig_table[ucDigShow8];

if(ucDigDot8==1)

{

ucDigShowTemp=ucDigShowTemp|0x80; //顯示小數(shù)點

}

dig_hc595_drive(ucDigShowTemp,0x7f);

break;

}

ucDisplayDriveStep++;

if(ucDisplayDriveStep>8) //掃描完8個數(shù)碼管后,重新從第一個開始掃描

{

ucDisplayDriveStep=1;

}

}

//數(shù)碼管的74HC595驅(qū)動函數(shù)

非常好我支持^.^

(0) 0%

不好我反對

(0) 0%

( 發(fā)表人:李建兵 )

      發(fā)表評論

      用戶評論
      評價:好評中評差評

      發(fā)表評論,獲取積分! 請遵守相關(guān)規(guī)定!

      ?