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

📄 可预置计数器.c

📁 计数器程式 控制器为AT89c52单片机,设定按钮,加按钮,减按钮:采用共阳七段数码管显示器。*/
💻 C
字号:





/*
标题:计数器程式 08-11-29
版本:1.0
Target:89c52
程序描述:
共阳七段显示器。*/
/* ***************************************************** */

#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
#define nop _nop_()
#define disdata P0
sbit a=P3^2;//计数输入
sbit START=P3^7;//启动按钮
sbit SET=P3^6;//设定按钮
sbit UP=P3^0;//加按钮
sbit DOWN=P3^1;//减按钮
sbit OUT=P3^4;//输出
bit  FLAG0=0;//设置指标
uint pv=0;//计数暂存
uint sv=0;//设定值暂存
uint tmp;//显示暂存
uint e;//加速
uchar d;//闪烁
uchar f;//延时
uchar code dis_7[11]=
{
	0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x00
};
/*   "0" "1"  "2"  "3"  "4"  "5"  "6"  "7"  "8"  "9" "不亮" */


void delay (unsigned int value) /*延时副程式*/ 
{ 
	while (value!=0) value--; /*10US 延时*/ 
}
void delay1(uint k)	//延时
{
	uint i,j;
	for(i=0;i<k;i++)
	  		for(j=0;j<1000;j++);
}
void js();//计数副程式
void display ();//显示副程式
void scan();//键盘扫描副程式
main()
{
	EA=1;
	ET1=1;
	EX0=1;
	EX1=1;
	IT0=1;
	IT1=1;
	TMOD=0x10;
	TH1=(5536-5000)/256;
	TL1=(6536-5000)%256;
	TR1=1;
P3=0xff;
	while(1)
	  {
		display ();
        scan();
		if(FLAG0==0&&OUT==1&&START==0)
			{
				pv=0;
				OUT=0;
			}
		if(pv>=sv)
			{
				OUT=1;
			}

	  }
}


/*********************************************/
void display ()
{
	//uint tmp;
	if(FLAG0==0)
		tmp=pv;
        
	else
	  { 
		tmp=sv;
	  }	

	  	P2=0xff;
		disdata=dis_7[tmp%10];
 		P2=0x06;
		   delay (100);
	    if (tmp/100==0&&tmp%100/10==0) 
			 disdata=0x7f;
			else  disdata=dis_7[tmp%100/10];
 			P2=0x05;
		  	delay (100);
		if (tmp/100==0) 
			 disdata=0x7f;
		    else  disdata=dis_7[tmp/100];
 			P2=0x03;
		    delay (100);
	  		P2=0xff;
	if(FLAG0==1)
	  {
		if(d>40&&UP&&DOWN)
		{
		d=0;   
		delay1(8);

		}
	  }
		
}
/*********************************************/
void scan()
{
		if(SET==0&&FLAG0==0&&OUT==1)
		  {
			delay (10000);
			while(SET==0);	
				FLAG0=1;
				delay (10000);

		  }
		if(FLAG0==1&&UP==0)
		 {
			if(e>500&&f>1)
			  {
				f=0;
				sv++;
				if(sv>999)
				sv=0;
			  }
			else 	
			  if(f>30)
				{
					f=0;
					sv++;
					if(sv>999)
					sv=0;
				}
		 }					
		if(FLAG0==1&&DOWN==0)
		  {	
			if(e>500&&f>1)
			  {
				f=0;
				sv--;
				if(sv>999)
				sv=999;
			  }
			else									
			  if(f>30)
				{
					f=0;
					sv--;
					if(sv>999)
					sv=999;
				}
		 }
		if(SET==0&&FLAG0==1)
		  {
			delay (10000);
			while(SET==0);
			FLAG0=0;
			delay (10000);
		  }

}
/***********************************************/
void time1() interrupt 3 using 1
{
	TH1=(65536-5000)/256;
	TL1=(65536-5000)%256;
	if(FLAG0==1)
	{
		if(d<220)
		d++;
	}
	if(FLAG0==1&&(UP|DOWN))
		if(f<220)
			f++;
		if(e<1000)
			e++;
	if(UP==1&&DOWN==1)
			e=0;
}
/*********************************************/
void ext0() interrupt 0
{
	
		pv++;
		if(pv>999)
		pv=0;

}
/**********************************************/
void ext1() interrupt 2
{

}

⌨️ 快捷键说明

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