使用計數器T0,工作在方式0,對外部脈沖進行計數,當外部脈沖數量累計達到1000后LED顯示值加1。其實驗電路如圖所示
分析: 使用計數器與使用定時器類似,只是計數脈沖由系統時鐘脈沖改為外部脈沖。也可以使用中斷查詢的方式進行編程,就是先給定時器寄存器賦初值,當計滿后就清掉溢出標志TF0.再進入下一輪中斷,當然也可以不使用中斷查詢,而直接使用數值比較完成要求,數值比較其實就是每次都將TH0和TL0與預設的Hight和Lower進行比較,當比較的結果都為真時,進行計數到后的服務程序。下面依次給出其程序清單。
(1)使用中斷查詢方式的程序清單如下:
sfr data_buf=0xA0; //顯示數據端口
unsigned char conter; //全局變量,用于保存計數值
void main(void)
{
conter=0;
Conter_Init();
while(1)
{
Conter0();
disply(conter);
}
}
void Conter_Init(void)
{
TMOD=0x04; //工作方式設置
/*計數器初值設置*/
TH0=0xe0; //初始值設置,7192轉為13位后的高8位
TL0=0x18; //初始值設置,7192轉為13位后的低5位
/*關閉計數器中斷*/
EA=0 ; //關中斷
ET0=0 ; //關T0中斷
/*啟動計數器*/
TR0=1 ; //啟動T0
}
void Conter0(void)
{
if(TF0==1)
{
TF0=0;
/*計數器初值設置*/
TH0=0xe0; // 初始值設置
TL0=0x18;
conter++;
if(conter >=99)
conter=0;
}
}
void disply(unsigned char BCD) //顯示函數
{
unsigned char x,y; //定義x,y兩個變量
x=BCD%10; //取i的個位字符BCD編碼放于x中
y=BCD/10; //取i的十位字符BCD編碼放于y中
y< <=4; //x左移4位
data_buf=y|x; //返回個位與十位的組合BCD編碼并送P2口顯示
}
通過上面案例可以看出使用定時器/計數器的基本步驟如下。
1 寫TMOD,設置定時器/計數器的工作方式。
2 計算定時器/計數器的初值,并將初值寫入TH0/TH1、TL0/TL1。
3 設置IE、IP,以開放或關閉相應的中斷和設定中斷優先級。
4 啟動定時/計數器。
5 根據條件調用定時器/計數器服務函數。
-
寄存器
+關注
關注
31文章
5427瀏覽量
123733 -
計數器
+關注
關注
32文章
2290瀏覽量
96151 -
中斷
+關注
關注
5文章
904瀏覽量
42586 -
定時器
+關注
關注
23文章
3297瀏覽量
117462 -
CD4511
+關注
關注
4文章
24瀏覽量
29837
發布評論請先 登錄
大學生電子設計—脈沖寬度測量與顯示
CD4511 pdf datasheet
CD4511應用電路

VR頭顯2021年或將實現兩位數增長
利用ATmega328P和4位7段顯示器制作兩位數加減計數器

評論