(二)設計要求
1.隨機產生抽獎號碼。
2.可以隨時啟動和停止抽獎
3.實時顯示抽獎結果
(三)設計方法
本設計由三部分組成:CPU處理模塊,按鍵抽獎控制模塊,抽獎信息顯示模塊。其中CPU處理模塊控制所有的電路,當抽獎啟動鍵按下后,CPU識別到按鍵按下,開始持續產生隨機數(抽獎號碼),當抽獎停止鍵按下后,CPU識別到按鍵按下,立刻停止隨機數的產生,并在顯示模塊顯示出當前隨機數(抽獎號碼)。
二 硬件設計
(一)硬件設計方案
本設計使用AT89C51芯片作為主芯片,使用兩個獨立按鍵作為抽獎的啟動鍵和停止鍵,以及四位共陰數碼管作為抽獎號碼的顯示模塊。硬件設計結構簡單可靠,不需要額外的電路部分節省了制造生產成本。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei.png (15.13 KB, 下載次數: 34)
下載附件
2020-7-12 14:24 上傳
(三)按鍵電路設計
本設計按鍵部分使用兩個獨立按鍵,一個作為抽獎的啟動鍵,一端與接芯片P1.0口相接,一端與地線相接。一個作為抽獎的停止鍵,一端與接芯片的P1.4口相接,一端與地線相接。按鍵按下即可送出低電平信號。如圖三所示。
圖三(按鍵電路)
(四)數碼管顯示部分
本設計的顯示部分采用7SEG-MPX4-CC,即四位共陰極數碼管,該數碼管剛好可以滿足稍復雜的4位抽獎號,既確保了有足夠的抽獎號數量同時又方便記錄和查看。數碼管的A,B,C,D,E,F,G,DP分別與芯片的P2.0至P2.7相連,以控制數碼管所顯示的內容,而數碼管的1,2,3,4分別與芯片的P3.0至P3.3相連,用于控制數碼管所顯示數字的位置。如圖四所示。
程序開始后,進入while循環等待按鍵K1的按下,待K1按下后定時器開始計時,將TL0,TH0的值分別賦給sum1和sum2,sum1和sum2進行除以10取余10和直接取余10后得到不同的個位數,再以此為數組下標分別從數組led[ ]中取數碼管的數值顯示,在條件循環while(counter==1)里循環等待按鍵K2的按下,若K2按下,則跳出while(counter==1)循環,停止隨機數的產生,將當前隨機數一直顯示在數碼管上,完成一次抽獎。
(二)各部分代碼分析
1.主函數
void main()
{
TMOD=0x01;
TH0=0x00;
TL0=0x00;
EA=1;
ET0=1;
TR0=1;
key();
}
主函數,設定了定時器的工作方式,定時器初值,調用了key函數。
2.按鍵邏輯函數
void key()
{
while(1)
{
if(k1==0)
{
counter=1;
while(counter==1)
{
sum1=TL0;
sum2=TH0;
display();
delay(35);
TR0=1;
if(k2==0)
{break;}
}
}
if(k2==0)
{
P2=0x00;
P3=0x00;
sum1=TL0;
sum2=TH0;
TR0=0;
if(k1==0)
{break;}
}
display();
}
}
按鍵函數中設定了按鍵控制隨機數的產生和顯示邏輯,只有K1按下后才會產生隨機數,K2按下后會停止并顯示當前隨機數。
3.顯示函數
void display()
{
P2=led[sum1%10];
P3=0xfe;
delay(2);
P3=0xff;
P2=led[sum1/10%10];
P3=0xfd;
delay(2);
P3=0xff;
P2=led[sum2%10];
P3=0xfb;
delay(2);
P3=0xff;
P2=led[sum2/10%10];
P3=0xf7;
delay(2);
P3=0xff;
}
顯示函數通過對sum1和sum2的運算得到個位數,并以此為下標在數組內找到對應數字從P3口送出。
全部資料51hei下載地址(Proteus仿真+源程序):
基于51單片機的電子抽獎.zip
(64.41 KB, 下載次數: 52)
2020-7-12 10:42 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|