一、實驗目的:
1、通過AT89C51的定時器實現60s倒計時,顯示采用兩位數碼管動態顯示。
2、用PROTEUS設計,仿真基於AT89C51單片機的60s倒計時實驗。
注意掃描頻率為12MHZ。
二、實驗電路圖設計如下:
圖(2)
三、實驗儀器和實驗設備
PC機、PROTEUS軟件或W-A-51綜合開發學習版。
四、源程序設計
根據電路圖自行編寫
我寫的如下代碼:
#include<reg52.h>
#include<intrins.h>
void time0over();
sbit M2=P1^2;/*十位*/
sbit M3=P1^3;/*個位*/
char table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
int k=60,m=0;
void delay(int n) //延時函數
{
int z;
for(z=0;z<n;z++)
_nop_();
}
void main()
{
TMOD=0x01;
TH0=0x3c;
TL0=0xb0;/*50ms*/
TR0=1;
while(1)
{
if(TF0)
{
TF0=0;
TH0=0x3c;
TL0=0xb0;
P0=table[k/10]; /*十位*/
M3=1;M2=0; /*個位關*/
delay(100);
M3=0;M2=0; /*個位開*/
P0=table[k%10]; /*個位*/
M2=1;M3=0; /*十位關*/
delay(100);
M2=0;M3=0; /*十位開*/
m++;
}
if(m==20)
{
m=0;
k--;
if(k==-1)k=60;
}
}
}
我本想通過用定時來實現控制這個三極管 但好像無法成 ,如圖(1)所示。但用如圖(2)卻·能實現這個這個60s倒計時的實驗。但是可能有些畫圖的時候會出現閃屏,也有的不會出現閃屏,但具體原因,我也不知道。
但應該是器件畫圖的問題。
這是利用一個人的時角差來展示這個倒計時的實現的 你可以把 延遲函數delay() 的延遲數調大一點就可以明白啦。
學習方式:理解三極管的放大作用:http://www.360doc.com/content/10/0314/13/1880_18715245.shtml
當晶體管被用作放大器使用時,其中兩個電極用作信號 (待放大信號) 的輸入端子;兩個電極作為信號 (放大后的信號) 的輸出端子。 那么,晶體管三個電極中,必須有一個電極既是信號的輸入端子,又同時是信號的輸出端子,這個電極稱為輸入信號和輸出信號的公共電極。 按晶體管公共電極的不同選擇,晶體管放大電路有三種:共基極電路 ( Common base circuit)、共射極電路(Common emitter circuit) 和 共集極電路(Common collector circuit),如下圖示。
圖11 由於共射極電路放大電路的電流增益和電壓增益均較其它兩種放大電路為大,故多用作訊號放大使用。 |
晶體三極管的放大作用晶體管是一個電流控制組件,其集極電流 IC可以由基極電流IB控制,只需輕微的改變基流IB就可以引起很大的集流變化IC。由於晶體管基流IB的輕微變化可以控制較大的集流IC,我們利用這一特點,用它來放大微弱的電信號,稱為晶體管的放大作用 (Amplification),簡稱晶體管放大。簡單來說,晶體管的放大原理是把微弱的電信號 (微弱的電壓信號 Vi) 加在基極上,使基極電流按電信號變化,通過晶體管的電流控制作用,就可以在負載上得到與原信號變化一樣,但增強了的電信號 (較大的電壓信號 Vo)。
詳情請參考:http://bbs.csdn.net/topics/390662889