单片机四个按键做加减乘除功能

本文介绍了一种使用单片机实现计数器的方法,通过四个按键进行加减操作及控制计数器运行,利用数码管显示计数值。文中详细展示了基于8051内核单片机的硬件连接和软件编程过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这里写自定义目录标题

单片机四个按键做加减乘除功能

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
 
sbit k1=P3^0;
sbit k2=P3^1;
sbit k3=P3^2;
sbit k4=P3^3;
sbit du=P2^6;
sbit we=P2^7;
uchar counter,num;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71 };
 
uchar code list[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};   //数码管的段选
 
delay_ms(uint ms)
{
	uint i;
	uint j;
    for(i=0;i<ms;i++)
    {
        for(j=0;j<200;j++);
        	for(j=0;j<102;j++);
    }
}
 
void display(uchar i)
{
	uchar shi,ge;
	shi = i / 10; //取十位
	ge  = i % 10; //求余,取各位
	
	P0 = 0xff;
	we = 1;
	P0 = list[0]; //点亮第一位数码管
	we = 0;
 
	du = 1;
	P0 = table[shi];
	du = 0;
	delay_ms(1);
 
	P0 = 0xff;
	we = 1;
	P0 = list[1];//点亮第二位数码管
	we = 0;
 
	du = 1;
	P0 = table[ge];
	du = 0;
	delay_ms(1);	
}
void init()
{
	TMOD=0x10; //定时器1,工作模式1,16位模式定时器
	TH1=(65535-45827)/256;
	TL1=(65535-45827)%256;  //定时50ms
	//TR1=1;     //启动定时器
}
 
void key()
{
	if(k1==0)
	{
		delay_ms(10);
		if(k1==0)
		{
			num++;
			if(num==60)
				num=0;
			while(!k1); //等待按键释放
		}
	}
	if(k2==0)
	{
		delay_ms(10);
		if(k2==0)
		{
			if(num==0)
				num=60;
			num--;
			while(!k2); //等待按键释放
		}
	}
	if(k3==0)
	{
		delay_ms(10);
		if(k3==0)
		{
			num=0;
			while(!k3); //等待按键释放
		}
	}
	if(k4==0)
	{
		delay_ms(10);
		if(k4==0)
		{	
			TMOD=0x10;
			TH1=(65535-45827)/256;
			TL1=(65535-45827)%256;
			TR1=1;
			while(1)
			{	if(TF1==1)
				{
	
					TF1=0;
					TH1=(65535-45827)/256;
					TL1=(65535-45827)%256;  //定时50ms
					counter++;
				}
				if(counter==20)
			 	{
					counter=0;
					num++;
				}
				if(num==60)
				{
					num=0;
				}
				display(num);	
			}
			while(!k4);	  //等待按键释放
			{
                            TR1=~TR1; 
			}
		}
	}
}
 
void main()
{
	init();
	while(1)
	{	
		key();
		display(num);
	}
}		
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值