|
統計一分鐘按鍵次數
0.png (10.58 KB, 下載次數: 31)
下載附件
2019-6-5 07:11 上傳
#include <reg51.h>
sbit P2_0 = P2^0;//數碼管選定位
sbit P2_1 = P2^1;//數碼管選定位
sbit P2_2 = P2^2;//數碼管選定位
sbit P2_3 = P2^3;//數碼管選定位
sbit k1=P1^0;
sbit k2=P1^1;
//共陽數碼管
unsigned char code table[] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0x88, 0x83, 0xc6, 0xa1, 0x86, 0x8e};
//unsigned int motorspeed = 0;
unsigned int bcf = 0;
unsigned char GE, SHI, BAI, QIAN;
//unsigned int counter = 0;//脈沖數
unsigned char calsp;//多長時間計數一次
unsigned char num1=60;//秒數
unsigned char Button_count=0;//按鍵次數
unsigned char da;
void display(unsigned char da);//數碼管顯示
void delay();//延遲函數
//void calspeed();
void Button_sum(bcf);//按鍵總次數
void scankey();//按鍵掃描
void Init();//初始化
void main()
{
//EA = 1;//開啟部中斷
// EX0 = 1;//開啟外部中斷0
//IT0 = 1;//設置成下降沿觸發方式
// TMOD = 0x01;//設置定時器0為模式1,即16位計數模式
// TH0 = (65536-10000)/256;//計數時間為10ms
// TL0 = (65536-10000)%256;
// ET0 = 1;//開啟定時器0中斷
// TR0 = 1;//啟動定時器0
P2 = P2&0xf0;//將P2的1-4置為1
Init();//初始化子函數
while(1)
{
scankey();
Button_sum(bcf);
if(num1==0)
{
TR0=0;
bcf=1;
ET0=0;
//k1=1;
}
display(Button_count);
//display(bcf);
//display(num1);
}
return ;
}
void Init() //初始化子函數
{
TMOD=0X01; //設定定時器0的工作方式為1
TH0=(65536-50000)/256; //定時器裝初值一個周期50ms
TL0=(65536-50000)%256;
EA=1; //開總中斷
ET0=1; //開定時器0中斷
TR0=1; //啟動定時器0
EX0=1;//開啟外部中斷
IT0=1;//設置成下降沿觸發方法
}
void Button_sum(bcf)
{
/*if(k1==0&&bcf==0){
delay();
if(k1==0&&bcf==0){
Button_count++;
if(Button_count>=10000)
Button_count=0;
while(!k1 && bcf==0);
}
}*/
if(bcf==0){
if(k1==0){
delay();
if(k1==0){
Button_count++;
if(Button_count>=10000)
Button_count=0;
while(!k1);
}
}
}
else{
Button_count=0;
}
//Button_count=bcf;
}//統計按鍵總次數
void scankey() //鍵盤檢測子函數
{
if(k1==0) //檢測鍵是否被按下
{
delay(); //延時消除抖動
if(k1==0) //重新讀取k1的值
{
Button_count++; //num2為按次數標志位
while(!k1); //等待按鍵釋放
if(Button_count==1) //按鍵一次計時開始
TR0=1;
}
}
if(k2==0)
{
delay();
if(k2==0)
{
TR0=0;
num1=60;
calsp=0;
Button_count=0;
bcf=0;
}
}
}
//數碼管顯示函數,依次點亮數碼管
void display(unsigned char da)
{
GE = da%10;
SHI = da/10%10;
BAI = da/100%10;
QIAN = da/1000%10;
P2_0 = 1;
P0 = table[QIAN];
delay();
P2_0 = 0;
P2_1 = 1;
P0 = table[BAI];
delay();
P2_1 = 0;
P2_2 = 1;
P0 = table[SHI];
delay();
P2_2 = 0;
P2_3 = 1;
P0 = table[GE];
delay();
P2_3 = 0;
}
//延遲函數
void delay()
{
unsigned char i = 10;
while(i--)
;
}
void _TIMER0() interrupt 1
{
TH0 = (65536-50000)/256;//重新裝入初值,計數時間為50ms
TL0 = (65536-50000)%256;
calsp++;
if(calsp==20)
{
calsp=0;
num1--;
/* if(num1==0)
TR0=0;,
bcf=1;*/
}
}
|
-
-
60s計數器.rar
2019-6-4 16:39 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
12.55 KB, 下載次數: 21, 下載積分: 黑幣 -5
|