單片機(jī)C語(yǔ)言程序設(shè)計(jì):用計(jì)數(shù)器中斷實(shí)現(xiàn)100以內(nèi)的按鍵計(jì)數(shù)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
/* 名稱:用計(jì)數(shù)器中斷實(shí)現(xiàn) 100 以內(nèi)的按鍵計(jì)數(shù)
說(shuō)明:本例用 T0 計(jì)數(shù)器中斷實(shí)現(xiàn)按鍵技術(shù),由于計(jì)數(shù)寄存器初值為 1,因此
P3.4 引腳的每次負(fù)跳變都會(huì)觸發(fā) T0 中斷,實(shí)現(xiàn)計(jì)數(shù)值累加。
計(jì)數(shù)器的清零用外部中斷 0 控制。
*/
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
//段碼
uchar code
DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};
uchar Count=0;
//主程序
void main()
{
P0=0x00;
P2=0x00;
TMOD=0x06; //計(jì)數(shù)器 T0 方式 2
TH0=TL0=256-1; //計(jì)數(shù)值為 1
ET0=1; //允許 T0 中斷
EX0=1; //允許 INT0 中斷
EA=1; //允許 CPU 中斷
IP=0x02; //設(shè)置優(yōu)先級(jí),T0 高于 INT0
IT0=1; //INT0 中斷觸發(fā)方式為下降沿觸發(fā)
TR0=1; //啟動(dòng) T0
while(1)
{
P0=DSY_CODE[Count/10];
P2=DSY_CODE[Count%10];
}
}
//T0 計(jì)數(shù)器中斷函數(shù)
void Key_Counter() interrupt 1
{
Count=(Count+1)%100; //因?yàn)橹挥袃晌粩?shù)碼管,計(jì)數(shù)控制在 100 以內(nèi)(00~99)
}
//INT0 中斷函數(shù)
void Clear_Counter() interrupt 0
{
Count=0;
}
擴(kuò)展閱讀:10s的秒表程序