<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>

您好,歡迎來電子發燒友網! ,新用戶?[免費注冊]

您的位置:電子發燒友網>電子元器件>數碼管>

vhdl數碼管中的倒計時程序介紹

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

VHDL語言是一種用于電路設計的高級語言。它在80年代的后期出現。最初是由美國國防部開發出來供美軍用來提高設計的可靠性和縮減開發周期的一種使用范圍較小的設計語言 。

VHDL翻譯成中文就是超高速集成電路硬件描述語言,主要是應用在數字電路的設計中。它在中國的應用多數是用在FPGA/CPLD/EPLD的設計中。當然在一些實力較為雄厚的單位,它也被用來設計ASIC。

VHDL主要用于描述數字系統的結構,行為,功能和接口。除了含有許多具有硬件特征的語句外,VHDL的語言形式、描述風格以及語法是十分類似于一般的計算機高級語言。VHDL的程序結構特點是將一項工程設計,或稱設計實體(可以是一個元件,一個電路模塊或一個系統)分成外部(或稱可視部分,及端口)和內部(或稱不可視部分),既涉及實體的內部功能和算法完成部分。在對一個設計實體定義了外部界面后,一旦其內部開發完成后,其他的設計就可以直接調用這個實體。這種將設計實體分成內外部分的概念是VHDL系統設計的基本點。

本文為大家帶來vhdl數碼管中的倒計時程序介紹

實現功能

按下啟動暫停按鍵時,倒計時開始工作,再按一次啟動暫停按鍵時,則暫停倒計時。在任何時候,按下復位按鍵,倒計時將暫停工作,并且恢復倒計時當前默認值99。

源代碼

源代碼講解如下:

#include “REG52.H”

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

#define const_voice_long 200 //蜂鳴器長叫的持續時間

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

#define const_key_time2 20 //按鍵去抖動延時的時間

#define const_dpy_time_half 200 //數碼管閃爍時間的半值

#define const_dpy_time_all 400 //數碼管閃爍時間的全值 一定要比const_dpy_time_half 大

/* 注釋一:

* 如何知道1秒鐘需要多少個定時中斷?

* 這個需要編寫一段小程序測試,得到測試的結果后再按比例修正。

* 步驟:

* 第一步:在程序代碼上先寫入1秒鐘大概需要200個定時中斷。

* 第二步:把程序燒錄進單片機后,上電開始測試,手上同步打開手機里的秒表。

* 如果單片機倒計時跑完了99秒,而手機上的秒表才走了45秒。

* 第三步:那么最終得出1秒鐘需要的定時中斷次數是:const_1s=(200*99)/45=440

*/

#define const_1s 440 //大概一秒鐘所需要的定時中斷次數

void initial_myself();

void initial_peripheral();

void delay_short(unsigned int uiDelayShort);

void delay_long(unsigned int uiDelaylong);

//驅動數碼管的74HC595

void dig_hc595_drive(unsigned char ucDigStatusTemp16_09,unsigned char ucDigStatusTemp08_01);

void display_drive(); //顯示數碼管字模的驅動函數

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

//驅動LED的74HC595

void hc595_drive(unsigned char ucLedStatusTemp16_09,unsigned char ucLedStatusTemp08_01);

void T0_time(); //定時中斷函數

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

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

sbit key_sr1=P0^0; //對應朱兆祺學習板的S1鍵

sbit key_sr2=P0^1; //對應朱兆祺學習板的S5鍵

sbit key_gnd_dr=P0^4; //模擬獨立按鍵的地GND,因此必須一直輸出低電平

sbit beep_dr=P2^7; //蜂鳴器的驅動IO口

sbit led_dr=P3^5; //作為中途暫停指示燈 亮的時候表示中途暫停

sbit dig_hc595_sh_dr=P2^0; //數碼管的74HC595程序

sbit dig_hc595_st_dr=P2^1;

sbit dig_hc595_ds_dr=P2^2;

sbit hc595_sh_dr=P2^3; //LED燈的74HC595程序

sbit hc595_st_dr=P2^4;

sbit hc595_ds_dr=P2^5;

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

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

unsigned char ucKeyLock1=0; //按鍵觸發后自鎖的變量標志

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

unsigned char ucKeyLock2=0; //按鍵觸發后自鎖的變量標志

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

unsigned char ucDigShow8; //第8位數碼管要顯示的內容

unsigned char ucDigShow7; //第7位數碼管要顯示的內容

unsigned char ucDigShow6; //第6位數碼管要顯示的內容

unsigned char ucDigShow5; //第5位數碼管要顯示的內容

unsigned char ucDigShow4; //第4位數碼管要顯示的內容

unsigned char ucDigShow3; //第3位數碼管要顯示的內容

unsigned char ucDigShow2; //第2位數碼管要顯示的內容

unsigned char ucDigShow1; //第1位數碼管要顯示的內容

unsigned char ucDigDot8; //數碼管8的小數點是否顯示的標志

unsigned char ucDigDot7; //數碼管7的小數點是否顯示的標志

unsigned char ucDigDot6; //數碼管6的小數點是否顯示的標志

unsigned char ucDigDot5; //數碼管5的小數點是否顯示的標志

unsigned char ucDigDot4; //數碼管4的小數點是否顯示的標志

unsigned char ucDigDot3; //數碼管3的小數點是否顯示的標志

unsigned char ucDigDot2; //數碼管2的小數點是否顯示的標志

unsigned char ucDigDot1; //數碼管1的小數點是否顯示的標志

unsigned char ucDigShowTemp=0; //臨時中間變量

unsigned char ucDisplayDriveStep=1; //動態掃描數碼管的步驟變量

unsigned char ucWd=1; //本程序的核心變量,窗口顯示變量。類似于一級菜單的變量。代表顯示不同的窗口。

unsigned char ucWd1Update=1; //窗口1更新顯示標志

unsigned char ucCountDown=99; //倒計時的當前值

unsigned char ucStartFlag=0; //暫停與啟動的標志位

unsigned int uiTimeCnt=0; //倒計時的時間計時器

unsigned char ucTemp1=0; //中間過渡變量

unsigned char ucTemp2=0; //中間過渡變量

unsigned char ucTemp3=0; //中間過渡變量

unsigned char ucTemp4=0; //中間過渡變量

unsigned char ucTemp5=0; //中間過渡變量

unsigned char ucTemp6=0; //中間過渡變量

unsigned char ucTemp7=0; //中間過渡變量

unsigned char ucTemp8=0; //中間過渡變量

//根據原理圖得出的共陰數碼管字模表

code unsigned char dig_table[]=

{

0x3f, //0 序號0

0x06, //1 序號1

0x5b, //2 序號2

0x4f, //3 序號3

0x66, //4 序號4

0x6d, //5 序號5

0x7d, //6 序號6

0x07, //7 序號7

0x7f, //8 序號8

0x6f, //9 序號9

0x00, //無 序號10

0x40, //- 序號11

0x73, //P 序號12

};

void main()

{

initial_myself();

delay_long(100);

initial_peripheral();

while(1)

{

key_service(); //按鍵服務的應用程序

display_service(); //顯示的窗口菜單服務程序

}

}

    本文導航

    • 第 1 頁:vhdl數碼管中的倒計時程序介紹
    • 第 2 頁:源代碼
    • 第 3 頁:源代碼

非常好我支持^.^

(0) 0%

不好我反對

(0) 0%

( 發表人:李建兵 )

      發表評論

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

      發表評論,獲取積分! 請遵守相關規定!

      ?
      亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
      <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
      <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
      <acronym id="s8ci2"></acronym>
      <acronym id="s8ci2"><center id="s8ci2"></center></acronym>