⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 anjian2.c

📁 一个简单但功能丰富的开发板程序
💻 C
字号:
/*************************************************************************** 
	应用范例 3-2
	标题:范例  3-2
 	版本:1.0//
 	Target:	    STC89C52RC    
 	程序描述:这个程序说明如何利用中断函数来判断按键的输入 .   
                  利用延迟函数检测按键让CPU在执行循环是其他工作无法进行   
                  把时间延迟的部分交给Timer0来处理,CPU可以处理别的事情  
                  提高利用效率   
****************************************************************************/           
#include <reg51.h>
#include <intrins.h>

#define  TIMER0_COUNT 0xEE11 /*10000h-(12,000,000/(12*200))*/
#define  TRUE           1
#define  FALSE          0
#define  TIMES          25

#define uint unsigned int
#define uchar unsigned char
code seven_seg[10] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
code bit_select[6] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf};
char counter[3] = {0,0,0};
uint x,y,z,a,b,c,d;
sbit key1 = P3^0;
sbit key2 = P3^1;
sbit key3 = P3^2; 
sbit key4 = P3^3;
sbit FMQ = P3^4; 
sbit JDQ = P3^5;
uchar key1_state,key2_state,key3_state,key4_state,key1_flog;
uchar flash,key_num,select,ups,downs;
/***********************************************
                   延迟子函数   
************************************************/
/*
void delay_400us(uchar i)
{
	uchar a,b;
	for(a=i;a>0;a--)
		for(b=100;b>0;b--)
			_nop_();
}
void delay(uchar i)
{
	while(i)
	i--;
}
*/
void timer0_init(void)
{
  EA=0;
  TR0=0;
  TMOD &= 0xF0;
  TMOD |=0x01;
  TL0=(TIMER0_COUNT & 0x00FF);
  TH0=(TIMER0_COUNT >> 8);
  PT0=0;
  ET0=1;
  TR0=1;
  EA=1;
}
/************************************************************
     在T0的中断服务函数 timer0_isr 中检查是否有按键按下   
*************************************************************/
void timer0_isr(void) interrupt 1 
{
  TR0=0;
  TL0=(TIMER0_COUNT & 0x00FF);
  TH0=(TIMER0_COUNT >> 8);
  TR0=1;
  
  if(select != 0){
      select--;
      if(select == 0 && key1 == 0)
           key1_state++;
           if(key1_state == 6)key1_state=0;
   }
   else if (key1 == 0)select=TIMES;
 
  if (ups !=0) {                //检查ups等于0吗?
      ups--;                    //如果ups不等于0,就将ups减1
      if (ups==0 && key2==0) {  //如果ups减到0,就检查P2_0==0
           key_num++; // 如果P2_0是0就表示上数的弹跳按钮被按下,所以c加1
           if(key_num==10) key_num=0;       //如果c加到10,就将c恢复为0
      }
  } 
  else if (key2 == 0) ups=TIMES;  //如果ups=0且P2_0=0就将ups设为25
  
  if (downs !=0) {                //检查downs等于0吗?
      downs--;              //如果downs不等于0,就将downs减1
      if (downs == 0 && key3 == 0){ //如果downs 减到0,就检查P2_1=0
           key_num--;  // 如果P2_1是0就表示下数的弹跳按钮被按下,所以c减1
           if(key_num==-1) key_num=9;      //如果c减到-1时,就将c恢复为10
      }
  } 
  else if (key3 == 0) downs=TIMES;  //如果downs=0且 P2_1 =0就将downs设为25
  
  P0 = seven_seg[key_num];
  P2 = bit_select[key1_state];
}
/************************************************
                 主函数   
*************************************************/
void main()
{
	timer0_init();
	while(1);
}




⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -