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

📄 可加减计数时钟.c

📁 单片机写的程序都含有Protues仿真结果
💻 C
字号:
#include"reg51.h"
#define uchar unsigned char
#define uint unsigned int 
#define Hidden 0x10
uchar code disptab[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb};	//显示器位
uchar code zcodetab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f, //共阴极0~9
0x77,0x83,0xc6,0xa1,0x86,0x84,0x00};	//字码列表
uchar buf[6];			//显示器及字码缓冲
uchar setseccount;   //预置值
uchar seccount;	   //秒数值
uchar code th0=63266/256;
uchar code tl0=63266%256; 
bit ks;		//开始	
bit jiajian;  //加减计数	    
void delay(uchar del)											
{								
	uchar i;					
	for(;del>0;del--)
		for(i=0;i<125;i++)
			{;}							   
}
void ajcl(uchar jz)		//按键处理
{
		if((jz&0x10)==0) 
			ks=1;		  //开始
		if((jz&0x04)==0) jiajian=1;	   // 计数加
		if((jz&0x08)==0) jiajian=0;	   //计数减
		if((jz&0x40)==0)  //十位加一
			{	
			    ks=0;
				buf[4]++;
				if(buf[4]>=6) buf[4]=0;
				setseccount=buf[4]*10+buf[5];
				seccount=setseccount;
			}
		if((jz&0x80)==0)	   //个位减一
			{
				ks=0;
				buf[5]++;
				if(buf[5]>=10) buf[5]=0; 
				setseccount=buf[4]*10+buf[5];
				seccount=setseccount;
			}
	    if((jz&0x20)==0) ks=0;	 //停止
}
uchar aj()			//按键函数
{	uchar jz;
	uchar t;
	P3|=0xfc;
	jz=P3;
	jz|=0x03;
	if((jz|=0x03)==0xff) return(0);
	delay(10);
	jz=P3;
	if((jz|=0x03)==0xff) return(0);
	else
		for(;;)
		{
			t=P3;
			if((t|=0x03)==0xff)
				break;
		}
	return(jz);
}
void timer0() interrupt 1
{
	static uchar count=0;	// 位计数
	static uint counter=0;	//秒计数  这里的 数据类型匹配
    uint mz=400;		   //一秒计数值
	uchar t; 			  //中间变量
	TH0=th0;
	TL0=tl0; 
	t=disptab[count];            
	P2|=0xfc;
	P2&=t;
	t=buf[count];
	t=zcodetab[t];
	P0=t;
	count++;
	if(count>=6) count=0;
	counter++;
	if(counter>=mz)
	{
		counter=0;
		if(ks)				 //这里是 预置值的关键 只有ks=1 秒计数 才开始动作
        {
		    if(!jiajian)
				if((seccount--)==0) seccount=setseccount;
			if(jiajian)
				if((seccount++)>=59) seccount=setseccount;

	    }
	}
}	
void main()
{	uchar i,jz;
	TMOD=0x01;
	TH0=th0;
	TL0=tl0;
	EA=1;
	ET0=1;
	TR0=1;
	for(i=0;i<5;i++)	 //前4位消隐 和初始第四位消隐
        buf[i]=Hidden;
	buf[4]=seccount/10;
	buf[5]=seccount%10;						
	for(;;)
	{	
		jz=aj();
		if(jz)
			ajcl(jz);
		buf[4]=seccount/10;
		buf[5]=seccount%10;	
	}
}
		

⌨️ 快捷键说明

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