項目三任務5-單片機數碼顯示抽獎器_第1頁
項目三任務5-單片機數碼顯示抽獎器_第2頁
項目三任務5-單片機數碼顯示抽獎器_第3頁
項目三任務5-單片機數碼顯示抽獎器_第4頁
項目三任務5-單片機數碼顯示抽獎器_第5頁
已閱讀5頁,還剩21頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

項目三抽獎器設計任務五單片機數碼顯示抽獎器任務描述按動抽獎按鈕,抽獎器隨機生成四位編碼,4位LED數碼管實時顯示編碼。再次按下抽獎按鈕時,抽獎器停止運行,LED數碼管穩定顯示中獎號碼。

知識鏈接定時/計數器中斷隨機函數的使用中獎是一個隨機事件,要保證號碼隨機性,就必須要求系統產生一個隨機碼,以減少重復。而隨機碼產生的算法較為復雜,為較為簡單的實現該算法,本設計采用C51編譯環境提供的庫函數。使用rand()函數產生中獎號碼,然后送數碼管顯示。一、定時/計數器的工作原理

定時/計數器實質上是一個加1計數器。計數器每來一個脈沖,就自動加1,,當加到計數器為全1時,再輸入一個脈沖就使計數器回零,且計數器的溢出使相應的中斷標志位置1,向CPU發出中斷請求(定時/計數器中斷允許時)。如果定時/計數器工作于定時模式,則表示定時時間已到;如果工作于計數模式,則表示計數值已滿。

可見,由溢出時計數器的值減去計數初值才是加1計數器的計數值。

二、51單片機定時器結構

定時/計數器的實質是加1計數器(16位),由高8位和低8位兩個寄存器THx和TLx組成。TMOD是定時/計數器的工作方式寄存器,確定工作方式和功能;TCON是控制寄存器,控制T0、T1的啟動和停止及設置溢出標志。1、工作方式寄存器TMOD

工作方式寄存器TMOD用于設置定時/計數器的工作方式,低四位用于T0,高四位用于T1。其格式如下:位名稱GATEM1M0GATEM1M0位地址T1T0

M1M0工作方式說明00方式013位定時/計數器01方式116位定時/計數器10方式28位自動重裝定時/計數器11方式3T0分成兩個獨立的8位定時/計數器,T1停止計數。1、方式0

方式0為13位計數,由TL0的低5位(高3位未用)和TH0的8位組成。TL0的低5位溢出時向TH0進位,TH0溢出時,置位TCON中的TF0標志,向CPU發出中斷請求。2、方式1

方式1為16位計數,由TL0作為低8位,TH0作為高8位,組成了16位加1計數器。計數個數N與計數初值X的關系為:X=216+1-N3、方式2

方式2為自動重裝初值的8位計數方式。

計數個數與計數初值的關系為:X=28+1-N工作方式2特別適合于用作較精確的脈沖信號發生器。4、方式3

方式3只適用于定時/計數器T0,定時器T1處于方式3時相當于TR1=0,停止計數。工作方式3將T0分成為兩個獨立的8位計數器TL0和TH0。計數器初值的計算比如說你用的是12MHZ的晶振,那么單片機的震蕩周期就是1/12μs,狀態周期是1/6μs,機器周期是1μs。若我們定時1ms,初值是多少呢?1ms/1us=1000。也就是要計數1000個數。所以計數初值=216-1000+1(因為實際上計數器計數到65536才溢出)

=65535-1000+1

=64536

=FC18H?2、控制寄存器TCONTCON的低4位用于控制外部中斷,已在前面介紹。TCON的高4位用于控制定時/計數器的啟動和中斷申請。其格式如下:TF1(TCON.7):T1溢出中斷請求標志位。T1計數溢出時由硬件自動置TF1為1。CPU響應中斷后TF1由硬件自動清0。T1工作時,CPU可隨時查詢TF1的狀態。所以,TF1可用作查詢測試的標志。TF1也可以用軟件置1或清0,同硬件置1或清0的效果一樣。TR1(TCON.6):T1運行控制位。TR1=1時,T1開始工作;TR1=0時,T1停止工作。TR1由軟件置1或清0。所以,用軟件可控制定時/計數器的啟動與停止。TF0(TCON.5):T0溢出中斷請求標志位,其功能與TF1類同。TR0(TCON.4):T0運行控制位,其功能與TR1類同。位名稱TF1TR1TF0TR0IE1IT1IE0IT0位地址任務實施1.硬件電路。2.程序設計。1.硬件電路2.程序設計#include"reg51.h" /*8051單片機資源說明*/#include<stdlib.h> /*包含rand()函數*/#defineucharunsignedchar/*宏定義uchar變量類型*/#defineuintunsignedint

/*宏定義uint變量類型*/ucharcodeBitTab[]={0x7F,0xBF,0xDF,0xEF};/*數碼管位選掃描信號*/ucharcodeDispTab[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};

/*共陽段碼表*/uintrandvalue=0,randtmp;

/*定義抽獎號和隨機值變量*/ucharcount;/*按鍵次數統計值*/sbitkey=P3^2; /*按鍵定義*//*外部中斷0初始化*/voidinit(){ EA=1;//打開總中斷 IT0=1;;

//設置下降沿觸發EX0=1;;

//打開外部中斷0}/*毫秒延時程序*/voidmDelay(uintm){ ucharc;;

for(;m>0;m--) for(c=124;c>0;c--);}/*外部中斷0中斷服務函數*/voidint_0()interrupt0{EA=0;//關閉總中斷key=1;//P3.2初始值置1

if(key==0){

mDelay(10); //去抖動

if(key==0){

//確認有鍵按下

TR0=1;//中斷標志位置1count++;//按鍵次數加1

}

if(count==2){//按鍵第二次按下

TR0=0;//中斷標志位清0

count=0;//按鍵次數清零

}

}

EA=1;}/*中獎號碼顯示函數*/voiddisp_led(){

ucharj,tmp,DispBuf[4];DispBuf[0]=randvalue/1000; /*中獎號碼千位*/DispBuf[1]=(randvalue%1000)/100; /*中獎號碼百位*/

DispBuf[2]=(randvalue%100)/10; /*中獎號碼十位*/DispBuf[3]=randvalue%10; /*中獎號碼個位*/

for(j=0;j<4;j++) /*動態掃描*/

{

tmp=DispBuf[j];

P0=DispTab[tmp];

P2=BitTab[j];

mDelay(1);

P2=0xff; //熄滅數碼管,消除相互干擾

}}/*********************定義中獎號碼產生函數*************/voidtimer0_init(){

TMOD=0x01;//定時器相關初始化操作,定時器T0被定義為工作方式1(16位定時/計數器)

EA=1;//總中斷打開ET0=1;//定時器T0啟動TH0=0xC5;//15ms變化一次,65535-15000+1=50536=C568H

TL0=0x68;}voidtimer0()interrupt1{

randtmp=rand();//通過rand()函數產生隨機值randtmpif(randtmp>=0&&randtmp<10000)//判斷randtmp是否在0-10000

randvalue=randtmp;//將隨機值賦給抽獎號碼randvalueTH0=0xC5;//15ms變化一次

TL0=0x68;}/************************主函數********************/{init();

timer()_init();

while(1)

disp_led();}知識總結1.定時/計數器實質上是一個加1計數器。當加到計數器為全1時,再加1,相應的

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論